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

 
Boris:

Так... Прочитал документацию (еще раз).

Вопрос. Что не так? Не считает ни через CopyTicksRange ни через CopyTicks

Читайте ещё и ещё и ещё… Читайте до тех пор пока не прочтёте то, что я лично для вас скопировал из документации и выделил жирным красным шрифтом.

Вот досада… цитаты не цепляются… придётся продублировать…

from_msc

[in]  Дата, начиная с которой запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from_msc не указан, то отдаются тики от самого начала истории. Отдаются тики со временем >= from_msc.

to_msc

[in]   Дата, по которую запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Отдаются тики со временем <= to_msc. Если параметр to_msc не указан, то отдаются все тики до конца истории.


 
Boris:

Так... Прочитал документацию (еще раз).

Вопрос. Что не так? Не считает ни через CopyTicksRange ни через CopyTicks

Вопрос который возник у меня например, я плохо знаю мкл5, это слово Дата, а не Время. И соответственно вопрос, а в пределах одной даты какой возрат будет?

И после подсказки. Как получить время в миллисекундах?

 
Valeriy Yastremskiy:

Вопрос который возник у меня например, я плохо знаю мкл5, это слово Дата, а не Время. И соответственно вопрос, а в пределах одной даты какой возрат будет?

И после подсказки. Как получить время в миллисекундах?

1 секунда = 1000 миллисекунд. А «Дата» подразумевает «Дата и Время», ведь тип datetime а не просто date.

 
Alexey Viktorov:

Читайте ещё и ещё и ещё… Читайте до тех пор пока не прочтёте то, что я лично для вас скопировал из документации и выделил жирным красным шрифтом.

Вот досада… цитаты не цепляются… придётся продублировать…


Блин... ну да... Заработало! 

 

ВОПРОС по mql4:

Есть в коде советника ограничение по спреду, советник устанавливается на несколько графиков.

Во входные параметры вписывать средний спред по паре как-то не совсем правильно, да и у разных дилингов он разный.

По паре средний спред 5пп, но бывают моменты, что он расширяется на пару минут до 12пп, и это не момент ролловера.

Каким образом это автоматизировать, чтобы вычислить средний спред и не открывать позиции на расширенном?

   MqlRates rates[]; 
   int copied=CopyRates(NULL,PERIOD_M1,0,100,rates); 
   if(copied>0) 
   for(int e = ArraySize(rates)-1; e >=0; e--) {
     Print(e,"=",rates[e].spread); // всегда "0"
   }
 

Всем доброго, возможно ли это и как создать эксперт на основе такого алгоритма открытия и закрытия сделки без применения каких либо индикаторов

например берем две линий одна трендовая вверх а вторая тоже самая вниз, ложим друг на друга появляется точка пересечения между двух линий допустим это точка стоит в 15-30 по времени, дальше как сделать так чтобы ордер автоматом открывался ровно в это же время для начало в любую сторону, как сделать так чтобы алгоритм будет находит эти точки и открывать позицию? Хотелось бы пояснение и ваши мнения. 

Можно ли на основе такого Т3 сделать советник?
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
Vitaly Muzichenko:

ВОПРОС по mql4:

Есть в коде советника ограничение по спреду, советник устанавливается на несколько графиков.

Во входные параметры вписывать средний спред по паре как-то не совсем правильно, да и у разных дилингов он разный.

По паре средний спред 5пп, но бывают моменты, что он расширяется на пару минут до 12пп, и это не момент ролловера.

Каким образом это автоматизировать, чтобы вычислить средний спред и не открывать позиции на расширенном?

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

Я бы смотрел указанный в свойствах символа, принимал бы его за средний и разумно увеличив ставил бы условие перед открытием ордеров. И для закрытия или модификации тоже бы смотрел спред. Ну или спред на последних 3 - 10 тиках средний мониторил.

 
Valeriy Yastremskiy:

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

Я бы смотрел указанный в свойствах символа, принимал бы его за средний и разумно увеличив ставил бы условие перед открытием ордеров. И для закрытия или модификации тоже бы смотрел спред. Ну или спред на последних 3 - 10 тиках средний мониторил.

Вчера около 1 минуты(а это не 10 тиков) был спред ~14пп при среднем нормальном спреде 4пп. Так вот в момент расширенного спреда робот вошёл в покупку.

10 тиков явно мало

 
Vitaly Muzichenko:

Вчера около 1 минуты(а это не 10 тиков) был спред ~14пп при среднем нормальном спреде 4пп. Так вот в момент расширенного спреда робот вошёл в покупку.

10 тиков явно мало

Тут задача фиксации начала изменений и окончания. и выбросов единичных изменений. и фиксация должна быть за короткий промежуток времени. Т.е. по времени фиксация среднего значения спреда от секунды до 10 секунд плавающим окошком. Надо смотреть сколько в среднем тиков в секунду или смотреть тики за 10 секунд и усреднять. Мне первый вариант ближе.

 
Valeriy Yastremskiy:

Тут задача фиксации начала изменений и окончания. и выбросов единичных изменений. и фиксация должна быть за короткий промежуток времени. Т.е. по времени фиксация среднего значения спреда от секунды до 10 секунд плавающим окошком. Надо смотреть сколько в среднем тиков в секунду или смотреть тики за 10 секунд и усреднять. Мне первый вариант ближе.

Решил таким способом:

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

   if(CheckSpr(sp)) {
     // Здесь код отправки
   }
}

//+------------------------------------------------------------------+
bool CheckSpr(int _sp)
{
  static int ts=0, res=0;
  static long tc=0;
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}

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

Данное решение считаю неэффективным, нужно как-то ограничить запись при ролловере, не применяя при этом ограничение по времени.

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