ошибка в коде: не распознает наличие ордера

Образцы, куски исходников, вопросы. Обсуждаем программирование.
Ответить
Сообщение
Автор
Delphinia
Сообщения: 4
Зарегистрирован: Пт ноя 23, 2012 7:00 am
Контактная информация:

ошибка в коде: не распознает наличие ордера

#1 Сообщение Delphinia » Вт дек 18, 2012 6:37 am

объясните, пожалуйста в чем проблема, стратегия выставляет отложки как надо, но по условиям она должна удалять несработавшие и выставлять только 1 ордер, она же не удаляет несработавшие, но вышедшие за рамки условий: не выполняет
if (Close(0) > sl) then DeleteOrder(OrderHandle);
выполняет только
(OpenTime <> Time(0))
и то выставляет иногда 2 абсолютно одинаковых ордера.

привожу код для закрытия/удаления позиции и ее открытия (в обе стороны код аналогичный)

Код: Выделить всё

 // if SELL order exists
 // then close order

  if (OrderHandle <> -1) and (OrderStyle = tp_Sell) then
begin
  if OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) = true then
   if GetOrderInfo(OrderHandle, info) then
       sl := OrderStopLoss;
       if (Close(0) > sl) then
       DeleteOrder(OrderHandle);
       if OrderClosed(OrderHandle) = true then
       OrderHandle := -1;
end;                  

 // if there is no order
// then open SELL order

begin
    SetCurrencyAndTimeframe(Symbol, TimeFrame2);

    if  (Close(0) < sma22) and (Close(0) < sma11)  then
begin
   SetCurrencyAndTimeframe(Symbol, TimeFrame1);
   if (OrderHandle = -1)  and (OpenTime <> Time(0)) 
   and (sma2 < sma3) and (sma2 > Close(0))
   and (Close(0) > (sma1 + sma2)/2) then
begin
   SendPendingOrder(Symbol, op_SellStop, LotSize, sl,
   tp_s , ep, '', 0, OrderHandle);
   if SendPendingOrder(Symbol, op_SellStop, LotSize, sl,
   tp_s , ep, '', 0, OrderHandle)= true
then
begin
   if OrderSelect(0, SELECT_BY_POS, MODE_TRADES) then
     OrderStyle := tp_Sell;
     OpenTime := Time(0); 
end;
end;
end;
end;    

Delphinia
Сообщения: 4
Зарегистрирован: Пт ноя 23, 2012 7:00 am
Контактная информация:

#2 Сообщение Delphinia » Ср дек 19, 2012 9:59 am

проблема решена
благодаря этой теме http://www.forextester.com/forum/viewtopic.php?t=3174

Код: Выделить всё

// if SELL PendingOrder exists
  // then delete order

     if (OrderHandle <> -1)  then
begin
     if OrderSelect(OrderHandle, SELECT_BY_TICKET, MODE_TRADES) then
     if (OrderType in [tp_SellStop]) then
begin
     if (Close(0) > sma3) then
begin
     DeleteOrder(OrderHandle);
end;
end;
end;
      if OrderClosed(OrderHandle) then
begin
      OrderHandle := -1;
end;
                                      
/ if there is no order
  // then open SELL order


      SetCurrencyAndTimeframe(Symbol, TimeFrame2);

      if  (Close(0) < sma22) and (Close(0) < sma11) then
begin
      SetCurrencyAndTimeframe(Symbol, TimeFrame1);
      if (OrderHandle = -1) then
begin
      if (sma2 < sma3) and (sma2 > Close(0))and (Close(0) > (sma1 + sma2)/2)
      then
begin
      SendPendingOrder(Symbol, op_SellStop, LotSize, sl,
      tp_s , ep, '', 0, OrderHandle);
end;
end;
end;                       
P.S. support, пожалуйста, заглядывайте не только на http://www.forextester.com/forum :oops:

Ответить