Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Expert-Advisors (http://www.expert-advisor.com/forum/forumdisplay.php?f=25)
-   -   Terminlichen Ausstieg (http://www.expert-advisor.com/forum/showthread.php?t=5948)

Rehpo22 20.12.17 19:42

Terminlichen Ausstieg
 
Hallo Liebes Forum,

ich suche für meinen MT4 EA folgendes.

Er soll bitte jeden Freitag, zu einer bestimmten Uhrzeit alle offenen Positionen schließen, egal ob diese im plus oder minus sind.

Ziel ist es, die Schwankungen zwischen freitag und Montag zu verhindern.

Über eure Hilfe wäre ich sehr dankbar.


GRuß

Its me:)

JungyOC 07.02.18 15:33

folgendes sollte dir helfen:

mit der funktion kannst du im String Format die Uhrzeit übergeben z.B. "21:00:00" liefert dir true zurück wenn es Freitag ist und die Uhrzeit erreicht

bool CheckFridayCloseTime(string sCloseTime)
{
bool bBack=false;
datetime TC=TimeCurrent();
datetime tClose=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE )+" "+sCloseTime);


if(DayOfWeek()==5 && TC>tClose)
{
bBack=true;
} else {
bBack=false;
}
return(bBack);
}


danach kannst du klassisch alle orders schliessen, wenn es mehrere sind gerne refreshrates nutzen, damit du einen neuen kurz bekommst, anbei ein Beispiel für BUY Trades, kann natürlich auf alle angewendet werden.

bool CloseAllBuyV2(int MagicNumber,int Slippage)
{
bool ticket;

for(int i=0; i<OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) //SELECT_BY_POS
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
{
ticket=OrderClose(OrderTicket(),OrderLots(),OrderC losePrice(),Slippage,Black);
if(ticket==false)
{
Print("Error on Orderexecution CloseAllBuy: "+IntegerToString(GetLastError()));

while(RefreshRates()==false) Sleep(1);
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Sl ippage,Black);

if(ticket==false)
{
Print("Error on Orderexecution CloseAllBuy Try2: "+IntegerToString(GetLastError()));

while(RefreshRates()==false) Sleep(1);
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Sl ippage+1,Black);
if(ticket==false)
{
Print("Error on Orderexecution CloseAllBuy Try3: "+IntegerToString(GetLastError()));

while(RefreshRates()==false) Sleep(1);
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Sl ippage+2,Black);

}

}

}
}

return true;
}

hoffe das hilft dir weiter...
Beste Grüße
Christian

traderdoc 08.02.18 14:02

Ok, könnte man etwas straffen, v.a. den Teil des wiederholten Schließens per while-Schleife mit Zähler i, um die Slippage zu erhöhen, aber das Entscheidende liegt in der Schleifenzeile der Orderzählung.

Wenn nur eine! Order geschlossen werden soll, ist das so ok. Man sollte sich aber gleich angewöhnen, die Zeile rückwärtslesend zu schreiben:

for (int i = OrdersTotal()-1; i >= 0; i--)

dann tritt auch kein Fehler auf.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:40 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum