Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 848

 
Comment puis-je prescrire dans les codes de mes EAs qu'ils fonctionnent avec chacune de mes paires de devises ? Je ne peux pas dire si j'ai un symbole différent ou si j'ai une paire de devises différente.
 
logut:
Comment puis-je prescrire dans les codes de mes EAs qu'ils fonctionnent avec chacune de mes paires de devises ? J'ai un symbole différent mais il ne fonctionne pas.
Je ne suis pas sûr d'utiliser un seul symbole pour une paire de devises différente, mais le même symbole suffit.
 
Bonjour. J'ai écrit un EA, il montre de bons résultats dans le testeur. Compile sans erreur. Il est rattaché à l'euro-dollar.
Dans le commerce réel, les transactions ne s'ouvrent pas, lorsque les conditions d'ouverture d'une transaction apparaissent, un message s'affiche :
2015.02.11 14:03:03.656 '1435109' : ordre d'achat 0.01 EURUSD ouverture au marché sl : 1.12697 tp : 1.13747 échoué [S/L ou T/P non valide].
Si je comprends bien, cela signifie qu'il ne s'agit pas d'un arrêt ou d'une prise valable. Un ordre avec des stops et des prises donnés est placé manuellement. Il y a une distance entre le prix et le stop.
Il y a plusieurs fois plus de distance entre le prix et le point. Tous les calculs de l'arrêt et du courant sont normalisés. Quelle peut être la raison, je ne comprends pas, s'il vous plaît aidez-moi à comprendre.
Voici le programme :
int start()
{
//------------------------------------------------------------------------------------------------

si (OrdersTotal()>0)
retour ;
double monymax8=High [ArrayMaximum(High,3,0)] ;
si (j'ai supprimé la condition elle-même car ce n'est pas la raison, puisque le programme atteint la fonction OrderSend)

{ double stop_sell8=monymax8+Point ;
double STOP_S8=NormalizeDouble(stop_sell8,Digits) ;
double profit_sell8=Bid-(stop_sell8-Bid)*4-(Ask-Bid) ;
double PROFIT_S8=NormaliserDouble(profit_sell8,Chiffres) ;
double my_lot8=AccountBalance()/100/((stop_sell8-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE))/100000 ;
double LOT8=NormalizeDouble(my_lot8,2) ;
OrderSend(Symbol(),OP_SELL,LOT8,Bid,2,STOP_S8,PROFIT_S8) ;
}
//------------------------------------------------------------------------------------------------
retour ;
}

 
Rogoza:
Bonjour. J'ai écrit un EA, il montre de bons résultats dans le testeur. Compile sans erreur. Il est rattaché à l'euro-dollar.
Dans le commerce réel, les transactions ne s'ouvrent pas, lorsque les conditions d'ouverture d'une transaction apparaissent, un message s'affiche :
2015.02.11 14:03:03.656 '1435109' : ordre d'achat 0.01 EURUSD ouverture au marché sl : 1.12697 tp : 1.13747 échoué [S/L ou T/P non valide].
Si je comprends bien, cela signifie qu'il ne s'agit pas d'un arrêt ou d'une prise valable. Un ordre avec des stops et des prises donnés est placé manuellement. Il y a une distance entre le prix et le stop.
Il y a plusieurs fois plus de distance entre le prix et le point. Tous les calculs de l'arrêt et du courant sont normalisés. Quelle peut être la raison, je ne comprends pas, s'il vous plaît aidez-moi à comprendre.
Voici le programme :
int start() 
 {
 
//------------------------------------------------------------------------------------------------
if (OrdersTotal()>0)
   return;
   
   double monymax8=High[ArrayMaximum(High,3,0)];
   
       
        if (само условие я убрал так как не в нём причина, раз программа доходит до функции  OrderSend)
        {   double stop_sell8=monymax8+Point;
            double STOP_S8=NormalizeDouble(stop_sell8,Digits);
            double profit_sell8=Bid-(stop_sell8-Bid)*4-(Ask-Bid);
            double PROFIT_S8=NormalizeDouble(profit_sell8,Digits);
            double my_lot8=AccountBalance()/100/((stop_sell8-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE))/100000;
            double LOT8=NormalizeDouble(my_lot8,2);
           
             
           OrderSend(Symbol(),OP_SELL,LOT8,Bid,2,STOP_S8,PROFIT_S8);
            
                   
        }
      
 //------------------------------------------------------------------------------------------------
   return;
 } 

Formatez votre code comme ceci. Il existe un bouton SRC pour cela.

Il ne s'ouvre pas car sur ces types de compte, les ordres sans arrêt sont ouverts en premier, puis OrderModify()

 
evillive:
Le magik n'est nécessaire que s'il y a plusieurs "commerçants" sur le même symbole, mais cela suffit pour vérifier le symbole.
Je vois. Maintenant, ce qui m'inquiète, c'est de savoir comment rendre l'EA multi-devises ?
 
AlexeyVik:

Formatez votre code comme ceci. Il existe le bouton SRC à cet effet.

Il ne s'ouvre pas parce que dans ces types de compte, les ordres sans arrêt sont ouverts en premier, et ensuite OrderModify()

Merci beaucoup, je vais réécrire le code.
 
logut:
J'ai compris. Maintenant ma question est de savoir comment rendre l'EA multi-devises ?
Ouvrez une kodobase, trouvez-y un EA multi-devises et découvrez comment il fonctionne.
 

En général, je suis vraiment bloqué sur quelque chose et je n'arrive pas à trouver comment le faire.

J'ai des variables ligne1, ligne2, ligne3, etc. Je veux compter la valeur de chaque variable à travers l'instruction de boucle for.

Comment faire une énumération correcte de la ligne des variables ? J'ai essayé de le faire en tant que "ligne "+"i", mais cela s'avère être un non-sens, bien sûr.

for(int i=1;i<=111111111111;i++)
        {
            if("line"+"i">0)counter++;
        }
 
Il est probablement préférable de créer un tableau line[] et de le parcourir en boucle.
 

Pourquoi le mauvais objet s'affiche-t-il ? Ce devrait êtreun triangle pointant vers la gauchehttps://docs.mql4.com/ru/constants/objectconstants/arrows code 3, mais une flèche pointant vers le haut Wingdings code 241apparaît.

obj.

Code du programme (j'aiObjectSet(objName, OBJPROP_ARROWCODE, 3) ;)

void f_ArrowClose(
                  datetime closeTime,
                  int action,          //íàïðàâëåíèå
                  double lots,
                  string symb,
                  double openPrice,
                  double closePrice,
                  double profit)
{
      color c;
      string op="";
      if(action==1)
      {
         if(profit>0)c=Blue;else if(profit<0)c=Red;else c=Yellow;
         op="cl_BUY";
      }
      else if(action==-1)
      {
         if(profit>0)c=Blue;else if(profit<0)c=Red;else c=Yellow;
         op="cl_SELL";
      }
      
      string objName = StringConcatenate("#", closeTime, " ", op, " ", lots, " ", symb, " at ", openPrice, " close at ", closePrice);
      ObjectCreate(objName, OBJ_ARROW, 0, closeTime, closePrice);
      ObjectSet(objName, OBJPROP_COLOR, c);
      ObjectSet(objName, OBJPROP_ARROWCODE, 3);
      //ObjectSetText(objName, StringConcatenate("Profit: ", profit));
}
Raison: