[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 485

 
FOReignEXchange:


Не понял? Я просто смотрю в справке, там OrderSelect() использует условие. А без true я не видел нигде.

if это же оператор условия. И в скобках должно быть условие. Так логичнее мне кажется. Хоть и разницы может и нету.


спецификация:

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

возвращает true или false

читаем в справке https://docs.mql4.com/ru/basis/operators/if

Если выражение истинно, то выполняется оператор1 и управление передается на оператор, следующий за оператором2 (т. е. оператор2 не выполняется). Если выражение ложно, то выполняется оператор2.

if (выражение)
     оператор1
else
     оператор2

Часть else оператора if может опускаться. Поэтому во вложенных операторах if с пропущенной частью else может возникнуть неоднозначность. В этом случае else связывается с ближайшим предыдущим оператором if в том же блоке, не имеющим части else.

то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

 

Да я не про это.

Я просто когда вибираю ордер всегда пишу полностью

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)==true)

Ни разу не видел, чтобы без true было.

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

Я понял

 
FOReignEXchange:

Ни разу не видел, чтобы без true было.


не у тех людей коды смотрите.
 
FOReignEXchange:

Да я не про это.

Я просто когда вибираю ордер всегда пишу полностью

Ни разу не видел, чтобы без true было.

Я понял


две совершенно равносильные записи - одна запись ничем не хуже и не лучше другой - каждый делает как ему удобно, как ему понятней, как он привык
 
sergeev:

не у тех людей коды смотрите.


кстати, надо отдать должное FOReignEXchange.

открыл штатный "Moving Average.mq4" и увидел:

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


Сделайте вывод через Print() значения переменной global_trailing_SP непосредственно в представленной вами функции.

Где вы читаете значение этой переменной?


Вот это да! )) Если я вывожу через Print() значение переменной global_trailing_SP из представленной функции, то в журнале я вижу совершенно неожиданное для меня значение (выделено жёлтым). Хотя до этого вне этой функции оно выводится правильно (напротив красной точки).

global_trailing_SP глобальная переменная. Объявлена вне функции Start(),

double global_trailing_SP = 0.0; 

После того, как функция трейлинг стопа успешно меняет значение основной позиции, в отдельном цикле переменной global_trailing_SP присваивается значение стоп лосса основной позиции.

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
Именно это значение отмечено красной точкой выше.

Затем это значение передаётся в функцию, где происходят различные модификации ордеров. Но в результате в журнал выводится непредсказуемое для меня значение, а значение стоп -лосса естественно не модифицировано. Как можно решить эту задачу? Оказывается не всё всегда логично, как кажется на первый взгляд.)))

 

А вот здесь так не лучше ли сделать где SELLSTOP?

if((global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) 
{  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
else   Print("Условие не выполняется!");

Чтобы было всё абсолютно одинакого как и в SELL.

 
FOReignEXchange:

А вот здесь так не лучше ли сделать, где SELLSTOP?

Чтобы было всё абсолютно одинакого как и в SELL.


В данном случае проблема видимо не в этом. Подробнее выше.
 
tol64:


Вот это да! )) Если я вывожу через Print() значение переменной global_trailing_SP из представленной функции, то в журнале я вижу совершенно неожиданное для меня значение (выделено жёлтым). Хотя до этого вне этой функции оно выводится правильно (напротив красной точки).

global_trailing_SP глобальная переменная. Объявлена вне функции Start(),

После того, как функция трейлинг стопа успешно меняет значение основной позиции, в отдельном цикле переменной global_trailing_SP присваивается значение стоп лосса основной позиции.

Именно это значение отмечено красной точкой выше.

Затем это значение передаётся в функцию, где происходят различные модификации ордеров. Но в результате в журнал выводится непредсказуемое для меня значение, а значение стоп -лосса естественно не модифицировано. Как можно решить эту задачу? Оказывается не всё всегда логично, как кажется на первый взгляд.)))


покажите как вы считываете глобальнукю переменную global_trailing_SP
 

Так я чёта не понял. Отложенный ордер на момент модификации основного ордера существует?

Если существует, то модификация основного ордера и модификация отложенного проходит в одном блоке. И если основной ордер модифицировался, то и отложенный тоже должен, если Вы так задумали.

Другуе дело,что задуманое не получается. Значит ошибка в условии. Попробуйте сделать всё также как и в условии для модификации основного ордера, как я показал выше. Мне кажется ошибка в логике. Не удивительно. Что-то у Вас всё сложно. Проще надо делать.

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