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

 

Может таким образом?

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

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

Как исправить код?

 
Vitaly Muzichenko:

Может таким образом?

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

Как исправить код?

Логика не очень. Зачем именно среднее значение от 50 тиков со счетчиком до лонгмакс, которые могут длиться долго.

Есть декларируемый спред в свойствах символа. Его изначально вносить инпут. А если не внесен, то получать. И если мы получаем увеличенный спред, то ошибочно считаем его за средний. Среднее значение на достаточно коротком отрезке и нужно что бы заметить изменение.

Если есть спред из инпут сравниваем на каждом тике и набираем среднее значение до нужного. Вопрос, что потом не запоминая промежуточных значений  среднее не посчитать. Пользуюсь так, запоминаю все значения, и когда получаю последнее значение плюс один, прибавляю его к сумме и вычитаю первое, и сдвигаю нумерацию (в массиве А(n)=A(n+1)). Это дешевле, чем набирать счетчик до огромных значений. А до 10 - 20 значений переменные юзаю.

Не знаю что дороже SymbolInfoInteger  или разница между Бид и Аск.)

 
Valeriy Yastremskiy:

Логика не очень. Зачем именно среднее значение от 50 тиков со счетчиком до лонгмакс, которые могут длиться долго.

Есть декларируемый спред в свойствах символа. Его изначально вносить инпут. А если не внесен, то получать. И если мы получаем увеличенный спред, то ошибочно считаем его за средний. Среднее значение на достаточно коротком отрезке и нужно что бы заметить изменение.

Если есть спред из инпут сравниваем на каждом тике и набираем среднее значение до нужного. Вопрос, что потом не запоминая промежуточных значений  среднее не посчитать. Пользуюсь так, запоминаю все значения, и когда получаю последнее значение плюс один, прибавляю его к сумме и вычитаю первое, и сдвигаю нумерацию (в массиве А(n)=A(n+1)). Это дешевле, чем набирать счетчик до огромных значений. А до 10 - 20 значений переменные юзаю.

Не знаю что дороже SymbolInfoInteger  или разница между Бид и Аск.)

Только слово "Плавающий", от этого и задача


 
Vitaly Muzichenko:

Только слово "Плавающий", от этого и задача


погорячился.) Тогда логика веры правильности первых значений. Или подождать 10 минут, набрать статистику плавности изменения спреда за это время, найти средний минимальный участок из 50 или 100 тиков, и принять его за среднее. Контроль времени начала, что бы оно не попадало на время не работы бирж. Если уж по полной защите и от дурака тоже)

 
Valeriy Yastremskiy:

погорячился.) Тогда логика веры правильности первых значений. Или подождать 10 минут, набрать статистику плавности изменения спреда за это время, найти средний минимальный участок из 50 или 100 тиков, и принять его за среднее. Контроль времени начала, что бы оно не попадало на время не работы бирж. Если уж по полной защите и от дурака тоже)

Вот это нужно как-то избежать.

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

 
Vitaly Muzichenko:

Вот это нужно как-то избежать.

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

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

 
Vitaly Muzichenko:

Вот это нужно как-то избежать.

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

Для ролловера нужно делать отдельные параметры времени: начало/окончание. 
И ничего не делать в это время (кроме коммента "ролловер, ждём").

 
Taras Slobodyanik:

Для ролловера нужно делать отдельные параметры времени: начало/окончание. 
И ничего не делать в это время (кроме коммента "ролловер, ждём").

Был параметр "Работа по времени", сменил дилинг и запустил сов - сделку открыл на ролловере.

Время дилинга оказалось -1 gmt, вместо привычных +2 gmt

Поэтому возникло большое желание уйти от прописывания времени.

 
Vitaly Muzichenko:

Был параметр "Работа по времени", сменил дилинг и запустил сов - сделку открыл на ролловере.

Время дилинга оказалось -1 gmt, вместо привычных +2 gmt

Поэтому возникло большое желание уйти от прописывания времени.

Если заменить "значение времени" на разницу между пришедшим(новым) временем и последним рассчитанным? подойдет?

Т.е. будем знать что пришло новое время:

-из нового дня

-из новой недели

-или с разницей больше указанной

 
Vitaly Muzichenko:

Был параметр "Работа по времени", сменил дилинг и запустил сов - сделку открыл на ролловере.

Время дилинга оказалось -1 gmt, вместо привычных +2 gmt

Поэтому возникло большое желание уйти от прописывания времени.

Сделай если начало недели "ролловер, ждём" и не важно время сервера
Причина обращения: