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: 4256
Beiträge: 39367
Benutzer: 6.577
Aktive Benutzer: 257
Links: 80
Wir begrüßen unseren neuesten Benutzer: festus
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 8 Stunden
- festus
vor 2 Tagen
- lovetradin...
vor 2 Tagen
- schwarz
vor 2 Tagen
- viethommy
vor 2 Tagen
- earasa

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 123
Gesamt: 123
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By daybyter
Antwort
 
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!!
Mit Zitat antworten
  #2 (permalink)  
Alt 25.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 58
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Der Code für Deine Hilfsfunktionen fehlt ja. Funktionieren die denn?
Mit Zitat antworten
  #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);
}
Mit Zitat antworten
  #4 (permalink)  
Alt 25.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 58
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?
Mit Zitat antworten
  #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.
Mit Zitat antworten
  #6 (permalink)  
Alt 25.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 58
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.
Mit Zitat antworten
  #7 (permalink)  
Alt 27.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 58
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.
Mit Zitat antworten
  #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 ?
Mit Zitat antworten
  #9 (permalink)  
Alt 27.05.19
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 58
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.
Mit Zitat antworten
  #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.
Mit Zitat antworten
Antwort

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 06:11 Uhr.


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