|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Keine 2 offenen Positionen
Hallo,
der nachfolgende Code erstellt bei jeder neuen Kerze und wenn nicht schon eine offene Order vorhanden ist, zwischen 12 Uhr und 15 Uhr eine Pending - Verkaufen - Order. Wenn eine Order z.B. um 12.40 Uhr ausgeführt wird, soll er jedoch keine weitere Position mehr eröffnen. Derzeit macht er das aber. Wie kann ich das programmieren, dass er nach einer eröffneten Position keine weitere eröffnet ? void OnTick() { ... if(ZaehleStopVerkaufOrdern() == 0 && NeueKerze() && Hour() >= 12 && Hour() <= 15 ) { datetime expiration = Time[0]+60*60; EroeffneStopOrder(Symbol(),Positionsgroesse, Einstiegskurs2, "verkauf", SL2, TP, expiration); } } Funktionen: ZaehleStopVerkaufOrdern(...)... NeueKerze()... EroeffneStopOrder(...)... Ich würde mich sehr freuen, Hilfe zu bekommen und Danke im Voraus!! |
|
|||
Der Code für Deine Hilfsfunktionen fehlt ja. Funktionieren die denn?
|
|
|||
Hallo,
hier ist noch der Code der drei Funktionen. Es wird keine Fehlermeldung angezeigt. int ZaehleStopVerkaufOrdern () { int OrderZaehler=0; for(int Zaehler = 0; Zaehler <= OrdersTotal()-1; Zaehler++) { if(OrderSelect(Zaehler,SELECT_BY_POS) == true) { if(OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP && OrderMagicNumber()==MagicNumber) OrderZaehler++; } else { Print("OrderSelect ergab den FehlerCode: ",GetLastError()); } } return(OrderZaehler); } bool NeueKerze() { bool IstNeueKerze = false; if(Zeitstempel != Time[0]) { Zeitstempel = Time[0]; IstNeueKerze = true; } else IstNeueKerze = false; return(IstNeueKerze); } int EroeffneStopOrder (string markt, double Lots, double Eroeffnungskurs, string Handelsrichtung, double StopLoss, double TakeProfit, datetime expire) { if(Handelsrichtung == "kauf") { while(IsTradeContextBusy()) Sleep(10); Ticketnummer = OrderSend(markt,OP_BUYSTOP, Lots, Eroeffnungskurs, Slipp, StopLoss, TakeProfit, "Stop-Kauf-Order",MagicNumber,expire,Green); if(Ticketnummer == -1) { FehlerCode = GetLastError(); string FehlerBeschreibung = ErrorDescription(FehlerCode); string FehlerAusgabe = StringConcatenate("Eröffnung Stop-Kauf-Order:",FehlerCode,": ",FehlerBeschreibung); Print(FehlerAusgabe); } } if(Handelsrichtung == "verkauf") { while(IsTradeContextBusy()) Sleep(10); Ticketnummer = OrderSend(markt,OP_SELLSTOP, Lots, Eroeffnungskurs, Slipp, StopLoss, TakeProfit, "Stop-Verkauf-Order", MagicNumber,expire,Red); if(Ticketnummer == -1) { FehlerCode = GetLastError(); string FehlerBeschreibung = ErrorDescription(FehlerCode); string FehlerAusgabe = StringConcatenate("Eröffnung Stop-Verkauf-Order:",FehlerCode,": ",FehlerBeschreibung); Print(FehlerAusgabe); } } return(Ticketnummer); } |
|
|||
Du eröffnest BUYSTOP _und_ SELLSTOP Orders. Deine Zählfunktion zählt aber nur die SELLSTOP Orders. Warum ignorierst Du da die BUYSTOP Orders?
|
|
|||
Hallo,
es gibt auch eine Zählfunktion, welche die BUYSTOP Orders zählt. Da der Code bei void OnTick() ... aber nur SELLSTOP Orders generiert, ist die Zählfunktion für BUYSTOPS irrelevant, so dachte ich. Der Backtest führt nur SELLSTOP Orders aus. Hier ist noch die Zählfunktion für die BUYSTOP Orders: int ZaehleStopKaufOrdern() { int OrderZaehler=0; for(int Zaehler = 0; Zaehler <= OrdersTotal()-1; Zaehler++) { if(OrderSelect(Zaehler,SELECT_BY_POS) == true) { if(OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP && OrderMagicNumber()==MagicNumber) OrderZaehler++; } else { Print("OrderSelect ergab den FehlerCode: ",GetLastError()); } } return(OrderZaehler); } Ich würde mich sehr freuen, Hilfe zu bekommen. |
|
|||
Wenn Du magst, schick mir mal den kompletten Code an arueckert67 <at> t-online.de
Dann kann ich das im Tester debuggen. |
|
|||
Mit den richtigen Einstellungen tut der Code hier. Allerdings zählt die Zählfunktion ja nur die Stop Orders. Im Moment geht eine Stop Order auf, wird ausgelöst und wird zur Sell Order. Dann wird sie nicht mehr gezählt und die nächste Stop Order wird eröffnet. Die wird ausgelöst, nicht mehr gezählt und die nächste Stop Order wird aufgemacht. So kommst Du halt zu vielen Sell Orders.
|
|
|||
Hallo,
ich bräuchte also eine Funktion, welche auch die ausgelösten Orders zählt. Wie kann ich das am besten machen ? |
|
|||
Schreib doch in die Zählfunktion:
if(OrderSymbol() == Symbol() && ((OrderType() == OP_SELLSTOP) || (OrderType()==OP_SELL)) && OrderMagicNumber()==MagicNumber) |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|