[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 570

 
Pas celui-là)) celui-là. Celui-là a plus de sens.
Dossiers :
sellbuy_2.mq4  3 kb
 
regardez le deuxième conseiller, cela vous donnera peut-être quelques idées..... a composé toute la nuit ce soir :)
 
Frostr:
regardez le deuxième conseiller, cela vous donnera peut-être quelques idées..... a composé toute la nuit ce soir :)

Je m'en occupe. Essayez-le.
//+------------------------------------------------------------------+
extern int    stoploss   = 0,          // уровень выставления SL, если 0, то SL не выставляется
              takeprofit = 0,          // уровень выставления TP, если 0, то TP не выставляется
              Magic      = 123456;     // уникальный номер ордера
extern double Lot        = 0.1;        // объем ордера
extern int    slippage   = 3;          // Максимально допустимое отклонение цены для рыночных ордеров
extern int    MaxOrders  = 3;          // Максимально допустимое количество ордеров BUY или SELL
extern int    CycleCount = 5;          // количество попыток открытия ордера
//+------------------------------------------------------------------+
double SL,TP;
int    Count,Total,LastTotal;
string ord;
//+------------------------------------------------------------------+
int start()
   {
   Total=fTotal();
   if(Total==LastTotal&&LastTotal!=0)return(0);
   int Buy,Sell;
   if(Count==0)
      {
      MathSrand(TimeLocal()); 
      if(NormalizeDouble(MathMod(MathRand(),2),0)==0)ord="Buy";else ord="Sell";
   } 
   if(ord=="Buy")OrdCount("Buy");
   if(ord=="Sell")OrdCount("Sell");
   if(Count>=MaxOrders)return(0);
   if(ord=="Buy")
      {
      if(takeprofit!=0)TP=NormalizeDouble(Ask+takeprofit*Point,Digits);else TP=0;
      if(stoploss!=0)SL=NormalizeDouble(Ask-stoploss*Point,Digits);else SL=0;
      OPENORDER("Buy");
      if(takeprofit!=0)TP=NormalizeDouble(Bid-takeprofit*Point,Digits);else TP=0;
      if(stoploss!=0)SL=NormalizeDouble(Bid+stoploss*Point,Digits);else SL=0;
      OPENORDER("Sell");
   }
   if(ord=="Sell")
      {
      if(takeprofit!=0)TP=NormalizeDouble(Bid-takeprofit*Point,Digits);else TP=0;
      if(stoploss!=0)SL=NormalizeDouble(Bid+stoploss*Point,Digits);else SL=0;
      OPENORDER("Sell");
      if(takeprofit!=0)TP=NormalizeDouble(Ask+takeprofit*Point,Digits);else TP=0;
      if(stoploss!=0)SL=NormalizeDouble(Ask-stoploss*Point,Digits);else SL=0;
      OPENORDER("Buy");
   }
   LastTotal=fTotal();
   return(0);
}
//+------------------------------------------------------------------+
void OPENORDER(string ord)
   {
   int error,err;
   while(true)
      { 
      error=-1;
      if(ord=="Buy" )error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
      if(ord=="Sell")error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
      if(error==-1) //неудачная покупка OK
         { 
         ShowERROR();err++;Sleep(2000);RefreshRates();
      }
      if (err>=CycleCount)break;
   }
   return;
} 
//+------------------------------------------------------------------+
void ShowERROR()
   {
   int err=GetLastError();
   switch(err)
      { 
      case 1   : return;
      case 2   : Alert("Нет связи с торговым сервером ",Symbol());return;
      case 3   : Alert("Error неправильные параметры ",Symbol());return;
      case 130 : Alert("Error близкие стопы Ticket ",Symbol());return;
      case 134 : Alert("Недостаточно денег ",Symbol());return;
      case 146 : Alert("Error Подсистема торговли занята ",Symbol());return;
      case 129 : Alert("Error Неправильная цена ",Symbol());return;
      case 131 : Alert("Error Неправильный объем ",Symbol());return;
      case 4200: Alert("Error Объект уже существует ",Symbol());return;
      default  : Alert("Error " ,err," ",Symbol());return;
   }
}
//+------------------------------------------------------------------+
int fTotal()
   {
   int Tot=OrdersTotal();
   int BuyCount=0,SellCount=0;
   if(Tot>0)
      {
      for(int i=0;i<OrdersTotal();i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
            {
            if(OrderSymbol()==Symbol()&&(Magic==0||OrderMagicNumber()==Magic))
               {
               switch (OrderType())
                  {
                  case OP_BUY :BuyCount++; break;
                  case OP_SELL:SellCount++;break;
               }
            }
         }
      }
   }
   return(BuyCount+SellCount);
}
//+------------------------------------------------------------------+
int OrdCount(string ord)
   {
   int Type;Count=0;
   if(ord=="Buy")Type=OP_BUY;
   if(ord=="Sell")Type=OP_SELL;
   for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         {
         if(OrderSymbol()==Symbol())
            {
            if(OrderType()==Type)
               {
               if(Magic==0||OrderMagicNumber()==Magic)Count++;
            }
         }
      }
   }
   return(Count);
}
//+------------------------------------------------------------------+
 
J'ai l'ouverture de 500 commandes ou 1000 comment réduire ?
 
Frostr:
J'ai l'ouverture de 500 commandes ou 1000 comment réduire ?

Qui est-ce ?
 
rigonich:

Qui est-ce ?



Conseiller )

 
Frostr:



Conseiller )


Un conseiller, c'est évident, mais lequel ?
 

J'ai placé vos données dans le conseiller expert et je l'ai exécuté.)

N'était-ce pas la bonne façon de faire ?

 
file://localhost/C:/Users/mv/Desktop/StrategyTester.htm
 
Frostr:

J'ai placé vos données dans le conseiller expert et je l'ai exécuté.)

N'était-ce pas la bonne façon de faire ?


Je ne comprends pas quel genre de données ? Je viens de te donner le code EA. Compile-le et exécute-le, donne-lui juste un nom. Je ne l'ai pas testé, je l'ai juste recompilé tel quel et mis en ligne. Si cela ne fonctionne pas correctement, faites-le moi savoir et j'essaierai de comprendre pourquoi.