[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 239

 
IgorM:

iHighest und iLowest, um Ihnen zu helfen, und lesen Sie den Algorithmus zur Erstellung von ZZ

SZY: nicht die einfachste Aufgabe, der Code wird klein sein, aber der Algorithmus ist komplex, ich kann den Code nicht finden, aber ich habe so nach einer Spitze bei High gesucht: High[iHighest(NULL,0,MODE_HIGH,i)

1. Was ist "33"?

2. high[iHighest(NULL,0,MODE_HIGH,i) ergibt einen Punkt. Wie bekomme ich die zweite?

iLowest != zweiter Punkt.

 
charter:

1. Was ist "33"?

2. high[iHighest(NULL,0,MODE_HIGH,i) ergibt einen Punkt. Wie bekomme ich die zweite?


1. Zickzack.

2. Das wird es nicht, es wird Ihnen nur die Möglichkeit geben, ein Hoch für die obere Linie zu finden, und dann müssen Sie zwei dieser Hochs auswählen, um die Linie damit zu ziehen

 
charter:

Die Schwierigkeit besteht darin, die Punkte zu finden, durch die die Linie später gezogen werden soll.

Es ist nicht schwer, Linien zu zeichnen, wenn man diese Punkte sehen kann. Wie kann man sie programmatisch "sehen"?

Danke, korrigiert!

 
charter:

Die Schwierigkeit besteht darin, die Punkte zu finden, durch die die Linie später gezogen werden soll.

Es ist nicht schwer, Linien zu zeichnen, wenn man diese Punkte sehen kann. Wie kann man sie programmatisch "sehen"?

Danke, korrigiert!

 

Guten Tag an alle Genießer!

Bitte helfen Sie mir, den Code im Expert Advisor zu korrigieren https://www.mql5.com/ru/code - Ilan.

Die Idee ist, dass der EA einen einstellbaren Parameter für Equity Drawdown hat, der alle Aufträge schließt!

Diese Funktion mit Lot-Positionen ist jedoch erst später aufgetaucht, so dass unser EA alle offenen Orders dem Trend folgend geschlossen hat und Locking-Positionen unangetastet lässt. Wie kann man es also so einrichten, dass alle Aufträge bei einer bestimmten Verringerung des Eigenkapitals geschlossen werden?

Hier ist der Bereich, in dem die Aufträge geschlossen werden (Trend- und Verlustaufträge haben unterschiedliche magische Zahlen). Hier funktioniert alles. Der Expert Advisor schließt alle Aufträge. Die Absenkung ist 4 oder mehr Mal höher als die eingestellte Absenkung, bis zum Punkt der Entleerung des Depots:

if (UseEquityStop) {

if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {

CloseThisSymbolAll(MagicNumber);

CloseThisSymbolAll(LMagN);

PrintF("Closed All due to Stop Out");

NewOrdersPlaced = FALSE;

Es stellt sich heraus, dass die Verlustaufträge zwar gedeckt sind, aber bei der Berechnung des aktuellen Gewinns und des Eigenkapitals nicht berücksichtigt werden! Hier ist das Segment, das den aktuellen Gewinn berechnet:

double CalculateProfit() {

double ld_ret_0 = 0;

for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == MagicNumber || OrderMagicNumber() == LMagN)

if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();

}

return (ld_ret_0);

Und hier ist das Segment, das das Eigenkapital berechnet:

double AccountEquityHigh() {

if ((CountTrades(MagicNumber) == 0) && (CountTrades(LMagN) == 0)) AccountEquityHighAmt = AccountEquity();

if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;

else AccountEquityHighAmt = AccountEquity();

PrevEquity = AccountEquity();

return (AccountEquityHighAmt);

Ich habe die von mir hinzugefügten Abschnitte schwarz markiert. Was habe ich vergessen????? Warum funktioniert es nicht?????

 
polsvv:

Guten Tag an alle Genießer!

Bitte helfen Sie mir, den Code im Expert Advisor zu korrigieren https://www.mql5.com/ru/code - Ilan.

Die Idee ist, dass der EA einen einstellbaren Parameter für Equity Drawdown hat, der alle Aufträge schließt!

Die Locking-Funktion ist jedoch erst später aufgetaucht, so dass unser EA alle offenen Orders dem Trend folgend geschlossen hat und die Locking-Positionen unangetastet ließ. Wie kann man es also so einrichten, dass alle Aufträge bei einer bestimmten Verringerung des Eigenkapitals geschlossen werden?

Hier ist der Bereich, in dem die Aufträge geschlossen werden (Trend- und Verlustaufträge haben unterschiedliche magische Zahlen). Hier funktioniert alles. Der Expert Advisor schließt alle Aufträge. Die Absenkung ist 4 oder mehr Mal höher als die eingestellte Absenkung, bis zum Punkt der Entleerung des Depots:

if (UseEquityStop) {

if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {

CloseThisSymbolAll(MagicNumber);

CloseThisSymbolAll(LMagN);

PrintF("Closed All due to Stop Out");

NewOrdersPlaced = FALSE;

Es stellt sich heraus, dass die Verlustaufträge zwar gedeckt sind, aber bei der Berechnung des aktuellen Gewinns und des Eigenkapitals nicht berücksichtigt werden! Hier ist das Segment, das den aktuellen Gewinn berechnet:

double CalculateProfit() {

double ld_ret_0 = 0;

for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == MagicNumber || OrderMagicNumber() == LMagN)

if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();

}

return (ld_ret_0);

Und hier ist das Segment, das das Eigenkapital berechnet:

double AccountEquityHigh() {

if ((CountTrades(MagicNumber) == 0) && (CountTrades(LMagN) == 0)) AccountEquityHighAmt = AccountEquity();

if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;

else AccountEquityHighAmt = AccountEquity();

PrevEquity = AccountEquity();

return (AccountEquityHighAmt);

Ich habe die von mir hinzugefügten Abschnitte schwarz markiert. Was habe ich vergessen????? Warum funktioniert es nicht?????

Vielleicht sollte es das? :

//===================================================================================
double CalculateProfit() 
{
   double ld_ret_0 = 0;
   for (int cnt = 0;  cnt < OrdersTotal(); cnt++) {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!=Symbol())           continue;
         if (OrderType()>1)                     continue;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
      else if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ("Func: CalculateProfit(), Select Order Error = ", GetLastError());
         break;
         }
      }
   return (ld_ret_0);
}
//===================================================================================
 
artmedia70:

Vielleicht sollte es so sein?

So fügen Sie den Code ein, damit er gelesen werden kann
 
eddy:
So geben Sie den Code ein, damit Sie ihn lesen können.
Ach, ja? Ist das der einzige Unterschied, den Sie feststellen konnten?
 
Hallo zusammen!

Gerade dieses Wochenende habe ich den Strategietester zum ersten Mal benutzt. Ich kann nicht herausfinden, wozu die Funktion "Optimierung" gut ist. Ich habe verschiedene optimierbare Parameter gewählt, aber das Gleichgewicht ändert sich nicht. Was soll damit im Wesentlichen optimiert werden und wie? Benutzt sie überhaupt jemand? :)
 
AndrejFX:
Hallo zusammen!

Gerade dieses Wochenende habe ich zum ersten Mal den Strategietester benutzt. Ich kann nicht herausfinden, wozu die Funktion "Optimierung" gut ist. Ich habe verschiedene optimierbare Parameter gewählt, aber das Gleichgewicht ändert sich nicht. Was soll damit im Wesentlichen optimiert werden und wie? Benutzt sie überhaupt jemand? :)

Versuchen Sie es zunächst mit F1.

Schauen Sie unter Benutzeroberfläche -> Tester nach.

Vielleicht wird https://www.mql5.com/ru/articles/mt4/tester helfen