Работа советника с разными парами - страница 2

 
Artemij:

...а если "ордер перед этим выбран", но ЕЩЁ НЕ ЗАКРЫТ, то OrderClosePrice() = это что?.......


бид или аск, который вы ищите)

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

 
Taras Slobodyanik:

Воля Ваша, но я сомневаюсь в такой конструкции:

OrderClose(...,OrderClosePrice()

Получается, что мы даём команду "закрыть ордер по цене закрытия". Масло масленое.

Но в любом случае - речь не об этом, а о работе советника с позициями, открытыми одновременно на разных парах. Чтобы получать значения СООТВЕТСТВУЮЩИХ индексов для СООТВЕТСТВУЮЩИХ позиций.

 
ну ок)
 
Artemij:

Воля Ваша, но я сомневаюсь в такой конструкции:

Получается, что мы даём команду "закрыть ордер по цене закрытия". Масло масленое.

Но в любом случае - речь не об этом, а о работе советника с позициями, открытыми одновременно на разных парах. Чтобы получать значения СООТВЕТСТВУЮЩИХ индексов для СООТВЕТСТВУЮЩИХ позиций.

Пустые сомнения, Если ордер Buy открывается по цене Ask, то закрывается по цене Bid, в этом ни у кого сомнений нет. Так вот для ордера Buy в OrderClosePrice() хранится текущая цена Bid

Из документации

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Работа советника с разными парами

Taras Slobodyanik, 2017.10.07 12:48


бид или аск, который вы ищите)

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


OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
 

И всё же.

Бог с ним, с "Закрытием по цене закрытия для того, чтобы закрыть закрытое"

Тема этой ветки другая. Повторюсь:

Если, как пишет Andrei Fandeev, Bid берётся от другого инструмента, то ордер попросту НЕ ЗАКРОЕТСЯ и выдаст ошибку. Но беда в том, что он - зараза! - именно закрывается по "местному" Bid'у, но...............вот тут я и не понимаю: то ли по каким-то "чужим", из других пар, ТЕКУЩИМ условиям, то ли отказывается перед расчётом индекса обнулять его значение, полученное ранее:

 CCI = 0;

     CCI = iCCI(Pair,PERIOD_H1,24,PRICE_TYPICAL,0);

И в результате мы имеем неправильный CLOSE, который никак не отвечает заложенной в код логике.

А то и хуже того: иногда имеем, иногда - нет. О как!

А Print() после CLOSE выдаёт иной раз вообще бред, типа CCI=56743876501,540056

И, помятуя вышесказанное, КАЖДЫЙ РАЗ ВЫБИРАЕТСЯ ОРДЕР СНОВА.

 
Artemij:

И всё же.

Бог с ним, с "Закрытием по цене закрытия для того, чтобы закрыть закрытое"

Тема этой ветки другая. Повторюсь:

Если, как пишет Andrei Fandeev, Bid берётся от другого инструмента, то ордер попросту НЕ ЗАКРОЕТСЯ и выдаст ошибку. Но беда в том, что он - зараза! - именно закрывается по "местному" Bid'у, но...............вот тут я и не понимаю: то ли по каким-то "чужим", из других пар, ТЕКУЩИМ условиям, то ли отказывается перед расчётом индекса обнулять его значение, полученное ранее:

 CCI = 0;

     CCI = iCCI(Pair,PERIOD_H1,24,PRICE_TYPICAL,0);

И в результате мы имеем неправильный CLOSE, который никак не отвечает заложенной в код логике.

А то и хуже того: иногда имеем, иногда - нет. О как!

А Print() после CLOSE выдаёт иной раз вообще бред, типа CCI=56743876501,540056

И, помятуя вышесказанное, КАЖДЫЙ РАЗ ВЫБИРАЕТСЯ ОРДЕР СНОВА.

И ещё один совет был проигнорирован

Что касается закрытия по несоответствующей цене, так это издержки mql4. Не подходит указанная цена... и флаг ей взад... закроем по правильной.
 

Вот только что.

На двух парах (двух открытых позициях) висели два советника. У обоих в самом начале   if(OrderSymbol() == . Даже ДО пересчёта индикаторов. (В которых, кстати, тоже прописано конкретно:  CCI = iCCI("AUDJPY",PERIOD_H1,24,PRICE_TYPICAL,0); 

Так пришёл сигнал на закрытие с одного советника(пары) - закрылась ДРУГАЯ ПОЗИЦИЯ!

И я не игнорирую советы! Ну, вот куда ещё его (Проверка OrderSymbol() спасёт.) вставить (извините.......), чтобы всё заработало уже????

 
Alexey Viktorov:

И ещё один совет был проигнорирован


Что касается закрытия по несоответствующей цене, так это издержки mql4. Не подходит указанная цена... и флаг ей взад... закроем по правильной.

Вот только что.

На двух парах (двух открытых позициях) висели два советника. У обоих в самом начале   if(OrderSymbol() == . Даже ДО пересчёта индикаторов. (В которых, кстати, тоже прописано конкретно:  CCI = iCCI("AUDJPY",PERIOD_H1,24,PRICE_TYPICAL,0); 

Так пришёл сигнал на закрытие с одного советника(пары) - закрылась ДРУГАЯ ПОЗИЦИЯ!

И я не игнорирую советы! Ну, вот куда ещё его (Проверка OrderSymbol() спасёт.) вставить (извините.......), чтобы всё заработало уже????

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Viktorov:

И ещё один совет был проигнорирован


Что касается закрытия по несоответствующей цене, так это издержки mql4. Не подходит указанная цена... и флаг ей взад... закроем по правильной.

Кроме того.

OrderTicket() - Уникальный порядковый номер ордера.

Так какого х..............а индюки проверяются для ОДНОГО "Уникального порядкового номера ордера", а закрывается другой "Уникальный порядковый номер ордера". ????????????????????????????????????????????????????????

 
Artemij:

Вот только что.

На двух парах (двух открытых позициях) висели два советника. У обоих в самом начале   if(OrderSymbol() == . Даже ДО пересчёта индикаторов. (В которых, кстати, тоже прописано конкретно:  CCI = iCCI("AUDJPY",PERIOD_H1,24,PRICE_TYPICAL,0); 

Так пришёл сигнал на закрытие с одного советника(пары) - закрылась ДРУГАЯ ПОЗИЦИЯ!

И я не игнорирую советы! Ну, вот куда ещё его (Проверка OrderSymbol() спасёт.) вставить (извините.......), чтобы всё заработало уже????

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

iCCI("AUDJPY",PERIOD_H1,24,PRICE_TYPICAL,01); 
У вас был сигнал, вот и произошло закрытие, потом индикатор перерисовался, и сигнал пропал, поэтому сделан такой вывод. 
Причина обращения: