Нужна помощь, чтобы заметить небольшую ошибку. - страница 3

 

Длинные && и || условия, я разбил часть на множество цепочек операторов if. Я также попробовал использовать MarketInfo(OrderSymbol() , MODE_ASK/BID) вместо OrderClosePrice() .

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

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

Похоже, что всегда самая нижняя часть открытого ордера не хочет двигать стоп-лосс, даже если условие выполнено (длинные && и || условия и много цепочек if statement, я пробовал оба).

Настройки советника:

Счет 1 до :


Счет 1 после :

Для этого счета 1, 1-й и 2-й ордера не выполнили условие if/if + && и ||, поэтому стоп лосс не был перемещен (что правильно).

3-й ордер, однако, уже выполнил условие и должен был проследить до 10-го, но стоп-лосс был передвинут только ОДИН раз. (неправильно)

Он должен был сдвинуться больше одного раза (по моим подсчетам он должен быть 50.0 пунктов, а не 5.0 пунктов).

Счет 2 до:

Счет 2 после :

На этом счете 2 только 1-й ордер не выполнил условие, поэтому стоп-лосс не был перенесен (что правильно). 2-й и 3-й ордера выполнили условие, и вот странная часть.

2-й ордер проследил ровно до 10-го, стоп лосс был передвинут ровно 10 раз. Стоп лосс переместился на 50.0 пунктов от цены открытия этого отдельного ордера (что правильно) .

3-й ордер, однако, также соответствовал условию и должен был быть отслежен до 3-го, но опять же стоп-лосс был передвинут только ОДИН раз. (опять неправильно :( ).

Заметили ли вы, что на обоих счетах трейлинг не работает должным образом на последнем ордере?

Если USDJPY может работать, это должно быть возможно применить ко всем другим парам. Я не знаю, что с этим делать.

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

Вкладка "Эксперты" тоже не показала никаких ошибок ....

@.@ T_T

 
Вы уверены, что цена не отступила и не остановила его после 1-го следа?
 
Простите, я не совсем понимаю, что вы имеете в виду... Какую цену вы имеете в виду? Остановить его после 1-го следа?
 
Теперь я понимаю, что вы имеете в виду, я не правильно прочитал результаты торговли в первый раз.
 
SDC:
Теперь я понимаю, что вы имеете в виду, я не правильно прочитал результаты торговли в первый раз.
Я до сих пор не могу понять, что здесь не так ..... У вас есть идеи, где я ошибся?
 
      if ( ( OrderStopLoss() == 0 ) || (OrderStopLoss() != 0 && OrderStopLoss() <= OrderOpenPrice() ) || ( OrderStopLoss() < ( OrderOpenPrice() + ( TrailingStop * Figure ) ) ) )
                              {
 

Я пробовал, все то же самое .....

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

 

juniorlcq:

Отсчет вниз для цикла вызывает эту проблему?


не имеет значения, считаете ли вы вверх или вниз (трейлинг стоплосс).

удаляя или закрывая сделку, вы должны произвести обратный отсчет.

 

Я пробовал считать и вверх, та же проблема.

Это 2-й цикл уже модифицировал ордер и мне пришлось выбирать заново?

Сначала я выбрал ордер, а во втором цикле условие выполнилось, и он изменил этот ордер. Нужно ли мне снова выбирать ордер?

 

OrderSelect

Функция OrderSelect() копирует данные ордера в среду программы и все последующие вызовы OrderClosePrice(), OrderCloseTime(), OrderComment(), OrderCommission(), OrderExpiration(), OrderLots(), OrderMagicNumber(), OrderOpenPrice(), OrderOpenTime(), OrderPrint(), OrderProfit(), OrderStopLoss(), OrderSwap(), OrderSymbol(), OrderTakeProfit(), OrderTicket(), OrderType() функции возвращают данные, скопированные ранее. Это означает, что в некоторых случаях детали ордера (цена открытия, уровни SL/TP или дата истечения) могут измениться, и данные станут неактуальными. Настоятельно рекомендуется вызывать функцию OrderSelect() перед запросом данных ордера.

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