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

 
Alexey Viktorov:

Артём, я не зря начал ответ со слов


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

Дребезжит - не раз замечал раньше. Может что поменялось с тех времён, но то, что точка на нулевом баре может пропасть - было.

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

 
Artyom Trishkin:
Может поможет? Там я выкладывал шаблон, из которого сами себе можете что хотите сделать.

Спасибо, применил примерным образом, но все равно такое ощущение, что иногда меняет SL сразу при открытии сделки. 
 
AlGuru:

Спасибо, применил примерным образом, но все равно такое ощущение, что иногда меняет SL сразу при открытии сделки. 
Тогда вам нужно распринтовывать значения SL, и внутри трала тоже вписать Print() чтобы он отписывался о своей работе и о тех значениях, которые в него попадают - иначе ощущение - лишь ощущение ;)
 
Возник вопрос ребята! Есть ли ограничение в количестве цифр в номере магика? Сколько должно быть цифр?
 
Rustam Bikbulatov:
Возник вопрос ребята! Есть ли ограничение в количестве цифр в номере магика? Сколько должно быть цифр?


Магик обычно определяется  целым типом int.

int

Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.

Как то так.

 
Alekseu Fedotov:


Магик обычно определяется  целым типом int.

int

Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.

Как то так.


Спасибо большое!
 

Всем привет! Написал советник, не могу разобраться с кодом. Мне нужно чтобы функция запускалась и с каждым тиком и с каждой секундой сервера. Я просто вызвал свою функцию 2 раза, через OnTick а потом черезв OnTimer вроде всё правильно сделал, но она всё равно частенько пропускает секунды и из-за этого иногда не срабатывает в нужный момент. Помогите, кто шарит, буду очень благодарен) Возможно она из-за обрыва связи с сервером перестаёт работать? Можно ли сделать, чтобы запускалась каждую секунду, даже если обрыв связи, и при этом секунды были строго синхронизированы с временем сервера?


int OnInit()

  {

   EventSetTimer(1);

   return(INIT_SUCCEEDED);

  }

void OnTick()

{

Clicker (); //-- старт каждый тик

}

void OnTimer()

{

Clicker (); //-- старт каждую секунду

}

void Clicker()

  {

//--- тут идёт порядка 30 строк кода, вырезал чтобы никого не грузить

   Comment("Sek = " + (Seconds()));

   return;                                      // Выход из start()  

  }

 
Друзья, помогите советом начинающему программисту на MQL4.
Написал код, который должен определять максимальную цену Open база за последние n баров, но советник почему-то считает  максимальную цену Open всех баров на графике. 

void OnTick()
{
   for (int i = 1; i <= BarTotal; i++)
   {
      double High_Open = iOpen(Symbol(), PERIOD_H1, i); 
      if (High_Open >= Current_High)
      {
         Current_High = High_Open;
         Print (Current_High); 
      }
   }
}

Спасибо)

 
ivan-baaton:
Друзья, помогите советом начинающему программисту на MQL4.
Написал код, который должен определять максимальную цену Open база за последние n баров, но советник почему-то считает  максимальную цену Open всех баров на графике. 

...

Спасибо)

Попробуйте такую функцию:

//+------------------------------------------------------------------+
double GetMaxOpen(const string symbol_name,const ENUM_TIMEFRAMES timeframe,uint start_pos,const uint count){
   double array[];
   ResetLastError();
   if(CopyOpen(symbol_name,timeframe,start_pos,count,array)==count) return(array[ArrayMaximum(array)]);
   Print(__FUNCTION__," > Ошибка копирования в массив: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

Вот прям не глядя - практически "на коленке" написал, так что мог чего упустить.

 

Понял свою ошибку, но не понял как решить. Задача нормально запускается каждую секунду, но у меня не правильно считается время с начала текущей свечи.

функция Seconds() -выдаёт секунды по данным последнего известного тика, а мне надо как-то посчитать реальное количество секунд с момента открытия минутной свечи на момент вызова функции, даже если последние пару секунд тиков вообще не было.

 TimeSeconds (TimeLocal())  или (TimeLocal() - Time[0]) -  тоже не подойдёт, т.к. локальное время компа может отличаться на несколько секунд от сервера. Как решить задачу?

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