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

 
 while (Count < FindPeak)
   {
// - 2 - ======================== Поиск одного экстремума ЗЗ ============================ 
    double ZZCur = 0;
    while(ZZCur == 0 && i < Bars)
      {
       if(iCustom(Symbol(), 0, "FastZZ", Depth, 0, i)!=0.0) ZZCur =iCustom(Symbol(), 0, "FastZZ", Depth, 0, i);
       else  if(iCustom(Symbol(), 0, "FastZZ", Depth, 1, i)!=0.0) ZZCur =iCustom(Symbol(), 0, "FastZZ", Depth, 1, i);
       i++;
      }
// - 2 - ============================ Окончание блока ===================================

// - 3 - ======================== Анализ найденного экстремума ========================== 
    if (ZZCur == 0)
      return(False);           // Если ни один из экстремумов не определен, то это ошибка
 
Novaja:

вот другой вариант аналогичный Вашему ...  В заголовке цикла for указано i++ потому внизу их убрал. Убрал фигурные скобки так как в цикле лишь один оператор (if else)

 while (Count < FindPeak)
 {
    double ZZCur;
    for(i=0,ZZCur=0; ZZCur==0 && i<Bars; i++)
       if      (iCustom(NULL, 0, "FastZZ", Depth, 0, i)!=0.0) ZZCur =iCustom(Symbol(), 0, "FastZZ", Depth, 0, i);
       else  if(iCustom(NULL, 0, "FastZZ", Depth, 1, i)!=0.0) ZZCur =iCustom(Symbol(), 0, "FastZZ", Depth, 1, i);

    if (ZZCur == 0) return(False);   // Если ни один из экстремумов не определен, то это ошибка
.......
}
 
STARIJ:

вот другой вариант аналогичный Вашему ...  В заголовке цикла for указано i++ потому внизу их убрал. Убрал фигурные скобки так как в цикле лишь один оператор (if else)


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

 

Здравствуйте! Есть массив из цен открытия ордеров. Зная индекс этого ордера, как определить его тип?

if(index_elementa_masiva=OP_BUY)???
 
vikzip:

Здравствуйте! Есть массив из цен открытия ордеров. Зная индекс этого ордера, как определить его тип?

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

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

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

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

 
Artyom Trishkin:

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

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

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

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


Спасибо!

 
Подскажите пожалуйста, как записать условие которое звучит так: если типы ордеров одинаковые?
 bool TYP_A=OrderType;
 bool TYP_B=OrderType;
 if (TYP_A=TYP_B)????
double PriceBlizkoA;                          // Цена выбранного ордера
         bool TYP_A; 
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:  
        if (OrderOpenPrice=PriceBlizkoA);                                     //если цена ордера равна цене заданого   и вот здесь ошибка. Догадываюсь неверно записано условие. Подскажите, что исправить?
         TYP_A=OrderType;   
 
vikzip:
Подскажите пожалуйста, как записать условие которое звучит так: если типы ордеров одинаковые?
Почитайте что такое оператор сравнения и что такое оператор присвоения, и как они записываются.
 
vikzip:
Подскажите пожалуйста, как записать условие которое звучит так: если типы ордеров одинаковые?

Это равносильно:

bool TYP_A=OrderType;
bool TYP_B=OrderType;

bool TYP_A=0; // Buy
bool TYP_B=1; // Sell

В итоге получаем

if(TYP_A) // false
if(TYP_B) // true
Читайте то, что посоветовал Артём.
 

Всем доброго дня!

Подскажите пожалуйста команду для робота что бы на 1 свечу он не открывал больше 1-го ордера.

Даже если он забрал свой тэйк на этой свече - не открывать следующий ордер на этой же свече.

Сейчас так выходит что если условия индикаторов выполнены - открыть сделку.

После того как сделка по тэйку закрыта он на этой же свече сразу же открывает новую сделку и вот она уже не нужна мне и создает проблемы.

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

Нужно строго так 1 свеча - 1 сделка.

Заранее благодарен!