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

 
extralifes:

Helfen Sie mir, den Code zu verstehen. Ich weiß nicht, wie ich den Zustand richtig beschreiben soll.

Hier ist ein Teil des EA.

if(total<1)

{

while (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);
}

while (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);

}
}
}
}
Eine Art von Gemüsegarten....
 
butthead:

Ich verstehe, dass der psychologische Faktor mich davon abhält... die Gier... die Angst, auch nur 300 Pfennige zu verlieren... Was soll ich tun?... Vergessen Sie, dass das echte Konto...


Was ist, wenn ich meine Einstellung ändere? Nicht "gewinnen wollen", sondern "nicht verlieren wollen".
 

Hilfe zum Verstehen!

Der Kern der Idee: Während der iMACD steigt, halten wir KAUFEN, sobald er fällt, schließen wir KAUFEN und eröffnen VERKAUFEN. Der Vergleich erfolgt anhand der letzten drei Werte, wobei der aktuelle Wert nicht berücksichtigt wird.

Der Code hat ein Problem: Er öffnet mehrere Aufträge bei iMACD-Werten +-0, wie ich sehe. Normalizedouble() ist nicht hilfreich.

Hier ist der Code:

int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
 
extralifes:

Helfen Sie mir, den Code zu verstehen. Ich weiß nicht, wie ich den Zustand richtig beschreiben soll.

Hier ist ein Teil des Expert Advisors.


total=OrdersTotal();

if(total<1)

{

while (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);
}

while (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);

}
}
}
}
Können Sie mir sagen, wie man es richtig macht?


Funktioniert es nicht so?

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);

  }
 

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 dies durch while oder bool geschehen? Ich habe einen totalen Engpass bei der Programmierung. Ich verstehe die logische Kette, aber meine Hände sind zu langsam, um sie in Code umzusetzen.

 
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.

offen, bis das Geld ausgeht? oder einmal pro Bar? oder einmal pro Tick?
 

Hallo! Ich möchte nicht von StopOut erwischt werden (und tue es manchmal auch). Ich beschloss, das Los mit einem Wert zu begrenzen, der den StopOut im schlimmsten Fall nicht auffangen würde. Ich habe lange Zeit durch Versuch und Irrtum gearbeitet. Vielleicht hat jemand eine Lösung?

Eingangsdaten:

- Währungspaar - nicht unbedingt EURUSD

- Preis (Kauf-/Verkaufspreis)

- angegebener StopLoss in Punkten (es wird davon ausgegangen, dass im schlimmsten Fall kein StopOut erfolgt, selbst wenn das StopLoss-Niveau erreicht wird)

- Wert der Partie festlegen

- Alle anderen Werte sollten mit Hilfe der MT4-Funktionen ermittelt werden: Größe von 1 Lot, Leverage, Cross Rate.

Ein Code wäre wünschenswert.

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

 
Cmu4:

Hilfe zum Verstehen!

Der Kern der Idee: Während der iMACD steigt, halten wir KAUFEN, sobald er fällt, schließen wir KAUFEN und eröffnen VERKAUFEN. Der Vergleich erfolgt anhand der letzten drei Werte, wobei der aktuelle Wert nicht berücksichtigt wird.

Der Code hat ein Problem: Er öffnet mehrere Aufträge bei iMACD-Werten +-0, wie ich sehe. Normalizedouble() ist nicht hilfreich.

Hier ist der Code:


int start()
  {

double MA1=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,1), 
       MA2=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,2),
       MA3=iMACD(NULL,0,5,34,1,PRICE_CLOSE, MODE_MAIN,3);
       
       
       
if (MA1>MA2 &&  MA2>MA3 && Napr==1)
    {Closeall();
    Napr=0;
    OrderSend (Symbol(), OP_BUY, Lot, Ask, 5, 0,0);}

if (MA1<MA2 && MA2<MA3 && Napr==0)
    {Closeall();
    Napr=1;
    OrderSend (Symbol(), OP_SELL, Lot, Bid, 5, 0,0);}



   return(0);
  }
Vielleicht war das das Problem
 
ilunga:
offen, bis das Geld ausgeht? oder einmal pro Bar? oder einmal pro Tick?

Die Bedingung wird bei jedem neuen Takt überprüft. In diesem Fall ist der Zeitrahmen stündlich. Dieser Zustand wird zu Beginn jeder Stunde überprüft.
 
Vinin:

Vielleicht war dies das Problem

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 tester, Expert Advisor für tester im Trailer:

Dateien:
Grund der Beschwerde: