Bonjour a tous,
Au vu que je ne comprend rien en programmations Mql4, je souhaiterai Qu’une personne puise m'aidez a améliorer un Ea bassé sur supertrend
Je souhaiterai simplement rajouter 2 choses
1- Un trailing stop avec des paliers
2-Que l'ea commence a prendre des position entre une tranche horaire. (ouverture 6h et arrêts de prendre des positions 12h)
Voici le code de l'ea
Merci par avance
Au vu que je ne comprend rien en programmations Mql4, je souhaiterai Qu’une personne puise m'aidez a améliorer un Ea bassé sur supertrend
Je souhaiterai simplement rajouter 2 choses
1- Un trailing stop avec des paliers
2-Que l'ea commence a prendre des position entre une tranche horaire. (ouverture 6h et arrêts de prendre des positions 12h)
Voici le code de l'ea
Code
extern string _tmp0_=" --- Trade settings ---";
extern double TotalLots=0.3;
extern int StopLoss=30;
extern int TakeProfit1=0;
extern int MovetoBE=0;
extern int MagicNumber = 623456;
extern string EA_Comments="SuperTrend EA";
extern string _tmp1_=" --- Supertrend settings ---";
extern int Nbr_Period1 = 106;
extern int Nbr_Period2 = 106;
extern int Nbr_Period3 = 106;
extern int Nbr_Period4 = 106;
extern double Multiplier = 2.7;
double points;
int per = 0;
double green[4], prevgreen[4], red[4], prevred[4];
bool bMovetoBE = false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if (Digits==3 || Digits==5)
points = Point*10;
else
points = Point;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double CurrProfit;
if ( per!=Time[0] )
{
green[0] = iCustom( 0, 0, "SuperTrend", Nbr_Period1, Multiplier, 0, 1 );
green[1] = iCustom( 0, 0, "SuperTrend", Nbr_Period2, Multiplier, 0, 1 );
green[2] = iCustom( 0, 0, "SuperTrend", Nbr_Period3, Multiplier, 0, 1 );
green[3] = iCustom( 0, 0, "SuperTrend", Nbr_Period4, Multiplier, 0, 1 );
prevgreen[0] = iCustom( 0, 0, "SuperTrend", Nbr_Period1, Multiplier, 0, 2 );
prevgreen[1] = iCustom( 0, 0, "SuperTrend", Nbr_Period2, Multiplier, 0, 2 );
prevgreen[2] = iCustom( 0, 0, "SuperTrend", Nbr_Period3, Multiplier, 0, 2 );
prevgreen[3] = iCustom( 0, 0, "SuperTrend", Nbr_Period4, Multiplier, 0, 2 );
red[0] = iCustom( 0, 0, "SuperTrend", Nbr_Period1, Multiplier, 1, 1 );
red[1] = iCustom( 0, 0, "SuperTrend", Nbr_Period2, Multiplier, 1, 1 );
red[2] = iCustom( 0, 0, "SuperTrend", Nbr_Period3, Multiplier, 1, 1 );
red[3] = iCustom( 0, 0, "SuperTrend", Nbr_Period4, Multiplier, 1, 1 );
prevred[0] = iCustom( 0, 0, "SuperTrend", Nbr_Period1, Multiplier, 1, 2 );
prevred[1] = iCustom( 0, 0, "SuperTrend", Nbr_Period2, Multiplier, 1, 2 );
prevred[2] = iCustom( 0, 0, "SuperTrend", Nbr_Period3, Multiplier, 1, 2 );
prevred[3] = iCustom( 0, 0, "SuperTrend", Nbr_Period4, Multiplier, 1, 2 );
// Let's zero out any empty values
for( int i=0; i< 4; i++)
{
if( green[i] == EMPTY_VALUE )
green[i] = 0;
if( red[i] == EMPTY_VALUE )
red[i] = 0;
if( prevgreen[i] == EMPTY_VALUE )
prevgreen[i] = 0;
if( prevred[i] == EMPTY_VALUE )
prevred[i] = 0;
}
Print( "green values ", green[0]," ", green[1]," ", green[2]," ",green[3] );
Print( "prev green values ", prevgreen[0]," ", prevgreen[1]," ", prevgreen[2]," ",prevgreen[3] );
Print( "red values ", red[0]," ", red[1]," ", red[2]," ",red[3] );
Print( "prev red values ", prevred[0]," ", prevred[1]," ", prevred[2]," ",prevred[3] );
}
if ( WorkingOrder() )
{
if ( OrderType() == OP_BUY )
{
if ( red[0] > 0 || red[1] > 0 || red[2] > 0 || red[3] > 0 )
{
// Close order since change in direction
OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
bMovetoBE = false;
}
CurrProfit = (Bid/points) - (OrderOpenPrice()/points);
if ( OrderLots() == TotalLots && TakeProfit1 > 0 )
{
if ( CurrProfit > TakeProfit1 )
OrderClose(OrderTicket(),(OrderLots()/2),Bid,3,Blue);
} else if ( !bMovetoBE && MovetoBE > 0 && CurrProfit > MovetoBE )
{
if (OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice(),0,0,Blue))
bMovetoBE = true;
}
} else if ( OrderType() == OP_SELL )
{
if ( green[0] > 0 || green[1] > 0 || green[2] > 0 || green[3] > 0 )
{
// Close order since change in direction
OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
bMovetoBE = false;
}
CurrProfit= (OrderOpenPrice()/points) - (Ask/points);
if ( OrderLots() == TotalLots && TakeProfit1 > 0 )
{
if ( CurrProfit > TakeProfit1 )
OrderClose(OrderTicket(),(OrderLots()/2),Ask,3,Blue);
}else if ( !bMovetoBE && MovetoBE > 0 && CurrProfit > MovetoBE )
{
if (OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice(),0,0,Red))
bMovetoBE = true;
}
}
} else if ( per!=Time[0] )
{
//Let's see if we should open any trades
if ( (green[0] > 0 && green[1] > 0 && green[2] > 0 && green[3] > 0) &&
(prevred[0] > 0 || prevred[1] > 0 || prevred[2] > 0 || prevred[3] > 0) )
{
if ( OpenBuy() )
bMovetoBE = false;
} else if ( (red[0] > 0 && red[1] > 0 && red[2] > 0 && red[3] > 0) &&
(prevgreen[0] > 0 || prevgreen[1] > 0 || prevgreen[2] > 0 || prevgreen[3] > 0) )
{
if ( OpenSell() )
bMovetoBE = false;
}
}
per = Time[0];
//----
return(0);
}
//+------------------------------------------------------------------+
// WorkingOrder - Check to see if any orders are opened |
//+------------------------------------------------------------------+
bool WorkingOrder()
{
int total = OrdersTotal();
for(int cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))
return(true);
}
return (false);
}
//+------------------------------------------------------------------+
//| OpenBuy/OpenSell() - initiate buy and sell functions |
//+------------------------------------------------------------------+
bool OpenBuy()
{
int ticket = OrderSend(Symbol(),OP_BUY,TotalLots,Ask,3,0,0,EA_Comments,MagicNumber,0,Blue);
if( ticket < 1 )
{
return(false);
}
OrderSelect(ticket, SELECT_BY_TICKET);
double order_price = OrderOpenPrice();
OrderModify(ticket, order_price,(order_price-(points*StopLoss)),0,0,Blue);
Print("Buy has been opened at ",order_price );
return(true);
}
bool OpenSell()
{
int ticket = OrderSend(Symbol(),OP_SELL,TotalLots,Bid,3,0,0,EA_Comments,MagicNumber,0,Red);
if( ticket < 1 )
{
return(false);
}
OrderSelect(ticket, SELECT_BY_TICKET);
double order_price = OrderOpenPrice();
OrderModify(ticket, order_price,(order_price+(points*StopLoss)),0,0,Red);
Print("Sell has been opened at ",order_price );
return(true);
}
//+------------------------------------------------------------------+
Merci par avance