Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4444
Beiträge: 40483
Benutzer: 6.835
Aktive Benutzer: 268
Links: 80
Wir begrüßen unseren neuesten Benutzer: zipperpetra009
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einer Stunde
- zipperpetr...
vor 5 Stunden
- BlablaKar
vor 23 Stunden
- viewer
vor 2 Tagen
- burkijan
vor 3 Tagen
- Chidiroglo...

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 106
Gesamt: 108
Team: 0
Team:  
Benutzer:  AVT, Indikator-Trading
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By daybyter
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 24.05.19
Neues Mitglied
 
Registriert seit: May 2019
Beiträge: 9
Karacho befindet sich auf einem aufstrebenden Ast
Smile 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!!
  #2 (permalink)  
Alt 25.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 74
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Der Code für Deine Hilfsfunktionen fehlt ja. Funktionieren die denn?
  #3 (permalink)  
Alt 25.05.19
Neues Mitglied
 
Registriert seit: May 2019
Beiträge: 9
Karacho befindet sich auf einem aufstrebenden Ast
Standard

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);
}
  #4 (permalink)  
Alt 25.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 74
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Du eröffnest BUYSTOP _und_ SELLSTOP Orders. Deine Zählfunktion zählt aber nur die SELLSTOP Orders. Warum ignorierst Du da die BUYSTOP Orders?
  #5 (permalink)  
Alt 25.05.19
Neues Mitglied
 
Registriert seit: May 2019
Beiträge: 9
Karacho befindet sich auf einem aufstrebenden Ast
Standard

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.
  #6 (permalink)  
Alt 25.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 74
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Wenn Du magst, schick mir mal den kompletten Code an arueckert67 <at> t-online.de

Dann kann ich das im Tester debuggen.
  #7 (permalink)  
Alt 27.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 74
daybyter befindet sich auf einem aufstrebenden Ast
Standard

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.
  #8 (permalink)  
Alt 27.05.19
Neues Mitglied
 
Registriert seit: May 2019
Beiträge: 9
Karacho befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

ich bräuchte also eine Funktion, welche auch die ausgelösten Orders zählt. Wie kann ich das am besten machen ?
  #9 (permalink)  
Alt 27.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 74
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Schreib doch in die Zählfunktion:

if(OrderSymbol() == Symbol() && ((OrderType() == OP_SELLSTOP) || (OrderType()==OP_SELL)) && OrderMagicNumber()==MagicNumber)
Karacho likes this.
  #10 (permalink)  
Alt 27.05.19
Neues Mitglied
 
Registriert seit: May 2019
Beiträge: 9
Karacho befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

ich werde es später ausprobieren. Vielen Dank für deine Hilfe.
Thema geschlossen

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 18:39 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------