Möglicher Fehler des MT5-Strategie-Testers beim Risikomanagement bei der Berechnung der Charge mit der Funktion OrderProfitCheck

 
Meine Premiere hier mit diesem Thread, ich möchte meine Erfahrungen mit automatisiertem Risikomanagement teilen, nachdem ich oft über das Problem nachgedacht habe, habe ich diese OrderProfitCheck-Funktion gefunden, die zur MoneyFixedRisk-Risikomanagementklasse gehört, bevor ich das geschrieben habe Wenn ich diese Funktion ausführe, setze ich sie in einen Kontext, der meine Strategie bestimmt. Meine Strategie sucht nach Einträgen. Wenn sie einen Eintrag findet, berechnet sie einen geeigneten SL. Mit diesen beiden Daten und der Einstellung von 1% des Saldos als maximalem Verlust eines Vorgangs hilft mir OrderProfitCheck projizieren, je mehr Abstammung ich brauche, um nicht mehr als 1% meines Guthabens zu riskieren.


Loss=-m_account.OrderProfitCheck(m_symbol.Name(),ORDER_TYPE_SELL,1.0,m_symbol.Bid(),sl);
aLots = MathFloor(m_account.Balance()*MaximumRisk/Loss/100.0/stepvol)*stepvol;


Bis zu dem Moment, als ich dachte, dass sie meine Risikomanagementprobleme gelöst hätten, trat ich in den Strategietester ein und es stellte sich heraus, dass es manchmal funktioniert und oftmals nach vielen Tests und dem Nicht-Finden des Problems nicht entschieden wird, anhand realer und resultierender Daten zu testen, dass Es funktioniert wie ein Zauber, es gab keine größeren Unannehmlichkeiten außer der Frage des Spreads, der den Verlust ein wenig schwanken lässt.



Ich würde gerne wissen, ob jemand dies bereits durchgemacht hat und ob es eine Lösung gibt, um es im Simulator zu verwenden ?, Grüße.
 
japarradog:
Meine Premiere hier mit diesem Thread, ich möchte meine Erfahrungen mit automatisiertem Risikomanagement teilen, nachdem ich oft über das Problem nachgedacht habe, habe ich diese OrderProfitCheck-Funktion gefunden, die zur MoneyFixedRisk-Risikomanagementklasse gehört, bevor ich das geschrieben habe Wenn ich diese Funktion ausführe, setze ich sie in einen Kontext, der meine Strategie bestimmt. Meine Strategie sucht nach Einträgen. Wenn sie einen Eintrag findet, berechnet sie einen geeigneten SL. Mit diesen beiden Daten und der Einstellung von 1% des Saldos als maximalem Verlust eines Vorgangs hilft mir OrderProfitCheck projizieren, je mehr Abstammung ich brauche, um nicht mehr als 1% meines Guthabens zu riskieren.



Bis zu dem Moment, als ich dachte, dass sie meine Risikomanagementprobleme gelöst hätten, trat ich in den Strategietester ein und es stellte sich heraus, dass es manchmal funktioniert und oftmals nach vielen Tests und dem Nicht-Finden des Problems nicht entschieden wird, anhand realer und resultierender Daten zu testen, dass Es funktioniert wie ein Zauber, es gab keine größeren Unannehmlichkeiten außer der Frage des Spreads, der den Verlust ein wenig schwanken lässt.



Ich würde gerne wissen, ob jemand dies bereits durchgemacht hat und ob es eine Lösung gibt, um es im Simulator zu verwenden ?, Grüße.

Die funktion wird funktionieren, du musst wohl bei der implementierung suchen

 
amando:

Die funktion wird funktionieren, du musst wohl bei der implementierung suchen

Hallo, wenn es funktioniert, in Echtzeit-Demo habe ich es bereits ausprobiert und es funktioniert sehr gut. Was passiert, ist, dass es im Simulator alles gut zu machen scheint, aber in ein paar Operationen brennt es die Waage. Es macht zum Beispiel keinen Sinn, einen Verlustvorgang zu schließen, bei dem ich 15 USD riskiert und 350 USD oder mehr abgezogen habe. In einigen Vorgängen verbrennt das die Waage. Ich habe die manuelle Berechnung gemäß meinem SL und meinem Risiko pro Vorgang durchgeführt, um die Linie und zu berechnen Es ist dasselbe, was der Berater berechnet. Heute werde ich andere Tests durchführen und einige Bilder aufnehmen, um die Situation besser zu beschreiben, danke.

Schau dir die Funktion an.

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
bool LotsOptimized(double & aLots, double sl, ENUM_ORDER_TYPE TipoOrden)
  {
   double stepvol=m_symbol.LotsStep();
   double minvol=m_symbol.LotsMin();
   double maxvol=m_symbol.LotsMax();
   double Loss=0;
   //double lot=0;
   double precioactual = 0;
   if(TipoOrden==ORDER_TYPE_BUY)
     {
      Loss=-m_account.OrderProfitCheck(m_symbol.Name(),ORDER_TYPE_BUY,1.0,m_symbol.Ask(),sl);
      precioactual = m_symbol.Ask();
     }
   else
     {
      Loss=-m_account.OrderProfitCheck(m_symbol.Name(),ORDER_TYPE_SELL,1.0,m_symbol.Bid(),sl);
      precioactual = m_symbol.Bid();
     }
   aLots = MathFloor(m_account.Balance()*MaximumRisk/Loss/100.0/stepvol)*stepvol;

//---comprobación del lote máximo
   /*if(TipoOrden==ORDER_TYPE_BUY)
      lot=m_account.MaxLotCheck(m_symbol.Name(),ORDER_TYPE_BUY,m_symbol.Ask(),MaximumRisk);
   else
      lot=m_account.MaxLotCheck(m_symbol.Name(),ORDER_TYPE_SELL,m_symbol.Bid(),MaximumRisk);*/
      
   if(aLots>maxvol)
      aLots=maxvol;
//---comprobación del lote mínimo
   if(aLots<minvol)
      aLots=0.0;
   Comentario=Comentario+StringFormat("\n\nCon un Sl de %f (%f)Pips,en UN Lote estoy arriesgando = %f Lote necesario: %f\n",sl,MathAbs(sl-precioactual)*SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),Loss,aLots);
   return(true);
  }


PD. Entschuldigung für die Grammatikfehler, ich benutze Google Traslate.

 
japarradog:

Hallo, wenn es funktioniert, in Echtzeit-Demo habe ich es bereits ausprobiert und es funktioniert sehr gut. Was passiert, ist, dass es im Simulator alles gut zu machen scheint, aber in ein paar Operationen brennt es die Waage. Es macht zum Beispiel keinen Sinn, einen Verlustvorgang zu schließen, bei dem ich 15 USD riskiert und 350 USD oder mehr abgezogen habe. In einigen Vorgängen verbrennt das die Waage. Ich habe die manuelle Berechnung gemäß meinem SL und meinem Risiko pro Vorgang durchgeführt, um die Linie und zu berechnen Es ist dasselbe, was der Berater berechnet. Heute werde ich andere Tests durchführen und einige Bilder aufnehmen, um die Situation besser zu beschreiben, danke.

Schau dir die Funktion an.


PD. Entschuldigung für die Grammatikfehler, ich benutze Google Traslate.

Erfassung von Simulationsfehlern.

Dateien:
Grund der Beschwerde: