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

 
Cmu4:

Nein... Ich habe getan, was Sie vorgeschlagen haben - es bleibt das Gleiche.

Außerdem habe ich den Code geändert, indem ich ihn nach Bedingungen in einen öffnenden und einen schließenden Block unterteilt habe. Es ist alles das Gleiche. Ich weiß nicht, was ich jetzt tun soll.

Hier ist ein Screenshot vom Tester, EA für den Tester ist im Trailer:


Mit einer offenen Positionskontrolle könnte man folgendermaßen vorgehen
Dateien:
 
Vinin:

Das könnte so etwas sein, mit Kontrolle der offenen Positionen.


Auch in diese Richtung gedacht. Aber ich bin an dem Fehler selbst interessiert. Wo ist sie?

p.s. Danke für die Ergänzung des Codes! Beim Kompilieren beschwert es sich über einen undefinierten order_type in der Closeall-Funktion.

 
Cmu4:


Auch in diese Richtung gedacht. Aber ich bin an dem Fehler selbst interessiert. Wo ist sie?

p.s. Danke für die Ergänzung des Codes! Beim Kompilieren flucht es über undefinierte order_type, in der Closeall Funktion.


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

Nein... Ich habe getan, was Sie vorgeschlagen haben - es bleibt das Gleiche.

Außerdem habe ich den Code geändert, indem ich ihn nach Bedingungen in einen öffnenden und einen schließenden Block unterteilt habe. Es ist alles das Gleiche. Ich weiß nicht, was ich jetzt tun soll.

Hier ist ein Screenshot von einem Tester, der Expert Advisor ist im Trailer:

Ich muss wissen: Werden Positionen in einer Reihe eröffnet? Kaufen, Verkaufen, Kaufen, Verkaufen usw. oder nacheinander, z. B. Kaufen.

Ich denke, Sie haben nacheinander Kauf- und Verkaufspositionen eröffnet.

Der Grund: Die zu vergleichenden MACDs liegen sehr nahe beieinander und wechseln schnell die Plätze (größer ist kleiner). Daher wird zuerst die eine und dann die andere Bedingung erfüllt.

Lösung:

if (MA1-MA2 > 0.0001 &&  MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
extralifes:

kein Durchkommen, wenn es nicht funktioniert.

Es sollte, solange die Bedingung (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 korrekt ist, nur eine Verkaufsorder eröffnen, sofern iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

Umgekehrt ist es dasselbe.

Kann es durch while oder bool geschrieben werden? Ich bin mit dem Programmieren völlig überfordert. Ich verstehe die logische Kette, aber meine Hände sind zu langsam, um sie in Code umzusetzen.


Das ist also nicht das Problem... alles sollte funktionieren, wenn... Es funktioniert so - solange (Ihre gleiche while ) die Bedingung (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 - erfüllt ist und RSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7), dann öffnen wir nur Gewinn...

Sie brauchen hier kein bool - warum sollten Sie sich mit Flaggen befassen, wenn alles klar ist, dass wir, wenn alle diese Bedingungen erfüllt sind, entweder Kauf- oder Verkaufsaufträge eröffnen?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }

Schauen Sie noch einmal genau hin.

Suchen Sie den Fehler an einer anderen Stelle des Codes. Sie schreiben "es funktioniert nicht mit if" - erklären Sie es genauer - was steht im "log"?

 
ikatsko:

Hallo! Ich möchte nicht auf einen StopOut stoßen (und tue es manchmal auch). Ich habe beschlossen, die Menge auf einen Wert zu begrenzen, der StopOut unter den schlimmsten Bedingungen nicht "erwischt". Ich habe lange Zeit durch Versuch und Irrtum gearbeitet. Vielleicht hat jemand eine Lösung?

Ursprüngliche Daten:

- Währungspaar - nicht unbedingt EURUSD

- Preis (Kauf-/Verkaufspreis)

- einen festgelegten StopLoss in Punkten (es wird davon ausgegangen, dass im schlimmsten Fall kein StopOut erfolgt, selbst wenn der StopLoss-Wert erreicht wird)

- angegebener Wert des Loses

- Andere Werte sollten mit den MT4-Funktionen ausgefüllt werden: Größe 1 Lot, Leverage, Cross Rate.

Vorzugsweise ein Code.

Theoretisch verstehe ich, was erforderlich ist: Saldo minus möglicher Verlust auf StopLoss-Niveau geteilt durch Marge. Und dieser Wert sollte größer sein als der StopOut (in Prozent).

Etwa so

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

Die Anzahl der Lose darf nicht höher sein als die Anzahl der LoseShortNaVSE

SL ---- ist ein möglicher Verlust für Ihre eröffnete Position.

Und die Maklerunternehmen haben ihre eigene Vorstellung von möglichen Verlusten.

Deshalb müssen wir die Maximalzahl von Ihnen oder von der Maklerfirma nehmen. Zum Beispiel hat das Dealer Center für das EURUSD-Paar im Moment einen möglichen Verlust SL = 26.

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
Gibt es noch andere Möglichkeiten?
 
rlx:


Und auch die Maklerfirmen haben ihre eigene Sicht auf den möglichen Verlust.

Deshalb sollten Sie so viel wie möglich von Ihrem Verlust oder dem Ihres Maklerunternehmens übernehmen. Zum Beispiel hat die Maklerfirma im Moment einen möglichen Verlust SL = 26 für EURUSD.

Vielleicht gibt es auch andere Varianten?


So lässt sich diese Ansicht des DC berechnen.

Dies ist jedoch eher für kurzfristige Händler von Bedeutung.

 

D.h. wenn Sie z.B. einen stopLoss von 5 Punkten haben, dann wird natürlich die Anzahl der offenen Lots als Lot berechnet.

Aber eine solche Stelle zu eröffnen, wird nicht funktionieren, weil Maklerfirmen ihr eigenes RiskManagement-System haben.

 
rlx:


Die Frage ist nur, wie diese Ansicht des DC berechnet werden kann.

Dies ist jedoch eher für Kurzzeitler von Bedeutung.


Guten Tag! Bitte um Hilfe. Ich brauche ein Skript, das beim manuellen Handel automatisch Stop und Profit setzt. Glauben Sie, dass es möglich ist, und wenn es existiert, geben Sie mir bitte einen Link.
 
Cmu4:

Nein... Ich habe getan, was Sie vorgeschlagen haben - es bleibt das Gleiche.

Außerdem habe ich den Code geändert, indem ich ihn nach Bedingungen in einen öffnenden und einen schließenden Block unterteilt habe. Es ist alles das Gleiche. Ich weiß nicht, was ich jetzt tun soll.

Hier ist ein Screenshot vom Tester, EA für den Tester ist im Trailer:

Solange die MAKDak-Bedingung erfüllt ist, werden die Aufträge auch bei jedem Tick in Batches geöffnet.

Zu den Bedingungen hinzufügen
Für Kaufpositionen: Wenn es KEINEN Marktkaufauftrag gibt, dann öffnen Sie ihn...
Für Verkaufspositionen: Wenn es KEINEN Marktverkaufsauftrag gibt, öffnen Sie ihn...

Und schon ist das Problem gelöst.