Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
17.03.2025, 07:15:46
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Просмотр сообщений

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - White Noise

Pages: 1 2 3 [4] 5 6 ... 11
46
extern year = 2014; // год
extern mounth = 1; // январь
static c;
static price;

function calc()


{         var time = getCandleTime();    var y = getYear(time);   var m = getMonth(time);     

     if(y >= year and m >= mounth ){   if(c == 0){ c = 1;  price = close; }     .......... ну а тут считать проц. изменения от price (она тут фиксированна для периода)...............     }    // моя основа индикатора
                             
}

47
Но я не тестировал, - по сути должно работать,...

48
extern year = 2014; // год
extern mounth = 1; // январь

function calc()


{         var time = getCandleTime();    var y = getYear(time);   var m = getMonth(time);     

     if(y >= year and m >= mounth ){  ................           здесь вся основа индикатора     ................          }
                             
}



49
Code: [Select]
#samewindow
#line 0 solid blue
//------------------------------------------------------------------------------------
static m; 
static stz; 
static pr;
static op;
var x;
var y;
//------------------------------------------------------------------------------------
function init() {
 x = new_object("hash");
 y = new_object("hash");
}
//------------------------------------------------------------------------------------
function onOrder(var id) {
 x = getOrder(id);
 stz = x["status"];  // Запоминаем статус заявки
}
function onTrade(var id) {
 y = getTrade(id);
 op = y["operation"]; // Запоминаем направление сделки
 pr = y["price"];  // Запоминаем цену сделки
}
//------------------------------------------------------------------------------------
function calc() {
if (m == 0) {trade_action::sell(1, ::lots); }
if (op == -1) {m = 1;} // где op = y["operation"]; переменная из хэша, что сделка на продажу прошла
 line[0] = MovAvg(ind_ema, 5, pt_close);
}

Когда скрипт запускаю в окне графика, происходит продажа 1 лота и все, дальше сделок нет. Так было и задумано.


Если запускаю этот скрипт в тестере стратегий на исторических данных он мне рисует вот такую картину


Ответ: На протяжении всей работы скрипта m=0;  соответственно до второй скобки компилятор даже не добирается (чтобы сделать m = 1), если бы в первых скобках стояла мультиплай версия продажи - то он бы шмалял продажи по каждому тику.
Так как там не мультиплай - делает продажу на каждую свечку по одному разу.

В целом условие которое вы ждете if (op == -1)  где op = y["operation"];   может и наступать,...но не сработает во-первых из вышеизложенного, и во-вторых - в переменную же сохраняется стринг в виде константы   "OP_SELL" - а не число, равное -1

Поэтому самое целесообразное, для такого минутного торга,   сделать так :

function calc() {

if (op == "OP_SELL") {m = 1;}

if (m == 0) {trade_action::sell(1, ::lots); }
 
 line[0] = MovAvg(ind_ema, 5, pt_close);
}


50
В личку отправил вариант для рассмотрения

51
Но помните, что она должна стоять вне всяких скобок любой другой функции - и боже упаси calc(); лучше в самый верх ее поставьте.

52
Давайте по новой :

как я говорил уже все действия из серии работы с графиком - перезагружают скрипт.

Но если вы "он вырубает полностью и робота "  про  - зеленый значек внизу - то тут вам просто надо сохранить конфигурацию окон - при установленном скрипте и включенном роботе (зеленый значок)

тогда не придется снова нажимать на красный значок - он всегда будет зеленым

но проконтролируйте :

1. Вы удалили старую функцию onStopRobot() ?
2. Есть ли у вас функция onStartRobot() ?  -  что вы там делаете ? Вдруг оттуда идет сигнал.

53
function onStopRobot()  - эта функция срабатывает только при нажатии на зеленый символ внизу слева.

А эта : onStopIndicator(var reason) - эта функция не смотря на (транзак полетел, комп вырубился, или параметры новые или смена периода) - и ей не нужен таймер, транзак всегда ее вызывает и сообщает нужный параметр. Поэтому целесообразнее исправить !!!


А когда вы открываете свойства и вводите туда extern переменные - после нажатия кнопки сохранить(ОК), сначала происходит вызов функции onStopIndicator(var reason) - про которую я вам написал, ...а потом опять с самого начала вызывается Init() - и скрипт с новыми переменными в том числе и статиками (static как вы помните вначале они многие нулевые - оно надо ?) - по новой загружается. и таймер новый создается тоже. 


А если вы постоянно будете вызывать свою функцию  function onStopRobot()  с помощью другого таймера - она постоянно будет грохать таймер, то значит где то будет этот таймер опять создаваться - а это не очень то удобная операция по эффективности ?

54
Вот решение : просто добавьте эту функцию

 function onStopIndicator(var reason) {

if(reason == E_PERIODCHANGE or reason == E_NEWPARAMS or reason == E_NEWCANDLES or reason == E_DELINDICATOR or reason ==  E_WNDDESTRUCTION) {


delTimer(timerID);      array1.clear(); array2.clear();                             }



т.е. мы просто удаляем этот объект таймер который находится в работе, скрипт приходит в состояние покоя.
ну и для пущей надежности добавить очищение всех массивов :  array1.clear(); array2.clear();


тогда все будет оке.   
   

55
Ребят а можно узнать у вас выпускаются какие не будь хот фиксы?
ибо я уже писал в супорт и там знают ошибку с данной функцией и как не будь побыстрей ее исправить каким не будь патчиком или заплаткой.
function init()
   {
      timerID = setTimer("fOrder", 1000, TIMER_PERIODICALLY);
   }

Кстати а какая тут у вас ошибка выходит ?

56
По сути тут нужно смотреть как присваивается price, ведь если он из спреда  - то  : какие If - ы стоят в самой функции onOrder() (ведь там у вас стоит алерт что он сработал)

Хотя как я помню еще в версии 1.16 onATFOrder(id) - использовали эту штуку,...потом были новости, что она не актуальна. Но тем не менее попробуйте ее.

57
Тут по сути можно и на ATF сделать - помочь ?

58
Спасибо большое, ответ исчерпывающий !!!

59
Heller подскажите пожалуйста !!!

Когда скрипт загружается - в нем есть определенное количество статических переменных, переменных типа var (локальные), далее условия if, ну и соответственно скобки {  } , и объекты типа массивы.

Вопрос:

1. Влияет ли на скорость работы скрипта - очень большое количество статических переменных static.
2. Влияет ли на скорость работы скрипта - очень большое количество локальных  переменных  var,  а так же массивов.

3. В какой момент компилятор определяет точное количество существующих переменных - и резервирует память. (в момент входа в скобки - где стоят локальные переменный var, или в момент загрузки скрипта в init()   )

4. Что имеет более весомый (это static, var, if, {}  -  или объекты типа массивов) расчет общей нагрузки скрипта на комп и на сам Транзак в целом - из которого потом уже транзак решает сколько памяти взять(запросить).

 

60
Подсистема ATF / Re: как???
« on: 28.01.2014, 08:24:44 »
Спасибо за ответ, уже так сделал, вполне себе не плохо получилось. Вот только проблем возник, другого плана, в тестировщике уже не прогнать стратегию:(

Стоп, так если внедрить в ваш скрипт - то прогнать по тестировщику.

Pages: 1 2 3 [4] 5 6 ... 11


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!