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

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Break Even (http://www.expert-advisor.com/forum/showthread.php?t=2713)

enni01 26.02.13 13:20

Break Even
 
Hallo,

ich habe folgenden EA als Break Even laufen. Nun ist es aber leider so, das er ständig überwacht und wenn der TS los läuft, dann stellt dieser EA immer wieder auf den Break Even Wert zurück. Kann mir jemand sagen was ich da ändern muss?

Hier der Code:

//+------------------------------------------------------------------+
//| Breakeven EA v1.mq4 |
//| Copyright © 2011, tigpips |
//| tigpips@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, tigpips"
#property link "tigpips@gmail.com"

extern int Break_Even_After_X_Pips = 15;
extern bool useMagicNumber = false;
extern int Magic = 1234567;

int init()
{
if(Digits == 5)
{
Break_Even_After_X_Pips = Break_Even_After_X_Pips * 10;
}

return(0);
}

int deinit()
{

return(0);
}

int start()
{
AdjustStopLoss();
return(0);
}
//+------------------------------------------------------------------+

void AdjustStopLoss()
{
for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(useMagicNumber == true)
{
if (OrderMagicNumber()==Magic && OrderStopLoss() != OrderOpenPrice())
{
if(( OrderProfit() - OrderCommission() ) / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE ) >= Break_Even_After_X_Pips)
{
if(OrderType()==OP_SELL){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice(),OrderTakeProfit(),0,Red);
}
if(OrderType()==OP_BUY){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice(),OrderTakeProfit(),0,Blue);
}
}
}
}
else if(useMagicNumber == false)
{
if(OrderStopLoss() != OrderOpenPrice())
{
if(( OrderProfit() - OrderCommission() ) / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE ) >= Break_Even_After_X_Pips)
{
if(OrderType()==OP_SELL){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice(),OrderTakeProfit(),0,Red);
}
if(OrderType()==OP_BUY){
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOp enPrice(),OrderTakeProfit(),0,Blue);
}
}
}
}
}
}

Hoschie 26.02.13 22:03

Moin, ich hab das mal wie folgt gemacht:

double Profit,OCP,OT,average,Lots; --> global

void BreakEven()
{


for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//-----
if (OrderSymbol() == Symbol() && OrderType() == OP_BUY || OrderType() == OP_SELL)
{
Lots = Lots + OrderLots();
Profit = Profit + OrderProfit() + OrderCommission()+OrderSwap();
OCP = OrderClosePrice();
OT = OrderType();
}
}

if( Lots > 0 )
double pips = Profit/Lots/MarketInfo(Symbol(),MODE_TICKVALUE);
if (OT == OP_BUY)
{
average = OCP - (pips*Point);
}
if (OT == OP_SELL)
{
average = OCP + (pips*Point);
}
Comment ("Lots = "+ Lots,
"\n","Profit = ", Profit,
"\n","pips = ", pips,
"\n",DoubleToStr(OCP,5),
"\n","BreakEven is: ", DoubleToStr(average,5),
"\n");



//----
}

enni01 27.02.13 07:59

Danke!
Ich werds mal versuchen.

enni01 27.02.13 08:14

Läuft bei mir leider nicht, da er sagt das Variablen nicht definiert sind.
z.B.
Lots
Profit

Hoschie 27.02.13 08:28

Hoi,

die Variablen musst du global definieren
double gProfit,gOCP,OT,gAverage,gLots; --> global

Gruss,
Hoschie

enni01 27.02.13 10:15

Danke :)
aber jetzt teste ich ;)

enni01 27.02.13 11:20

Leider setzt er nicht automatisch den SL wenn der Breakeven erreicht wurde.

enni01 05.03.13 11:18

Kann mir vllt jemand sagen, an welcher stelle im EA der eigentliche Satz für das setzen des SL auf das Einstiegsniveau ist?

Hoschie 05.03.13 13:14

Zitat:

Zitat von enni01 (Beitrag 19576)
Kann mir vllt jemand sagen, an welcher stelle im EA der eigentliche Satz für das setzen des SL auf das Einstiegsniveau ist?

Hoi,

die Methode BreakEven()

liefert dir den BreakEven Kurs. Entweder setzt den S/L schon in dieser Methode BreakEven, oder später, wenn average > 0 ist, dann setze S/L.
if (OT == OP_BUY)
{
average = OCP - (pips*Point);
OrderModify(OrderTicket(),OrderOpenPrice(),average ,...
}
if (OT == OP_SELL)
{
average = OCP + (pips*Point);
OrderModify(OrderTicket(),OrderOpenPrice(),average ,...
}

Gruss,
Hoschie


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:47 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