не закрываются ордеры в эксперте - страница 3

 
po_saa:
а вообще я так и не пойму, ПОЧЕМУ НЕ ЗАРЫВАЕТСЯ ОРДЕР?!!

К большому сожалению нет отладчика. Чтобы ТОЧНО знать почему не закрывается ордер, выведите значения всех переменных, от которых зависит событие, через ф-цию Print в журнал. И потом сравните значения этих переменных. Скорее всего что-то где-то не так.
 
Talex:
po_saa:

а вообще я так и не пойму, ПОЧЕМУ НЕ ЗАРЫВАЕТСЯ ОРДЕР?!!


К большому сожалению нет отладчика. Чтобы ТОЧНО знать почему
не закрывается ордер, выведите значения всех переменных, от
которых зависит событие, через ф-цию Print в журнал. И потом сравните
значения этих переменных. Скорее всего что-то где-то не так.

в том и дело, что ТАК... и к тому же не только у меня - ранее кто-то запускал эту тему, но ответа так и не получил...
а состояние я пигу в файл с именем инструмента и довольно подробно
так вот ТАМ записано (я LOG отсылал) что ОРДЕР закрыт(!!!), а сам тестер (на графике) продолжает считать его открытым!
 

Из эксперта:

extern double iClvlBUY              =-100;      //зона покупки CCI
extern double iClvlSELL             =100;        //зона продажи CCI
if(iCTek>iClvlBUY && iCPrev<=iClvlBUY)
  {
   //сигнал к покупке от CCI
      bCSignalBUY=true;
  }

Выше видим, что сигнал к покупке когда линия индикатора пересекает горизонтальный уровень -100 снизу вверх.

if(iCTek<=iClvlBUY && iCPrev>iClvlBUY)
  {
      //сигнал к закрытию открытой позиции на покупку
      bCSignalBUYClose=true;
      bCSignalBUY=false;
      FileWrite(fhandle,"Сигнал ЗАКРЫТЬ ПОКУПКУ");
               DrawArrow(SYMBOL_ARROWDOWN);
  }

Сигнал к закрытию позиции на покупку пересечение той же линии сверху вниз.

Логика ДЕЙСТВИТЕЛЬНО такая?

 
Да.

//сигнал к закрытию открытой позиции на покупку - когда имея сигнал на ПОКУПКУ, линия возвращается к уровню покупки "-100"
if(iCTek<=iClvlBUY && iCPrev>iClvlBUY)

//сигнал к закрытию открытой позиции на продажу - когда имея сигнал на ПРОДАЖУ, линия возвращается к уровню продажи "100"
if(iCTek>=iClvlSELL && iCPrev<iClvlSELL)
 

ох как я уже замучался вставлят тот же код .. опять приведу его в пример ведь на нем основано много элементарных функций.

//+------------------------------------------------------------------+
//| Работа функций эксперта                                          |
//+------------------------------------------------------------------+
int start()
  {
//+------------------------------------------------------------------+
SignalBuyClose  = False; // при каждом тике они будут устанавливатся в это состояние
SignalBuyOpen   = False; 
SignalSellClose = False; 
SignalSellOpen  = False; 

if(тут мы сравниваем что либо чтобы оно было ложь или правда)
{
// переводим флаги в то состояние которое нам нада к примеру закрывать ордера если выполненно условиевыше
SignalBuyClose=true;
}

// Обьявляем переменные и присваиваем им значения
    total=OrdersTotal();                  // Присваиваем total число открытых ордеров
//+------------------------------------------------------------------+
//| Закрытие ордеров                                                 |
//+------------------------------------------------------------------+
// Проверяем есть ли ордер?
    if (total>0)
// Если есть ордера.
    {
// Выполнение цикла, если есть один или более открытых ордеров и перебираем их.
      for(i=total; i>=0; i--)
      {
// Проверяем среди открытых ордеров кроме отложенных, закрытых или удаленных
        if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
// Проверяем это орбер BUY
          if (OrderType()==OP_BUY && SignalBuyClose) // можно тут вписать свое сравнение :)
          {
// Закрываем ордер BUY
            OrderClose(OrderTicket(),OrderLots(),Bid,0,White);
            continue;
          }   
// Проверяем это орбер SELL
          if (OrderType()==OP_SELL && SignalSellClose) // можно тут вписать свое сравнение :)
          {
// Закрываем ордер SELL
            OrderClose(OrderTicket(),OrderLots(),Ask,0,White);
            continue;
          } 
        }
      }
    }
//+------------------------------------------------------------------+
//| Открытие ордеров                                                 |
//+------------------------------------------------------------------+
    else
// Если нет ордера.
    {
//+------------------------------------------------------------------+
// Проверяем образован ли сигнал на покупку Buy
      if (SignalBuyOpen)
      {
// Открываем ордер Buy
        ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-TrailingStop*Point,Ask+TakeProfit*Point,WindowExpertName(),order_id,0,Blue);
// Проверяем принять ли ордер
        if(ticket>0)
        {
// Ордер принят, печатаем его в журнале
          if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
// Ордер отклонен, печатаем причину в журнале
        }
        else Print("Error opening SELL order : ",GetLastError());
// Все удачно открыто ждем некоторое время и выходим
        return(0);
      }
//+------------------------------------------------------------------+
// Проверяем образован ли сигнал на покупку Buy
      if (SignalSellOpen)
      {
        ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+TrailingStop*Point,Ask-TakeProfit*Point,WindowExpertName(),order_id,0,Red);
// Проверяем принять ли ордер
        if(ticket>0)
        {
// Ордер принят, печатаем его в журнале
          if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
// Ордер отклонен, печатаем причину в журнале
        }
        else Print("Error opening SELL order : ",GetLastError());
// Все удачно открыто ждем некоторое время и выходим
        return(0);
      }
//+------------------------------------------------------------------+
    }
  }
return(0);
//+------------------------------------------------------------------+

как видно из данного примера.. т просто вставь в самом начале свое проверку.. типа если твой сигнал поступил и равен 100 и более то это истина и формируй сигнал на закрытие или открытие. после произойдет сперва закрытие так как оно быстрей всего проходит и тока если нет закрытия то он будет открывать. если есть сигнал на открытие.

 

To Nadejnie

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

Я не понимаю, зачем ты вытащил из нафталина старую тему?

 
Roger писал (а) >>

To Nadejnie

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

Я не понимаю, зачем ты вытащил из нафталина старую тему?

Де ты видел безграмотный код ?? ты про себя имел в виду наверное.. что за пол года даже незапомнил функцию "if" ну так я рад за тебя. ))) нафталиный ты наш )))

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