[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 867

 

Chers experts. J'apprends à programmer. J'ai créé ma première EA, mais elle ouvre une transaction et ne fait rien d'autre. Il n'a pas écrit d'erreur dans le journal. J'ai besoin de votre aide !

//+------------------------------------------------------------------+
//|                                                Monetny dvor1.mq4 |
//|                                                            fanat |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "fanat"
#property link      "http://www.metaquotes.net"

extern double Lot=0.1;          //Рабочий лот
extern double TakeProfit=149;    //
extern double StopLoss=275;      //          
extern int Total=1;             //Колличество ордеров   
//+------------------------------------------------------------
int start()
{//1
if(TakeProfit<10)
{//2 
  Alert("Ошибка,TakeProfit слишком близко");
  return;
}//2
     
if(StopLoss<10)
{//2
  Alert("Ошибка,StopLoss слишком близко");
  return;
}//2

if(Total<1)
{//2
  Alert("Ошибка, неизвестно колличество ордеров");
  return;
}//2
bool Buy=false;
bool Sell=false;
bool BuyClose=false;
bool SellClose=false;                                                                             
if(iHigh(NULL,PERIOD_M15,2)<iClose(NULL,PERIOD_M15,1))Buy=true;
if(iLow(NULL,PERIOD_M15,2)>iClose(NULL,PERIOD_M15,1))Sell=true;
if(iClose(NULL,PERIOD_M15,2)>iClose(NULL,PERIOD_M15,1))BuyClose=true;
if(iClose(NULL,PERIOD_M15,2)<iClose(NULL,PERIOD_M15,1))SellClose=true;
if(Buy==false&&Sell==false&&BuyClose==false&&SellClose==false)return;
int err;                                                 //
int ticket;                                              //
int Order_Count[6];                                      //
int OP=-1;                                               //
ArrayInitialize(Order_Count,0);                          //
                                                          //Блок учета ордеров
for(int i=1; i<=OrdersTotal(); i++)                      //
{//2                                                     //
  if(OrderSelect(i-1, SELECT_BY_POS)==true)               // 
  Order_Count[OrderType()]++;                             //
  if(OP!=-1) return(Order_Count[OP]);                     //                         
}//2
  if(OrderSelect(ticket,SELECT_BY_TICKET))                //Закрытие ордеров Sell
{//2                                                     // 
  if((OrderType()==1)&&(Buy==true||SellClose==true))      //  
  {//3                                                    //
  OrderClose(ticket,Lot,Ask,4);                           //
  err=GetLastError();                                     //Обработка ошибок 
  if(err==0)                                              //
  return;                                                 //  
  else                                                    //
  {//4                                                    //
  Sleep(1000);                                            //
  Alert(err);                                             //
  }//4                                    
  }//3
}//2 
  if(OrderSelect(ticket,SELECT_BY_TICKET))                //Закрытие ордеров Buy
{//2                                                     //
  if((OrderType()==0)&&(Sell==true||BuyClose==true))      // 
  {//3                                                    //  
  OrderClose(ticket,Lot,Bid,4);                           // 
  err=GetLastError();                                     //Обработка ошибок
  if(err==0)                                              //
  return;                                                 //
  else                                                    //
  {//4                                                    //
  Sleep(1000);                                            //
  Alert(err);                                             //
  }//4
  }//3
}//2 
if(Order_Count[OP_BUY]>=Total&&Order_Count[OP_SELL]>=Total) return;                  
                                                                                      
if(Order_Count[OP_BUY]<Total&&Order_Count[OP_SELL]==0&&Buy==true)                    //Открытие ордеров Buy
{//2                                                                                 //
  OrderSend(Symbol(), OP_BUY, Lot, Ask, 4, Ask-StopLoss*Point, Ask+TakeProfit*Point); // 
  err=GetLastError();                                                                 //Обработка ошибок
  if(err==0)                                                                          //
  return;                                                                             //
  else                                                                                //
  {//3                                                                                // 
  Sleep(1000);                                                                        //
  Alert(err);                                                                         //
  }//3
}//2         
           
if(Order_Count[OP_SELL]<Total&&Order_Count[OP_BUY]==0&&Sell==true)                   //Открытие ордеров Sell 
{//2                                                                                 //
  OrderSend(Symbol(), OP_SELL, Lot, Bid, 4, Bid+StopLoss*Point, Bid-TakeProfit*Point);//
  err=GetLastError();                                                                 //Обработка ошибок
  if(err==0)                                                                          //
  return;                                                                             //
  else                                                                                //
  {//3                                                                                //
  Sleep(1000);                                                                        //
  Alert(err);                                                                         //
  }//3
}//2

return;
}//1
 

Pouvez-vous me dire comment définir une clause d'interdiction de commerce ?

Par exemple : si iStochastic >80 alors nottreid (transaction interdite (ou ouverture de position interdite) ?

 
fanat:

Chers experts. J'apprends à programmer. J'ai créé ma première EA, mais elle ouvre une transaction et ne fait rien d'autre. Il n'a pas écrit d'erreur dans le journal. J'ai besoin de votre aide !


Un sacré mélange, mais qui fonctionne (dans le testeur).

 
Vinin:


Un sacré mélange, mais qui fonctionne (dans le testeur).


Je me rends compte que les conditions d'ouverture d'un marché sont stupides.
 
Vinin:


Un sacré mélange, mais qui fonctionne (dans le testeur).


Construire 226. Le mien ne fonctionne même pas dans le testeur. Pouvez-vous me dire pourquoi ?
 
fanat:

Construire 226. Ça ne fonctionne même pas dans mon testeur. Pouvez-vous me dire pourquoi ?

Je ne sais pas pourquoi ça ne marche pas pour vous. Le code fonctionne
 
fanat:

Construire 226. Ça ne fonctionne même pas dans mon testeur. Pouvez-vous me dire pourquoi ?

Téléchargez le terminal ailleurs dans la même Build 226.

 
Vinin:

Pourquoi ça ne marche pas pour toi, je ne sais pas. Le code fonctionne.

Je l'ai. Merci. Je vais essayer de réinstaller MT.
 

Chers experts. J'ai envoyé le code ce matin. Il prévoit des conditions de clôture des transactions par le conseiller expert lui-même. Mais il ferme les transactions uniquement sur le TP ou le SL. Et si je fixe le TP et le SL à 900, il n'ouvre qu'une seule transaction et c'est tout. Je demande de l'aide.

 
fanat:

Chers experts. J'ai envoyé le code ce matin. Il prévoit des conditions de clôture des transactions par le conseiller expert lui-même. Mais il ferme les transactions uniquement sur le TP ou le SL. Et si je fixe le TP et le SL à 900, il n'ouvre qu'une seule transaction et c'est tout. Je demande de l'aide.


Comment pourrait-il en être autrement si le ticket est toujours égal à 0. Il doit être préaffecté à quelque chose

Par exemple

   int ticket;        

   for(int i=0 i<OrdersTotal(); i++)                      
      if(OrderSelect(i, SELECT_BY_POS))
         ticket=OrderTicket();