Möchte gerne helfen aber du müsstest schon etwas code zeigen. .ex5 Dateien sind compelierte dateien
Das ist elementar um dabei helfen zu können.
Zu beachten ist dabei das der MT5 in der normalen version immer nur eine Position eines Symbols halten kann.
Die kann dann mit hilfe des Symbols geschlossen werden.
In der neuen version mit Hedge Modus kehrt Metaquotes wieder zum bekannten MT4 System zurück
Dann musst du die Position über das Ticket der Position schließen.
Da du ja pro Symbol gleichzeitig eine Long und eine Short Position gehalten werden kann
Gruß Christian
Hoffentlich ist er gut zu lesen aber hier ist der Code:
//+------------------------------------------------------------------+
//| TestAusgabe.mq5 |
//| Arthur S. |
//+------------------------------------------------------------------+
#property copyright "Arthur S."
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade m_Trade;
double Trailing_Stop,Trailing_Stop_Wert=0;
double bid;
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
bool Buy_Opened;
bool Sell_Opened;
if(PositionSelect(_Symbol)==true)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_Opened=true;
if(bid>Trailing_Stop_Wert)
{
Trailing_Stop_Wert=bid;
Trailing_Stop=Trailing_Stop_Wert-0.00015;
}
long cid=ChartID();
if(!ObjectCreate(cid,"test",OBJ_HLINE,0,0,Trailing_Stop) || GetLastError()!=0)
Print("Error creating object: ",GetLastError());
else
ChartRedraw(cid);
}
else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_Opened=true;
}
}
if(PositionSelect(_Symbol)==false)
{
m_Trade.Buy(0.1,_Symbol);
if(bid>Trailing_Stop)
{
Trailing_Stop_Wert=bid;
Trailing_Stop=Trailing_Stop_Wert-0.00015;
}
if(Trailing_Stop>=bid)
{
m_Trade.PositionClose(_Symbol);
}
long cid=ChartID();
ResetLastError();
if(!ObjectCreate(cid,"test",OBJ_HLINE,0,0,Trailing_Stop) || GetLastError()!=0)
Print("Error creating object: ",GetLastError());
else
ChartRedraw(cid);
}
}
Nutze bitte immer die SRC Funktion zum posten von Code. Ist oben im Editor beim Forum.
ich mache das mal dann ist der Code besser zu lesen.
Noch mal zur Frage von dir . Problem ist das die Position nicht geschlossen wird richtig ?
//+------------------------------------------------------------------+ //| TestAusgabe.mq5 | //| Arthur S. | //+------------------------------------------------------------------+ #property copyright "Arthur S." #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ #include <Trade\Trade.mqh> CTrade m_Trade; double Trailing_Stop,Trailing_Stop_Wert=0; double bid; int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); bool Buy_Opened; bool Sell_Opened; if(PositionSelect(_Symbol)==true) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { Buy_Opened=true; if(bid>Trailing_Stop_Wert) { Trailing_Stop_Wert=bid; Trailing_Stop=Trailing_Stop_Wert-0.00015; } long cid=ChartID(); ResetLastError(); if(!ObjectCreate(cid,"test",OBJ_HLINE,0,0,Trailing_Stop) || GetLastError()!=0) Print("Error creating object: ",GetLastError()); else ChartRedraw(cid); } else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { Sell_Opened=true; } } if(PositionSelect(_Symbol)==false) { m_Trade.Buy(0.1,_Symbol); if(bid>Trailing_Stop) { Trailing_Stop_Wert=bid; Trailing_Stop=Trailing_Stop_Wert-0.00015; } if(Trailing_Stop>=bid) { m_Trade.PositionClose(_Symbol); } long cid=ChartID(); ResetLastError(); if(!ObjectCreate(cid,"test",OBJ_HLINE,0,0,Trailing_Stop) || GetLastError()!=0) Print("Error creating object: ",GetLastError()); else ChartRedraw(cid); } }
So könnte es aussehen . (ungetestet)
if(PositionSelect(_Symbol)==true && Trailing_Stop>=bid){ m_Trade.PositionClose(_Symbol);
}
Was auch nicht funktioniert ist das der Trailingstop in der Anweisung "Wenn keine Position Offen ist" steht.
Hallo,
... Leider kann ich keine Funktion (z.B. m_Trade.PositionClose(_Symbol);) ..
Es gibt so viel code in der CodeBase! Such Dir da oder über google etwas und kopiere Dir das was Du brauchst in Deinen EA.
Das ist schneller, hat weniger Fehler und lernen kann man auch viel!
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo,
mir ist es gelungen einen Trailing Stop zu programmieren. Leider kann ich keine Funktion (z.B. m_Trade.PositionClose(_Symbol);) einbauen, da ich nicht weis wo der Fehler liegt, also wie ich eine offene Position wieder schließen kann.
Danke schonmal im Vorraus.