Советник не выставляет множество ордеров

 

Написал советника, который должен выставлять множество ордеров по разным валютам. Кинул на график AUDUSD, советник открыл один ордер по этой валюте и больше ни одного не открыл, по другим валютам. Это демо-счет в Альпари. Билд МТ 220. Что интересно, функция Print() в лог ничего не пишет. 

Подскажите, что я неправильно сделал?

Вот код советника (код целиком не вставляется, говорит текс больше допустимого размера):

#property copyright ""
#property link      ""
#define MAGIC 030309
extern string Buy = "----- Buy ордера -----";
extern string Buy_pair_1 = "USDCHF";
extern string Buy_pair_2 = "USDCAD";
extern string Sell = "----- Sell ордера -----";
extern string Sell_pair_1 = "AUDUSD";
extern string Sell_pair_2 = "NZDJPY";
extern string Sell_pair_3 = "CHFJPY";
extern string Sell_pair_4 = "USDJPY";
extern string Sell_pair_5 = "GBPYPY";
extern string Sell_pair_6 = "EURJPY";
extern string Sell_pair_7 = "AUDJPY";
extern string Sell_pair_8 = "GBPUSD";
extern string Sell_pair_9 = "EURUSD";
extern string Sell_pair_10 = "GBPCHF";
extern string Sell_pair_11 = "NZDUSD";
extern string Sell_pair_12 = "CADJPY";
extern double Lot         = 0.1;
extern int Slippage       = 2;
int _Ticket, i, _GetLastError;
int start()
{
  int Sell_1=0;
  int Sell_2=0;
  int Sell_3=0;
  int Sell_4=0;
  int Sell_5=0;
  int Sell_6=0;
  int Sell_7=0;
  int Sell_8=0;
  int Sell_9=0;
  int Sell_10=0;
  int Sell_11=0;
  int Sell_12=0;
  int Buy_1=0;
  int Buy_2=0;
  if(OrdersTotal()>0) 
  {
    for(i=OrdersTotal()-1;i>=0;i--)
    {                              
      OrderSelect(i,SELECT_BY_POS); 
      if(OrderMagicNumber()!=MAGIC) continue;
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_1) {Sell_1++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_2) {Sell_2++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_3) {Sell_3++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_4) {Sell_4++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_5) {Sell_5++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_6) {Sell_6++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_7) {Sell_7++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_8) {Sell_8++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_9) {Sell_9++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_10) {Sell_10++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_11) {Sell_11++; continue;}
      if(OrderType()==OP_SELL && OrderSymbol()==Sell_pair_12) {Sell_12++; continue;}
      if(OrderType()==OP_BUY && OrderSymbol()==Buy_pair_1) {Buy_1++; continue;}
      if(OrderType()==OP_BUY && OrderSymbol()==Buy_pair_2) {Buy_2++; continue;}
      continue;
    }  
  }   
    if(Buy_1==0) 
    {
      _Ticket=OrderSend(Buy_pair_1,OP_BUY,Lot,Ask,Slippage,0.0,0.0,"Open_multi_v1",MAGIC,0,Blue);
      if(_Ticket>0) {Print("BUY ордер выставлен:",_Ticket," По валюте:",Buy_pair_1);} 
      else {_GetLastError=GetLastError(); Print("Ошибка выставления BUY ордера:",_GetLastError," По валюте:",Buy_pair_1);}
    }
    if(Buy_2==0) 
    {
      _Ticket=OrderSend(Buy_pair_2,OP_BUY,Lot,Ask,Slippage,0.0,0.0,"Open_multi_v1",MAGIC,0,Blue);
      if(_Ticket>0) {Print("BUY ордер выставлен:",_Ticket," По валюте:",Buy_pair_2);} 
      else {_GetLastError=GetLastError(); Print("Ошибка выставления BUY ордера:",_GetLastError," По валюте:",Buy_pair_2);}
      //Sleep(500);
    }
    if(Sell_1==0)
    {
      _Ticket=OrderSend(Sell_pair_1,OP_SELL,Lot,Bid,Slippage,0.0,0.0,"Open_multi_v1",MAGIC,0,Red);
      if(_Ticket>0) {Print("SELL ордер выставлен:",_Ticket," По валюте:",Sell_pair_1);} 
      else {_GetLastError=GetLastError(); Print("Ошибка выставления SELL ордера:",_GetLastError," По валюте:",Sell_pair_1);}
    }
    if(Sell_2==0)
    {
      _Ticket=OrderSend(Sell_pair_2,OP_SELL,Lot,Bid,Slippage,0.0,0.0,"Open_multi_v1",MAGIC,0,Red);
      if(_Ticket>0) {Print("SELL ордер выставлен:",_Ticket," По валюте:",Sell_pair_2);} 
      else {_GetLastError=GetLastError(); Print("Ошибка выставления SELL ордера:",_GetLastError," По валюте:",Sell_pair_2);}
    }

  return(0);
}
//+------------------------------------------------------------------+

Вот что в логе:

13:30:38 '1456798': login
13:31:22 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully
13:31:34 '1456798': instant order sell 0.10 AUDUSD at 0.64106 sl: 0.00000 tp: 0.00000
13:31:34 '1456798': request was accepted by server
13:31:34 '1456798': requote 0.64085 / 0.64115 for open sell 0.10 AUDUSD at 0.64106 sl: 0.00000 tp: 0.00000
13:31:40 '1456798': instant order sell 0.10 AUDUSD at 0.64095 sl: 0.00000 tp: 0.00000
13:31:40 '1456798': request was accepted by server
13:31:40 '1456798': request in process
13:31:40 '1456798': order was opened : #39719819 sell 0.10 AUDUSD at 0.64095 sl: 0.00000 tp: 0.00000
13:40:54 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully
13:42:01 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully
13:46:00 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully
13:47:12 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully
13:49:54 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully
13:51:21 Expert Open_Sell_multi_v1 AUDUSD,H1: loaded successfully

Файлы:
 

Как то делал эксперт мультивалютный. Работает как часики. До сих пор.

Мож пригодится код? Вот так открывался :

static int prevtime=0;// в глобальные

if(Time[0]==prevtime) return(0);//ждём появления нового бара
 prevtime = Time[0]; //если появился новый бар -  
 
//------------- .. ...
if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0 && 
 AccountFreeMarginCheck(Symbol(),OP_SELL,Lots)>0 && IsTradeAllowed()==true ) 
 {//если размер депозита позволяет нам открыть позицию  и торговый поток свободен 
 
//===================ПОКУПКА=================================================== 

  if (  условие покупки      ) {
//ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ

if (NumberOfPositions("AUDJPY", OP_BUY, Magic)==0 && AUDJPY) ticket=OrderSend("AUDJPY",OP_BUY, Lots, MarketInfo("AUDJPY",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY AUDJPY #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }             

if (NumberOfPositions("AUDCAD", OP_BUY, Magic)==0 && AUDCAD) ticket=OrderSend("AUDCAD",OP_BUY, Lots, MarketInfo("AUDCAD",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY AUDCAD #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }

if (NumberOfPositions("AUDUSD", OP_BUY, Magic)==0 && AUDUSD) ticket=OrderSend("AUDUSD",OP_BUY, Lots, MarketInfo("AUDUSD",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY AUDUSD #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }

if (NumberOfPositions("CADJPY", OP_BUY, Magic)==0 && CADJPY) ticket=OrderSend("CADJPY",OP_BUY, Lots, MarketInfo("CADJPY",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY CADJPY #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }
if (NumberOfPositions("NZDJPY", OP_BUY, Magic)==0 && NZDJPY) ticket=OrderSend("NZDJPY",OP_BUY, Lots, MarketInfo("NZDJPY",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY NZDJPY #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }

if (NumberOfPositions("GBPUSD", OP_BUY, Magic)==0 && GBPUSD) ticket=OrderSend("GBPUSD",OP_BUY, Lots, MarketInfo("GBPUSD",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY GBPUSD #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }
if (NumberOfPositions("EURUSD", OP_BUY, Magic)==0 && EURUSD) ticket=OrderSend("EURUSD",OP_BUY, Lots, MarketInfo("EURUSD",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY EURUSD #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }
if (NumberOfPositions("NZDUSD", OP_BUY, Magic)==0 && NZDUSD) ticket=OrderSend("NZDUSD",OP_BUY, Lots, MarketInfo("NZDUSD",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY NZDUSD #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }

if (NumberOfPositions("EURCHF", OP_BUY, Magic)==0 && EURCHF) ticket=OrderSend("EURCHF",OP_BUY, Lots, MarketInfo("EURCHF",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY EURCHF #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }
if (NumberOfPositions("GBPCHF", OP_BUY, Magic)==0 && GBPCHF) ticket=OrderSend("GBPCHF",OP_BUY, Lots, MarketInfo("GBPCHF",MODE_ASK), 3, 0, 0, "EXPERT", Magic, 0, Violet);
if(ticket < 0) {Print("Ошибка открытия ордера BUY GBPCHF #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0);   }

       
 }//if (УСЛОВИЯ ПОКУПКИ) ...
 

Использовал при задании условия функцию И.Кима - 

(вставляется вне ф-и СТАРТ)

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/                  |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++)                                    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()==sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op)                   {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}
  return(kp);
}
 
rid >>:

Использовал при задании условия функцию И.Кима - 

(вставляется вне ф-и СТАРТ)


Спасибо, а целиком советник можешь прикрепить?

Хорошо бы мне еще и в своих ошибках разобраться.

 

О, нашел свою ошибку, надо было цены Ask Bid запрашивать с тех валют ))).

Всем спасибо.

 
Alfa писал(а) >>

О, нашел свою ошибку, надо было цены Ask Bid запрашивать с тех валют ))).

Всем спасибо.

Алексей. Подобный советник у меня лежит на форуме. vinin.ucoz.ru. Только в нем несколько ошибок есть. Не исправил. Советник на основе Т101 и корреляционном анализе (он как раз и не доработан)

 
Vinin >>:

Алексей. Подобный советник у меня лежит на форуме. vinin.ucoz.ru. Только в нем несколько ошибок есть. Не исправил. Советник на основе Т101 и корреляционном анализе (он как раз и не доработан)

Спасибо, посмотрю.

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