Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 681

 
Igor Makanu:

wahrscheinlich so, um zu verkaufen:

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

um nach Bid zu kaufen, d.h. ( Bid -OrderOpenPrice())

TakeProfit =100 Punkte Lot = 0,1, wie hoch wird der Gewinn der offenen Position in der Währung sein, wenn die Position durch TP geschlossen wird?

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

So funktioniert das nicht.

 
Vitaly Muzichenko:

Notwendigkeit zu arbeiten:Lot -> Geld -> Entfernung, und die Kosten für die Zecke

Geld ist genau das Richtige, um das herauszufinden)

 
Vitaly Muzichenko:

Bei dieser Lösung bleiben Provisionen und Swaps unberücksichtigt. Die Punkte scheinen Gewinn zu machen, aber die Kosten sind ein Verlust.

Ich mag die Formel OrderProfit()+ OrderComission()+OrderSwap() mit Provisionen und Swaps nicht

In der Hilfe steht, dass die Provision in Punkten oder in einer Einzahlungswährung erfolgen kann. Diese Formel berücksichtigt dies nicht und kann beim Testen mehr schaden als nutzen, aber das ist Geschmackssache.

Ghabo:

Take_Profit =100 Punkte, Lot =0.1, wie hoch wird der Gewinn einer offenen Position in der Währung sein, wenn die Position durch TP geschlossen wird?

So funktioniert das nicht.

Ist Mathe nicht Ihr Ding? ;)

sonst:

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

wenn sie gekürzt wird, wird sie

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

 
Vitaly Muzichenko:

Gemeint ist damit, dassOrderProfit() in der Berechnung verwendet werden soll

Wie berechnet man das Lot für eine Position, bevor man einen Auftrag sendet, um einen Gewinn von 20 USD zu erzielen, wenn TakeProfit einsetzt? OrderProfit() wird hier nicht helfen - es gibt noch keine Position.

Oder anders: Wie hoch wäre der Take-Profit der Future-Position, so dass ich, wenn ich mit 0,1 Lot eröffne, einen Gewinn von 20 USD erzielen würde? Und hier hilft OrderProfit() nicht weiter - aus demselben Grund.

Und andersherum: Wie hoch sollte der Stop-Loss in der zukünftigen Position sein, so dass ich bei einer Eröffnung mit 0,1 Lot einen Verlust von nicht mehr als 3% der verfügbaren Mittel erhalte? Und hier hilft OrderProfit() nicht weiter - aus demselben Grund.

Aktualisierung: Alle Berechnungen sind ohne Kenntnis der Provisionen und Swaps nur annähernd möglich. Wir müssen die Stop-Order "vor Ort" anpassen, wenn wir auf einen Cent oder einen Punkt genau sein müssen.

 
Artyom Trishkin:

Wie berechne ich, bevor ich einen Auftrag zur Eröffnung einer Position erteile, das Lot für die zukünftige Position, so dass ich bei Auslösung des Take-Profits einen Gewinn von 20 USD erhalte? OrderProfit() ist hier nicht hilfreich - es gibt noch keine Position.

Oder anders ausgedrückt: Wie hoch wäre der Take-Profit der zukünftigen Position, so dass ich, wenn ich mit 0,1 Lot eröffne, einen Gewinn von 20 USD erzielen würde? Und hier hilft OrderProfit() nicht weiter - aus demselben Grund.

Ich habe nur geschrieben und verstanden, was ich zu berechnen hatte, bevor ich die Nachricht öffnete, und habe sie sofort gelöscht. Wie klug von Ihnen zu antworten)

Ich habe einmal eine solche geschrieben und in den Eingabeparametern einen Betrag pro 1 Lot als Kommission eingegeben.

 
Hallo, ich kann es nicht herausfinden, bitte helfen Sie mir. Was ist an diesem Code falsch? Ich zeige den Durchschnittswert im Kommentar an und er steigt mit jedem Tick? Hilfe:-))))
 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:
steigt sie mit jedem Ticken? Hilfe:-))))

Das bedeutet, dass Sie bei jedem Tick den von Ihnen eingereichten Code zählen und die VariablenSredRazmax undSredRazmin nicht initialisieren.

es ist eine gute Angewohnheit, Variablen vor der Verwendung zu initialisieren - das lernt man an den Universitäten, es reduziert die Zeit, die man braucht, um Fehler zu finden ;)

 

Liebe Kollegen, warum weigert sich dieser Code, im Strategietester ausgeführt zu werden, wird aber in Echtzeit korrekt ausgeführt. Ich spreche speziell über die Funktion OnChartEvent(). Im Visualisierungsmodus des Testers wird sie nicht ausgeführt, wenn die Schaltflächen angeklickt werden.

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:

Liebe Kollegen, warum weigert sich dieser Code, im Strategietester ausgeführt zu werden, wird aber in Echtzeit korrekt ausgeführt. Ich spreche speziell über die Funktion OnChartEvent(). Im Visualisierungsmodus des Testers wird sie nicht ausgeführt, wenn die Schaltflächen angeklickt werden.

Weil OnChartEvent() im Tester in MT4 nicht funktioniert. Überprüfen Sie das Flag für den Schaltflächenstatus im Prüfgerät.
 
Artyom Trishkin:
Denn in MT4 funktioniert OnChartEvent() im Tester nicht. Überprüfen Sie das Flag für den Schaltflächenstatus im Prüfgerät.

Ich danke Ihnen! Ich hatte diesen Verdacht, aber ich habe in der Hilfe keine Informationen gefunden, dass OnChartEvent() im Tester nicht funktioniert.

Grund der Beschwerde: