Ошибки, баги, вопросы - страница 3587

 
Alexey Viktorov #:

Всё гораздо проще.

Максимальное количество показываемых заявок в стакане. По моим наблюдениям и как правило это чётное количество. Следовательно SYMBOL_TICKS_BOOKDEPTH/2 это заявки BUY и SYMBOL_TICKS_BOOKDEPTH/2-1 будут заявки SELL. Те самые которые вы назвали ценами Bid и Ask

Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.

Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.

 
JRandomTrader #:

Не всегда там будет именно пополам заявок, и не всегда там будет полный стакан.

Поэтому делим пополам, а уже оттуда ищем, если вдруг сразу не попали.

Убедительно. Понял. Спасибо.

 
Denis Kirichenko #:

Вот любите Вы всё усложнять, коллега ))

Я пошёл немного другим путём:

Компилятор такое пропустил. Но в run-time получилось так:

И в итоге ошибки посыпались в журнале:

Честно, не знаю, ошибся компилятор или run-time.

Ошибся компилятор, код не должен компилироваться.
Спасибо, исправлено.

 
Файл MetaTrader 5\logs\metaeditor.log в режиме дозаписи, поэтому может занимать сотни мегабайтов с действиями, датируемыми много лет назад.
 

Есть ли ограничение на запись в файл.

Пока не могу разобраться почему запись в файл в функции

void OnTesterDeinit()

ограничивается ровно в файл в 12 кб


В остальных местах пишется нормально. а тут запись прямо прерывается уже в 4-ый раз, или стартуем вручную рестартом терминала снова и бац, файл уже в 22 кб.

 
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку:
   datetime Curr_bar = iTime(SymbolName(i,true),periods[x],0);     
   static datetime SignalTime = Curr_bar;   

if(//code search signal && SignalTime != Curr_bar){
Print("Signal buy");
SignalTime = Curr_bar;
}
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) 
Позже у другого программиста подсмотрел код с немного другой проверкой:
   int currBars = iBars(SymbolName(i,true),periods[x]);
   static int prevBars = currBars;
   if (prevBars == currBars) return;
   prevBars = currBars;
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку& 
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал 
 
Igor168 #:
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick. Для того, чтобы сигналы не повторялись я использовал следующую проверку:
Сегодня данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) 
Позже у другого программиста подсмотрел код с немного другой проверкой:
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку& 
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал 
   static datetime nextTime = 0;
   
   if(TimeCurrent() >= nextTime) // новый бар
     {
      int perSec = PeriodSeconds(PERIOD_CURRENT);
      nextTime = TimeCurrent() - TimeCurrent() % perSec + perSec;
     }

Функцию iTime() нужно обязательно проверять, так как она может вернуть ноль.

Лучше использовать время последней котировки, оно всегда какое нибудь да есть.

 
   static datetime nextTime = 0;
   
   if(TimeCurrent() >= nextTime) // новый бар
     {
      int perSec = PeriodSeconds(PERIOD_CURRENT);
      nextTime = TimeCurrent() - TimeCurrent() % perSec + perSec;
     }
   


   if(bars[0].low < bars[1].low && bars[0].close>(bars[0].high-bars[0].low)/2){
   Print("Bar buy! " + SymbolName(i,true) + " " + truncPrds(periods[x]));
   }
Aleksandr Slavskii #
:

Функцию iTime() нужно обязательно проверять, так как она может вернуть ноль.

Лучше использовать время последней котировки, оно всегда какое нибудь да есть.

Попробовал. Эксперт также отправляет повторяющиеся сигналы
Делал я это в функции OnTick

 
Igor168 #:

Попробовал. Эксперт также отправляет повторяющиеся сигналы
Делал я это в функции OnTick

Поставьте шлагбаум. Шлагбаум открыт, появился сигнал, выдали свисток, закрыли шлагбаум. Дошли до момента когда сигнала нет, открыли шлагбаум… И повторяем…

 
Alexey Viktorov #:

Поставьте шлагбаум. Шлагбаум открыт, появился сигнал, выдали свисток, закрыли шлагбаум. Дошли до момента когда сигнала нет, открыли шлагбаум… И повторяем…

Могли бы вы привести пример такого шлабаума для мультивалютного эксперта? 
Я пробовал, но вышло не очень. Объясню в чем у меня была загвоздка. Всего 9 пар. На текущем баре из 9 пар, есть три сигнала. Один сигнал эксперт отправит, следующие уже нет так как шлагбаум закрыт. На следующем баре, когда шлабаум снова открыт он отправит еще один сигнал. Остальные он не отправит. А мне нужно создать эксперта, который проанализировал все указанные ему инструменты, отправил по ним сигнал. Без повтора одного и того же сигнала и если на следующих барах появятся еще сигналы, то он отправит оповещения по этим сигналам