Советник смешивает ордера на покупку и продажу - страница 2

 

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

while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}

оно никак не пройдет:

if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

если это Op_Sell. Если только вы не используете эту штуку на нескольких графиках одного и того же символа.

Видя, что вы используете спорный цикл while. Возможно, это какая-то форма Rapid Order Maker.

Мое последнее предположение. Выбранный ордер меняется после проверки Ordertype :)

Что-либо еще, я предлагаю, как и Raptor, использовать много операторов печати.

 
  1. Выбранный ордер НЕ может измениться после OrderSelect.
  2.  for(cnt = total-1; cnt >= 0; cnt--)  {
          while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}
    Если OrderSelect не сработает, он будет постоянно срабатывать, и у вас получится бесконечный цикл. Если несколько ордеров закроются на другом графике, пока вы обновляете свой, выбор ордера на следующей итерации будет неудачным. Очень опасно.
 

Я напечатал номер билета, и он не совпадает с OrderType().


Если выбранный заказ имеет тип OP_BUY, то будет обработан правильный заказ, но затем в моем вызове OrderModify(...) я передаю OrderTicket() в качестве первого параметра, но это билет другого заказа.


Есть идеи?

 
dvarrin:

Есть идеи?

Может быть, вы пытаетесь изменить ордер, который уже закрыт? Вы не указываете пул, из которого выбираете сделки. ...

OrderSelect( int index, int select, int pool=MODE_TRADES) 
MODE_TRADES (по умолчанию) - ордер выбирается из торгового пула (открытые и отложенные ордера),
.

MODE_HISTORY - ордер выбирается из пула истории (закрытые и отмененные ордера).


	          
 
RaptorUK:

Возможно, вы пытаетесь изменить уже закрытый ордер? Вы не указываете пул, из которого выбираете сделки.

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

MODE_HISTORY - ордер выбирается из пула истории (закрытые и отмененные ордера).


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


int ticket=0;

двойной SL = 0.0;

OrderSelect(cnt, ...);

ticket = OrderTicket();

SL = OrderStoploss();

if (OrderType() == OP_BUY) {


}


...


Почему так происходит? Я не понимаю, что не так в моем коде, чтобы OrderTicket() не соответствовал тому же ордеру, на который ссылается OrderType().

 
dvarrin:

Я напечатал номер билета, и он не совпадает с OrderType().


Если выбранный заказ имеет тип OP_BUY, то будет обработан правильный заказ, но затем в моем вызове OrderModify(...) я передаю OrderTicket() в качестве первого параметра, но это билет другого заказа.

Это следующий по порядку заказ, это предыдущий по порядку заказ?
 

orderType = OrderType()

измените на

int orderType = OrderType(); и удалите исходное объявление.

 
forexCoder:

orderType = OrderType()

измените на

int orderType = OrderType(); и удалите исходное объявление.


С OrderType все в порядке. Именно OrderTicket() не является билетом нужного заказа.
 

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

Программная инженерия - это решение проблем, так мы учимся и становимся лучше. С субботы я предпринимаю третью попытку кодирования конкретной проблемы, связанной с Fibs, и я почти у цели... Осторожное использование функции Print() очень помогает...

 
dvarrin:

OrderType в порядке. Это OrderTicket(), который не является билетом правильного заказа.

int OrderType = OrderType() не в порядке, одно может скрывать другое (локальные объявления скрывают глобальные без ошибок.) Попробуйте

int orderType = OrderType()