Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь разобраться в коде? Статьи помогут!
evgen117
64
evgen117 2014.06.22 10:57  
ааа, я так понимаю, у меня в старом коде каждую минуту закрывался/открывался новый ордер по этой же причине?
Paladin80
703
Paladin80 2014.06.22 13:35  
Evgen117:
ааа, я так понимаю, у меня в старом коде каждую минуту закрывался/открывался новый ордер по этой же причине?
Каждый тик открывался ордер.
evgen117
64
evgen117 2014.06.22 13:39  
Вот уже следующий блок (открытие ордеров), посмотрите, пожалуйста, может будут замечания/пожелания? 
while(true)
  {
   if(OrdersTotal()==0 && OP_B==true)
     {
      RefreshRates();                        // Обновление данных
      SL=Bid-Something*Point;     // Вычисление SL откр.
      TP=Bid+Something*Point;   // Вычисление TP откр.
      Alert("Попытка открыть Buy. Ожидание ответа..");
      Ticket=OrderSend(_Symbol,OP_BUY,Lots,MarketInfo(Symbol(),MODE_ASK),2,SL,TP);//Открытие Buy
      if(Ticket>0) // Открыли
        {
         Alert("Открыт ордер Buy ",Ticket);
         return(-1);
        }
      if(Fun_Error(GetLastError())==1) // Обработка ошибок
         continue;                           // Повторная попытка
      return(-1);
     }
   if(OrdersTotal()==0 && OP_S==true) // Открытых орд. нет +
     {                                       // критерий откр. Sell
      RefreshRates();                        // Обновление данных
      SL=Ask+Something*Point;     // Вычисление SL откр.
      TP=Ask - Something*Point;   // Вычисление TP откр.
      Alert("Попытка открыть Sell. Ожидание ответа..");
      Ticket=OrderSend(_Symbol,OP_SELL,Lots,MarketInfo(Symbol(),MODE_BID),2,SL,TP);//Открытие Sel
      if(Ticket>0) // Открыли
        {
         Alert("Открыт ордер Sell ",Ticket);
         return(-1);
        }
      if(Fun_Error(GetLastError())==1) // Обработка ошибок
         continue;                           // Повторная попытка
      return(-1);                                
     }
   break;                                    // Выход из while
  }
evgen117
64
evgen117 2014.06.22 13:43  
И такой вопрос, Ваша последняя запись не обьясняет, почему в старом коде советник по сто раз заходил не на уровне 70, а посередке (где-то 50 "на глаз"). Или это по той причине, что я указал условие входа, но не указал при какой цене нужно заходить?
Paladin80
703
Paladin80 2014.06.22 14:02  
//--- Проверяем, есть ли открытая позиция по данному символу
bool IsBuyExists=false;
bool IsSellExists=false;

if(OrdersTotal()>0)
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //--- фильтрация позиции по текущему символу
         if(OrderSymbol()!=_Symbol) continue;
         //--- есть ли позиция на покупку
         if(OrderType()==OP_BUY)
            IsBuyExists==true;
         //--- есть ли позиция на продажу
         if(OrderType()==OP_SELL)
            IsSellExists==true;
        }
     }
  }
}
//--- открытие позиции на покупку
if(OP_B==true && IsBuyExists==false)
  {
   double SL=NormalizeDouble(Bid-Something*_Point,_Digits);   // Вычисление SL откр.
   double TP=NormalizeDouble(Bid+Something*_Point,_Digits);   // Вычисление TP откр.
   RefreshRates();                                            // Обновление данных
   if(OrderSend(_Symbol,OP_BUY,Lots,Ask,100,SL,TP)!=0)
     {
      Alert("Не удалось открыть позицию Buy. Ошибка = ",GetLastError());
      return;
     }
   else
     {
      Alert("Удалось открыть позицию Buy.");
      return;
     }
  }
evgen117
64
evgen117 2014.06.23 18:38  

Спасибо!!! Я не понимаю, советник не сохраняет данные по сделанной операции? а закрыть ордер другого символа он тоже может? (если не прописать того, что сделали Вы)... А если прописать при какой цене заходить (в строках рядом со стоплосом и ТР), то советник попробует зайти (если будет в наличие ) при заданой цене? А если заданная цена "будет мешать" условиям входа в сделку, то советник все равно зайдет или будет ждать, чтобы оба условия сошлись?

Выкладываю блок закрытий. Надеюсь в этот раз исправлений будет меньше))):

//--- Проверяем, есть ли открытая позиция по данному символу
bool IsBuyExists=false;
bool IsSellExists=false;
bool _iCloseSell=false;
bool _iCloseBuy=false;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
if(OrdersTotal()>0)
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //--- фильтрация позиции по текущему символу
         if(OrderSymbol()!=_Symbol) continue;
         //--- есть ли позиция на покупку
         if(OrderType()==OP_BUY)
            IsBuyExists==true;
         //--- есть ли позиция на продажу
         if(OrderType()==OP_SELL)
            IsSellExists==true;
        }
     }
  }
}
//--- закрытие позиции Бай
if(Cl_B==true && IsBuyExists==true)
  {
    RefreshRates();
    if(_CloseBuy=OrderClose(Ticket,Lot,Bid,2))
    _iCloseBuy==true;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(_iCloseBuy==false)
     {
      Alert("Не удалось закрыть позицию Buy. Ошибка = ",GetLastError());
      return;
     }
     }
  //--- закрытие позиции Сел
if(Cl_S==true && IsSellExists==true)
  {
    RefreshRates();
    if(_CloseSell=OrderClose(Ticket,Lot,Ask,2))
    _iCloseSell==true;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(_iCloseSell==false)
     {
      Alert("Не удалось закрыть позицию Sell. Ошибка = ",GetLastError());
      return;
     }
     }
//+------------------------------------------------------------------+
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий