Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 681

 
Igor Makanu:

probablement comme ça, pour vendre :

profit=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2) ;

pour acheter par Bid, c'est-à-dire ( Bid -OrderOpenPrice())

TakeProfit =100 points Lot = 0.1, quel sera le profit de la position ouverte dans la devise, lorsque la position est fermée par TP ?

profit=NormalizeDouble((OrderOpenPrice()-Тейк_Профит*Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

ça ne marche pas comme ça.

 
Vitaly Muzichenko:

Nécessité d'opérer :Lot -> Argent -> Distance, et le coût du tick

L'argent est justement ce qu'il faut pour le savoir.)

 
Vitaly Muzichenko:

La solution ne tient pas compte des commissions et des swaps. Les points semblent être en profit, mais les coûts sont une perte.

Je n'aime pas la formule OrderProfit()+ OrderComission()+OrderSwap() avec les commissions et les swaps.

L'aide indique que la commission peut être en points ou en monnaie de dépôt, cette formule n'en tient pas compte et peut faire plus de mal que de bien lors des tests, mais c'est une question de goût.

Ghabo:

Take_Profit =100 points, lot =0.1, quel sera le profit d'une position ouverte dans la devise, lorsque la position est fermée par TP ?

Ça ne marche pas comme ça.

Les maths, c'est pas ton truc ? ;)

autrement :

profit=NormalizeDouble((Take_Profit *Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2) ;

si elle est raccourcie, elle sera

profit=NormalizeDouble(lot *TakeProfit*MarketInfo(_Symbol,MODE_TICKVALUE),2) ;

 
Vitaly Muzichenko:

Ce que l'on veut dire ici, c'est que lafonction OrderProfit() doit être utilisée dans le calcul.

Comment calculer le lot d'une position avant d'envoyer un ordre pour obtenir un profit de 20 USD lorsque le TakeProfit entre en jeu ? La fonction OrderProfit() ne sera pas utile ici - il n'y a pas encore de position.

Ou en d'autres termes : Quel serait le takeprofit de la position future, de sorte que si j'ouvre avec 0,1 lot, j'obtiendrais un profit de 20 USD ? Et ici, OrderProfit() ne sera pas utile - pour la même raison.

Et d'une autre manière : Quel Stop Loss devrait être dans la position future, de sorte que lorsque j'ouvre avec 0.1 lot, j'obtienne une perte de pas plus de 3% des fonds disponibles ? Et ici, OrderProfit() ne sera pas utile - pour la même raison.

Mise à jour : tous les calculs seront approximatifs sans connaissance de la commission et du swap. Nous devrons ajuster les ordres d'arrêt "sur place" si nous avons besoin d'une précision au centime ou au point près.

 
Artyom Trishkin:

Avant d'envoyer un ordre pour ouvrir une position, comment puis-je calculer le lot pour la future position, de sorte que lorsque le takeprofit est déclenché, j'obtienne un profit de 20 USD ? OrderProfit() n'est pas utile ici - il n'y a pas encore de position.

Ou encore : Quel serait le TakeProfit de la future position, de sorte que si j'ouvre avec 0.1 lot, j'obtiendrais un profit de 20 USD ? Et ici, OrderProfit() ne sera pas utile - pour la même raison.

J'ai juste écrit et compris ce que je devais calculer avant d'ouvrir et de supprimer immédiatement le message. Quelle intelligence de votre part de répondre)

J'ai déjà écrit un tel document, et j'ai entré un montant par lot dans les paramètres d'entrée comme commission.

 
Bonjour, je n'arrive pas à comprendre, aidez-moi s'il vous plaît. Quel est le problème avec ce code ? J'affiche la valeur moyenne dans le commentaire et elle augmente à chaque tick? Aide : ))))
 for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++){
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
 
Dmitry Belov:
augmente-t-il à chaque tic-tac? Aide : ))))

cela signifie que vous comptez sur chaque tick le code que vous avez soumis et que vous n'initialisez pas les variablesSredRazmax etSredRazmin

c'est une bonne habitude d'initialiser les variables avant de les utiliser - c'est ce que les universités vous apprennent, cela réduit le temps nécessaire pour trouver les bugs ;)

 

Chers collègues, pourquoi ce code refuse-t-il de s'exécuter dans le testeur de stratégie, mais s'exécute correctement en temps réel. Je parle spécifiquement de la fonction OnChartEvent(). En mode visualisation dans le testeur, il n'est pas exécuté lorsque les boutons sont cliqués.

input double lot=0.1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ButtonCreate("ButtonBuy",100,100,200,40,"Buy",15,clrBlue);
   ButtonCreate("ButtonSell",100,200,200,40,"Sell",15,clrRed);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   long cid=ChartID();
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonBuy")
     {
      if(OrderSend(_Symbol,OP_BUY,lot,Ask,200,0,0,NULL,0,0,clrBlue)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonBuy",OBJPROP_STATE,false);
     }
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonSell")
     {
      if(OrderSend(_Symbol,OP_SELL,lot,Bid,200,0,0,NULL,0,0,clrRed)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonSell",OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate(string name,int x,int y,int width,int height,
                  string text,int font_size,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER;
   string font="Cambria";
   color text_clr=clrBlack;
   color border_clr=clrBlack;
   bool state=false;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_BUTTON,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_clr);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_STATE,state); 
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov:

Chers collègues, pourquoi ce code refuse-t-il de s'exécuter dans le testeur de stratégie, mais s'exécute correctement en temps réel. Je parle spécifiquement de la fonction OnChartEvent(). En mode visualisation dans le testeur, il n'est pas exécuté lorsque les boutons sont cliqués.

Parce que OnChartEvent() ne fonctionne pas dans le testeur dans MT4. Vérifiez le drapeau d'état du bouton dans le testeur.
 
Artyom Trishkin:
Parce que dans MT4 OnChartEvent() ne fonctionne pas dans le testeur. Vérifiez le drapeau d'état du bouton dans le testeur.

Merci ! J'avais ce soupçon, mais je n'ai pas trouvé d'information dans l'aide indiquant que OnChartEvent() ne fonctionne pas dans le testeur.