Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43261
Benutzer: 7.224
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Tagen
- Sundaytrad...
vor 5 Tagen
- TS_6
vor einer Woche
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 10.03.17
Neues Mitglied
 
Registriert seit: Mar 2016
Beiträge: 11
Bw-Man befindet sich auf einem aufstrebenden Ast
Standard

das sieht dann wie aus ?

hier ist meine Zeile zum kaufen:
//Long Signale umsetzen
if(LongSignal == true)
{
LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,0,Ask+ Minilots*Point,"LONG",MagicNummer,0,Green);
}

Wo soll ich da hinten was dran machen ?
  #12 (permalink)  
Alt 10.03.17
Neues Mitglied
 
Registriert seit: Mar 2017
Beiträge: 3
limit befindet sich auf einem aufstrebenden Ast
Standard

Hier wird dir geholfen: https://book.mql4.com/functions/datetime
Denke es müsste dann so aussehen
if(LongSignal == true || Time>exitTime)
{
Code
}
  #13 (permalink)  
Alt 11.03.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 18
KeepItEasy befindet sich auf einem aufstrebenden Ast
Standard

Du willst ja eine Zeitfunktion benutzen, um die Order zu schliessen. Soweit ich mich erinnere, geben diese immer die Anzahl von Sekunden seit dem 1.1.1970 zurück, so dass Du z.B. die Differenz von einem Tag zur OrderOpenTime in Sekunden umrechnen musst.

Die Funktion müsste dann in etwa so aussehen:

if(TimeCurrent() > OrderOpenTime() + 60 * 60 * 24)

OrderClose(........);

Vorher musst Du die zu schliessende Order natürlich noch selektieren
über die bekannte for-Schleife.
  #14 (permalink)  
Alt 13.03.17
Neues Mitglied
 
Registriert seit: Mar 2016
Beiträge: 11
Bw-Man befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für die Zeile. Habe die
if(TimeCurrent() > OrderOpenTime() + 60 * 60 * 24)
Eingebaut.

Die Funktioniert, aber irgendwie ist da noch ein seltsamer Fehler drin.
Wenn eine offene Order nach 24 Stunden geschlossen wurde. Dann wird immer die nächste Order die geöffnet wird, gleich wieder geschlossen.
Aber da nach die Order wird wieder normal laufen bis zum TP.

Das Ergebnis als Bild ist im Anhang.

Seltsam Oder ?
Angehängte Grafiken
Dateityp: jpg Closefehler.jpg (104,0 KB, 6x aufgerufen)
  #15 (permalink)  
Alt 13.03.17
Neues Mitglied
 
Registriert seit: Mar 2016
Beiträge: 11
Bw-Man befindet sich auf einem aufstrebenden Ast
Standard

Am Code stimmt aber was auch nicht ganz. Der Kompilierer meckert bei: Orderclose und OrderSelect.

return value of 'OrderSelect' should be checked test.mq4
return value of 'OrderClose' should be checked test.mq4


Hier der Code:

//+-----------------------------------------------------------------+
//|Prüfen ob Orders oder Positionen geöffnet sind
int offeneorders=0;
int anzahlorders=OrdersTotal();

for(zaehler=0;zaehler<anzahlorders;zaehler++) // for schleife
{
OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES); // MODE_TRADES = offene und aufgegebene Orders
// check offene Positionen, Symbol & MagicNumber
if (OrderSymbol()== Symbol())
{
if (OrderMagicNumber()==MagicNummer)
{
offeneorders++;
}
} // OrderSymbol
} // for schleife


//+-----------------------------------------------------------------+
//|Orders aufgeben

if(offeneorders == 0 )
{
double Minilots = MarketInfo (Symbol() , MODE_STOPLEVEL); //Minimum Takeprofit

//Long Signale umsetzen
if(LongSignal == true)
{
LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,0,Ask+ Minilots*Point,"LONG",MagicNummer,0,Green);
}

//Short Signale umsetzen
if(ShortSignal == true)
{
ShortOrder = OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,0,Bid-Minilots*Point,"SHORT",MagicNummer,0,Red);
}
}
//-------
//offene Order nach 24 Stunden schließen
if(TimeCurrent()>OrderOpenTime()+60*60*24)

for(zaehler=0;zaehler<OrdersTotal();zaehler++)
{
if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES)= =false) break;

//---- check order type
if(OrderType()==OP_BUY && OrderMagicNumber() == MagicNummer && OrderSymbol()== Symbol() )
{
if(Close[1]<LongOrder) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
Print("Long wird geschlossen");
break;
}
if(OrderType()==OP_SELL)
{
if(Close[1]>ShortOrder) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Print("Short wird geschlossen");
break;
}
}



return(0);
}
  #16 (permalink)  
Alt 13.03.17
Mitglied
 
Registriert seit: Jul 2012
Beiträge: 169
JJ-FX befindet sich auf einem aufstrebenden Ast
Standard

Die Profis mögen mich korrigieren, aber für mich sieht es so aus, als würdest Du die 24-Stunden-Prüfung zwischen den beiden For-Schleifen und damit immer auf Basis der letzten durch die 1. Schleife selektierten Order durchführen.
__________________
Broker Rabatte
  #17 (permalink)  
Alt 13.03.17
Neues Mitglied
 
Registriert seit: Mar 2016
Beiträge: 11
Bw-Man befindet sich auf einem aufstrebenden Ast
Standard

Das kann gut sein. Ich wüßte jetzt aber nicht, wie das richtig aussehen würde
  #18 (permalink)  
Alt 13.03.17
Mitglied
 
Registriert seit: Jul 2012
Beiträge: 169
JJ-FX befindet sich auf einem aufstrebenden Ast
Standard

Die Prüfung hinter das OrderSelect() der 2. Schleife schieben und damit für jede offene Order prüfen, ob diese älter als 24 Stunden ist.
__________________
Broker Rabatte
  #19 (permalink)  
Alt 14.03.17
Neues Mitglied
 
Registriert seit: Mar 2016
Beiträge: 11
Bw-Man befindet sich auf einem aufstrebenden Ast
Standard

der Kompilierer gibt immer noch die selben Warnungen raus.
Habe den Orderselect nun nach hinten gepackt. Ja bei den buy orders, gibt es nun keine sofortigen kauf/verkauf mehr. Aber nun hängt er bei dem sell orders. Ich sehe zwar im Journal, das er es schließen will mit "print", macht es aber nicht. Und auch keine Fehler Meldung.


//+-----------------------------------------------------------------+
//|Prüfen ob Orders oder Positionen geöffnet sind
int offeneorders=0;
int anzahlorders=OrdersTotal();

for(zaehler=0;zaehler<anzahlorders;zaehler++) // for schleife
{
OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES); // MODE_TRADES = offene und aufgegebene Orders
// check offene Positionen, Symbol & MagicNumber
if (OrderSymbol()== Symbol())
{
if (OrderMagicNumber()==MagicNummer)
{
offeneorders++;
}
} // OrderSymbol
} // for schleife


//+-----------------------------------------------------------------+
//|Orders aufgeben

if(offeneorders == 0 )
{
double Minilots = MarketInfo (Symbol() , MODE_STOPLEVEL); //Minimum Takeprofit

//Long Signale umsetzen
if(LongSignal == true)
{
LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,2,0,Ask+ Minilots*Point,"LONG",MagicNummer,0,Green);
}

//Short Signale umsetzen
if(ShortSignal == true)
{
ShortOrder = OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,2,0,Bid-Minilots*Point,"SHORT",MagicNummer,0,Red);
}
}
//-------
//offene Order nach 24 Stunden schließen
if(TimeCurrent()>OrderOpenTime()+60*60*24)

for(zaehler=0;zaehler<OrdersTotal();zaehler++)
{


//---- check order type
if(OrderType()==OP_BUY && OrderMagicNumber() == MagicNummer && OrderSymbol()== Symbol() )
{
if(Close[1]<LongOrder) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
Print("Long wird geschlossen");
break;
}
if(OrderType()==OP_SELL)
{
if(Close[1]>ShortOrder) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Print("Short wird geschlossen");
break;
}
if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES)= =false) break;
}



return(0);
}
  #20 (permalink)  
Alt 14.03.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 18
KeepItEasy befindet sich auf einem aufstrebenden Ast
Standard

//offene Order nach 24 Stunden schließen

for(zaehler=0;zaehler<OrdersTotal();zaehler++)
{
OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY && OrderMagicNumber() == MagicNummer &&
TimeCurrent()>OrderOpenTime()+60*60*24)
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

if(OrderType()==OP_SELL && OrderMagicNumber() == MagicNummer &&
TimeCurrent()>OrderOpenTime()+60*60*24)
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}

So ungefähr (nicht getestet)! Es ist hier eigentlich überflüssig, nach Buy- und Sell-Order zu unterscheiden, aber Du kannst ja den übrigen Code "dazwischenfummeln". (Ich habe noch keinen Account gesehen, auf dem es interessiert hätte, ob Du mit Bid- oder Ask-Kurs und/oder Slippage schliesst. Ich meine, mal irgendwo gelesen zu haben, das das schlicht ignoriert und die Order einfach geschlossen wird. Wer da Genaueres weiss, kann es aber gerne posten).

Ich würde allerdings für jede Schließungsart eine eigene Funktion bzw. Schleife verwenden, damit man noch irgendwie die Übersicht behält.
Thema geschlossen

Lesezeichen

Stichworte
mql4, order schließen, order uhrzeit schließen, programmierung, programmierung metatrader, uhrzeit, uhrzeit schließen, zeit


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 12:26 Uhr.





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