Особенности языка mql4, тонкости и приёмы работы - страница 19

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: Expert

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


Альтернатива

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


Не всегда будет работать, но чаще всего этого хватает.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 

Встала задача сохранять наименьшими силами все тики (без потерь) из Обзора рынка.

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

Вся фишка в запуске индикатора через загрузку такого tpl-файла (приведен полностью)

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

Он хорош тем, что баров нет. Поэтому ресурсы на них не затрачиваются.

По итогу 60 чартов. Столько же индикаторов. ~500Кб тиков в минуту записывается.

RAM ~450Mb, CPU ~3-8% (8 HyperThreading).


ЗЫ Кто соберется подобным заниматься, очень рекомендую запустить советник, который отслеживает частоту изменения данных в Обзоре рынка. У меня если дольше трех секунд не обновляется, делается принудительный релогин. Дело в том, что MT4 (да и MT5) при проблемах в сети может сам восстановить связь секунд через 10-15, а иногда до минуты не в состоянии. Только тогда делает сам релогин. Чтобы не терять тики за эти 10-15 секунд или даже минуту, рекомендую брать задачу восстановления связи на себя. Это же касается и терминалов с боевыми ТС.

 
fxsaber:

Встала задача сохранять наименьшими силами все тики (без потерь) из Обзора рынка.

Таки без потерь? Вроде развеяли этот миф уже.

 
Andrey Khatimlianskii:

Таки без потерь? Вроде развеяли этот миф уже.

Не помню точно, как себя в этом убедил. Знаю, что сравнивал собранную историю в MT4 с той, что у брокера. 100% совпадение было.

Использую HistoryTicks-решение из КБ. Когда сравниваю результат виртуального тестера по собранным тикам и MT5-тестера по выкачанным - 100% совпадение.

Проблемы могут быть только из-за связи. Советники, конечно, пропускают. Индикаторы - нет.

 
fxsaber:

Не помню точно, как себя в этом убедил. Знаю, что сравнивал собранную историю в MT4 с той, что у брокера. 100% совпадение было.

Использую HistoryTicks-решение из КБ. Когда сравниваю результат виртуального тестера по собранным тикам и MT5-тестера по выкачанным - 100% совпадение.

Проблемы могут быть только из-за связи. Советники, конечно, пропускают. Индикаторы - нет.

Кхм.. Я как раз о вашем разоблачении говорил:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.02.26 09:05

Если пришла пачка из трех тиков, то Calculate-событие вызовется три раза, но SymbolInfoTick будет возвращать самый поздний тик на каждом из этих трех вызовов. Т.е. так называемый сбор тиков без пропусков через индикаторы, мягко говоря, сомнительный.


Что-то изменилось?

 
Andrey Khatimlianskii:

Кхм.. Я как раз о вашем разоблачении говорил:

Что-то изменилось?

Когда была возня с CopyTicks, то шло сравнение сбора тиков и CopyTicks-результатов.

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

Надо закинуть через CustomTicksAdd пачку тиков и посмотреть. Но это MT5.


MT4 же можно проверить так. Два соседних записанных тика всегда должны отличаться. И тиковые объемы баров на сервере должны совпадать с барами из собранных тиков.

В 2018 году, наверное, что-то умное знал. Сейчас уже не помню.

 
fxsaber:

Не помню точно, как себя в этом убедил. Знаю, что сравнивал собранную историю в MT4 с той, что у брокера. 100% совпадение было.

Использую HistoryTicks-решение из КБ. Когда сравниваю результат виртуального тестера по собранным тикам и MT5-тестера по выкачанным - 100% совпадение.

Проблемы могут быть только из-за связи. Советники, конечно, пропускают. Индикаторы - нет.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Дайте советник для сбора тиковой истории

zenz, 2018.03.07 11:10

Я сравнение делал еще в сентябре. В архиве Альпари задержка публикации в 1 неделю, поэтому если делать текущее сравнение, то не раньше следующей недели получится (да и смысла особого не вижу - для себя я все уже выяснил).

Поэтому вот два скриншота за 22.09.2017. Терминал был запущен на пустом компе, с единственным индикатором который писал лог. Операционка XP SP3, версия терминала МТ4 билд 1090. Счет Alpari Pro-ECN Real.



Слева картинка из архива Альпари, а справа тики записанные индикатором.

При этом можно заметить, что тики до 17 секунды и после (16 и 18 секунда) совпадают полностью, т.е. дело, в данном случае, не в рассинхронизации времени. Повторяю, что пропуск тиков происходит не только в пределах одной секунды - т.е. не только быстрых тиков - но  и "медленные" проглатываются тоже. Системности в этом я не нашел.

Пояснение: Справа после точки от секунд архива Альпари не мили или микросекунды, а номер тика - так у них сделано почему-то.

Вот ссылка на ту тему: https://www.mql5.com/ru/forum/229889/page4#comment_6741502. Не думаю что в МТ4 что-то изменилось с тех пор, хотя я больше не проверял, но исхожу из того, что и индикаторы и советники в МТ4 пропускают тики.

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

Вот ссылка на ту тему: https://www.mql5.com/ru/forum/229889/page4#comment_6741502. Не думаю что в МТ4 что-то изменилось с тех пор, хотя я больше не проверял, но исхожу из того, что и индикаторы и советники в МТ4 пропускают тики.

Нет уверенности, что со стороны торгового сервера эти "пропущенные" тики были отправлены.

 
fxsaber:

Нет уверенности, что со стороны торгового сервера эти "пропущенные" тики были отправлены.

Тоже размышлял на эту тему, согласен. Я просто тогда исследование проводил и нашел, что случаи расхождения не единичные, а периодически встречающиеся - на том и успокоился.