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

 
Vitaly Muzichenko:

Всё что описали, делает код выложенный ранее, за исключением выделенного жёлтым - считаю лишним и не совсем корректным. Как-то ни разу не встречал, чтобы ролловер был у кого-то в другое время, всегда у всех в одно и тоже - в 22-00 по GMT, хотя могу и ошибаться.

Но часто встречал разную длительность ролловера, у одних 5 минут, а у других чуть больше минуты.

---

Проверочный код, может что измените:

Так и привяжи всё к времени GMT. Получил разницу локального времени и серверного, и сразу можешь понять через сколько ролловер. А 5 минут или 1 думаю не значительная разница. Возьми для всех 5 минут.

 
Alexey Viktorov:

Так и привяжи всё к времени GMT. Получил разницу локального времени и серверного, и сразу можешь понять через сколько ролловер. А 5 минут или 1 думаю не значительная разница. Возьми для всех 5 минут.

Чем ваш вариант лучше, или надёжней?

Если можно, покажите кодом!
 
Vitaly Muzichenko:

Чем ваш вариант лучше, или надёжней?

Может быть и ничем. Я не следил за вашими кодами. Просто высказал своё мнение.

 

Vitaly Muzichenko:

Если можно, покажите кодом!

Притворяетесь?

 
Alexey Viktorov:

Может быть и ничем. Я не следил за вашими кодами. Просто высказал своё мнение.

Вот всё в одном сообщении:

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

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

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

Vitaly Muzichenko, 2021.02.11 14:04

Всё что описали, делает код выложенный ранее, за исключением выделенного жёлтым - считаю лишним и не совсем корректным. Как-то ни разу не встречал, чтобы ролловер был у кого-то в другое время, всегда у всех в одно и тоже - в 22-00 по GMT, хотя могу и ошибаться.

Но часто встречал разную длительность ролловера, у одних 5 минут, а у других чуть больше минуты.

---

Проверочный код, может что измените:

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false); // ролловер
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false); // собираем спред на 500 тиках
   return(res>_sp?true:false);
}

 
Vitaly Muzichenko:

Вот всё в одном сообщении:

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


В течении целого часа нет торговли?

   if(dt.hour==22) return(false); // ролловер

или чего-то не так понял?

 
Vitaly Muzichenko:

Вот всё в одном сообщении:

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


мы просто гипотетически запрещаем некую запись (файл, бд) спреда именно в ролловер? 

 
Alexey Viktorov:

В течении целого часа нет торговли?

или чего-то не так понял?

Верно, целый час после - увеличенный спред. Да и перед ролловером за 5 минут кое где он тоже расширен.

 
Alexey Viktorov:

В течении целого часа нет торговли?

или чего-то не так понял?

Впрочем, можно прописать так:

void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",res );
   } else Comment( "false: ",sp,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  static int ts=0;
  static long tc=0;
  TimeGMT(dt);
   if(dt.hour==22 && res<_sp) return(false); // Если 1 час после ролловера спред упадёт до нормального - торгуем
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   if(tc<500) return(false);
   return(res>_sp?true:false);
}

Вроде правильно должно работать.

 
Vitaly Muzichenko:

Впрочем, можно прописать так:

Вроде правильно должно работать.

Улыбнуло) не должно)

Если битва за - торгануть с нормальным спредом, просто вынести его "предел" в input и просто игнорить торговлю если спред выше предела.

Спред могут диллинги растягивать и без ролловера.

Причина обращения: