Qui peut aider avec le robot, pourquoi ne fonctionne-t-il pas ? - page 3

 
Pour les GIM
Si vous voulez seulement ouvrir des ordres, alors spécifiez 0 au lieu de SL / TP. Si SL ou TP est égal à 0, vous devrez entrer 0 dans votre demande, et si vous entrez une valeur, vous devrez calculer le prix auquel l'ordre sera fermé.
 
Dmitriy Gizlyk:
Pour les GIM
Si vous voulez seulement ouvrir des ordres, alors spécifiez 0 au lieu de SL / TP. Et pour l'avenir, vous devez vérifier : si SL ou TP est 0, alors vous devez spécifier 0 dans la requête. Et si vous spécifiez une valeur, alors calculez le prix de clôture de l'ordre.
Je voudrais que le conseiller expert ouvre et ferme les ordres en fonction du profit total pour toutes les transactions.....
 
AdikAmir:

extern double Lots=0.1 ;
extern intnal double FastMAPeriod=5 ;
extern int FastMAMethod=0 ; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
external int FastMAPrice=0 ; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int SlowMAPeriod=75 ;
extern intn SlowMAMethod=3 ; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=3 ; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
Externe int TP=500 ; //Prise en charge
extern int SL=250 ; //arrêt des pertes
double ticet ;

int start(){

double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1) ;
double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1) ;
double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2) ;
double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2) ;

si (OrdersTotal()==0)
{
si (fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
{ ticet = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE) ;
si (ticet==0) Print("ERROR") ;
}
si (slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
{
ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE) ;
si (ticet==0) Print("ERROR") ;
}

}

retour(0) ;
}




Lisez le journal. Il y a peut-être des messages concernant des erreurs qui n'ont pas été détectées lors de la compilation.

Il y a une erreur ici OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE) ;

vous devez faire ce qui suit OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE) ;

Lorsque vous vendez, le stop loss doit être au-dessus du prix actuel et le take est en dessous. Dans votre cas, au contraire, vous avez mis le stop en dessous du prix et le take est au-dessus.

 
GIM:
Je voudrais que le conseiller expert ouvre et ferme les ordres en fonction du profit total pour toutes les transactions.....

Dans ce cas, lors de l'ouverture d'une position, mettez SL=0, TP=0.

Pour fermer une position, nous devons comparer le profit obtenu avec la valeur définie à chaque tick. Et lorsque le profit atteint la valeur spécifiée, nous devons fermer tous les ordres dans la boucle par le biais de OrderClose(....).

En ce qui concerne la détermination du bénéfice courant, il peut y avoir des variations en fonction de la tâche fixée. Si vous regardez le profit du compte, vous pouvez simplement prendre AccountProfit(), mais la manière la plus laborieuse est probablement à travers une boucle (alors nous pouvons calculer le profit seulement pour les ordres nécessaires).

   double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
Dmitriy Gizlyk:

Dans ce cas, lors de l'ouverture d'une position, mettez SL=0, TP=0.

Pour fermer une position, nous devons comparer le profit obtenu avec la valeur définie à chaque tick. Et lorsque le profit atteint la valeur spécifiée, nous devons fermer tous les ordres dans la boucle par le biais de OrderClose(....).

En ce qui concerne la détermination du bénéfice courant, il peut y avoir des variations en fonction de la tâche fixée. Si vous regardez le bénéfice du compte, vous pouvez simplement prendre AccountProfit(), mais la façon la plus laborieuse est probablement à travers un cycle (alors vous pouvez calculer le bénéfice de seulement les ordres nécessaires).

extern double  lots       = 0.01;
extern int  stop_loss      = 0;  
extern int take_profit    = 0;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point,  "", 1, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point,  "", 1, 0, clrRed);      
}
   return(0); 
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
GIM:
Si le stoploss et le take profit sont dans la devise du dépôt.
extern double  lots       = 0.01;
extern int  stop_loss      = 10;  /* Указываем в валюте депозита */
extern int take_profit    = 20;   /* Указываем в валюте депозита */
extern int Magic          = 1;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0,  "", Magic, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0,  "", Magic, 0, clrRed);      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
   return(0); 
}
 
Dmitriy Gizlyk:
Si le stoploss et le take profit sont spécifiés dans la devise du dépôt.

for(int i=0;i<OrdersTotal();i++)

Erreur : "i"

 
Qui sait ?
extern int Magic          = 1;


что означает??
 
GIM:
Qui sait ?

L'identifiant des ordres du conseiller expert, afin qu'il ne travaille qu'avec ses propres ordres.

 
Vladimir Zubov:

L'identifiant des ordres du conseiller expert, afin qu'il ne travaille qu'avec ses propres ordres.

Que voulez-vous dire, seulement avec ses propres commandes....
Raison: