Bonjour à toutes et à tous,
Je me présente, je suis un Trader Novice ayant réalisé une formation de programmation en MQL4. Malheureusement, ma formation se limite aux bases ce qui est embêtant pour une réelle envie de programmation.
Pouvez-vous m'aider dans l'écriture de mon code ci-dessous svp ?
// ---------------- Ordre Buy
// si la bougie 1 est inférieur ou égale à la bougie 0
// si aucun ordre n'est en cours
// si le RSI [1] est inférieur ou égale à RSI [0] et le RSI [0] est supérieur ou égal à 35
// si la bougie 0 (Close) est supérieur ou égale à la Moyenne Mobile 15
extern int TakeProfit = 500 ; (50 points sur le DAX30)
extern int StopLoss = 300 ;
extern double LotSize = 1.00 ;
extern int period_RSI = 14 ;
extern int slipage = 3 ;
void OnTick()
{
//----------------- Ordre Buy
double RMA15B0 = iMA("DAX30",0,15,0,MODE_SMA,PRICE_CLOSE,0);
double RSI0 = iRSI ("DAX30",0,period_RSI,PRICE_CLOSE,0);
double RSI1 = iRSI ("DAX30",0,period_RSI,PRICE_CLOSE,1);
double SL = 0 ;
double TP = 0 ;
if (Close [0] >= RMA15B0 )
{
if (OrdersTotal () == 0 && Open [1] <= Open [0]);
if (RSI1 <= RSI0 && RSI0 >= 35 ) ;
if (TakeProfit != 0) TP = NormalizeDouble (Ask+TakeProfit*Point,Digits);
if (StopLoss != 0 ) SL = NormalizeDouble (Ask-StopLoss*Point,Digits);
OrderSend ("DAX30",OP_BUY,LotSize,Ask,slipage,SL,TP,"BUY",0,0,Green) ;
}
// --------------- Ordre Close Buy
// si le TP/SL est atteint
// si la bougie 0 (Close) est inférieur à la bougie 2 (Close)
// si le RSI de la bougie 0 est inférieur ou égale à 50
int order_id = OrderTicket () ;
if (OrdersTotal () >= 1)
{
if (Close [0] <= Close [2] || RSI0 <= 50);
OrderClose (order_id,LotSize,Ask,slipage,Red);
return (0);
}
// ------------------- Ordre Sell
// si la bougie 1 est supérieure ou égale à la bougie 0
// si aucun ordre n'est en cours
// si le RSI [1] est supérieur ou égal au RSI [0] et que le RSI [0] <= 55
// si la bougie 0 (Close) est inférieure ou égale à la MM15
if (Close [0] <= RMA15B0)
{
if (OrdersTotal () == 0 && Open [1] >= Open [0]);
if (RSI1 >= RSI0 && RSI0 <= 55);
}
OrderSend ("DAX30",OP_SELL,LotSize,Bid,slipage,SL,TP,"SELL",0,0,Red);
// ------------------ Ordre Close Sell
// si le TP/SL est atteint
// si la bougie 0 est supérieure à la bougie 3 (Close)
// si le RSI [0] est supérieur ou égale à 50
if (OrdersTotal () >= 1)
{
if (Close [0] >= Close [3]|| RSI0 >= 50);
OrderClose (order_id,LotSize,Bid,slipage,Red);
return (0);
}
}
Pour faciliter la compréhension, cet EA est destiné au DAX30, j'ai également décrit ma logique avec les // . Mais je rencontre un problème quant aux TP et SL ( Error Code : 130 - sur OrderSend
et Error Code 4051 - sur OrderClose ).
Ps : je n'ai pas notifié de MagicNumber car l'objectif est d'avoir un compte de trading uniquement réservé à un EA.
J'en demande beaucoup, mais toutes aides ou conseils seront appréciés.
En espérant avoir posté mon topic dans la bonne rubrique.
Merci d'avance.
Je me présente, je suis un Trader Novice ayant réalisé une formation de programmation en MQL4. Malheureusement, ma formation se limite aux bases ce qui est embêtant pour une réelle envie de programmation.
Pouvez-vous m'aider dans l'écriture de mon code ci-dessous svp ?
// ---------------- Ordre Buy
// si la bougie 1 est inférieur ou égale à la bougie 0
// si aucun ordre n'est en cours
// si le RSI [1] est inférieur ou égale à RSI [0] et le RSI [0] est supérieur ou égal à 35
// si la bougie 0 (Close) est supérieur ou égale à la Moyenne Mobile 15
extern int TakeProfit = 500 ; (50 points sur le DAX30)
extern int StopLoss = 300 ;
extern double LotSize = 1.00 ;
extern int period_RSI = 14 ;
extern int slipage = 3 ;
void OnTick()
{
//----------------- Ordre Buy
double RMA15B0 = iMA("DAX30",0,15,0,MODE_SMA,PRICE_CLOSE,0);
double RSI0 = iRSI ("DAX30",0,period_RSI,PRICE_CLOSE,0);
double RSI1 = iRSI ("DAX30",0,period_RSI,PRICE_CLOSE,1);
double SL = 0 ;
double TP = 0 ;
if (Close [0] >= RMA15B0 )
{
if (OrdersTotal () == 0 && Open [1] <= Open [0]);
if (RSI1 <= RSI0 && RSI0 >= 35 ) ;
if (TakeProfit != 0) TP = NormalizeDouble (Ask+TakeProfit*Point,Digits);
if (StopLoss != 0 ) SL = NormalizeDouble (Ask-StopLoss*Point,Digits);
OrderSend ("DAX30",OP_BUY,LotSize,Ask,slipage,SL,TP,"BUY",0,0,Green) ;
}
// --------------- Ordre Close Buy
// si le TP/SL est atteint
// si la bougie 0 (Close) est inférieur à la bougie 2 (Close)
// si le RSI de la bougie 0 est inférieur ou égale à 50
int order_id = OrderTicket () ;
if (OrdersTotal () >= 1)
{
if (Close [0] <= Close [2] || RSI0 <= 50);
OrderClose (order_id,LotSize,Ask,slipage,Red);
return (0);
}
// ------------------- Ordre Sell
// si la bougie 1 est supérieure ou égale à la bougie 0
// si aucun ordre n'est en cours
// si le RSI [1] est supérieur ou égal au RSI [0] et que le RSI [0] <= 55
// si la bougie 0 (Close) est inférieure ou égale à la MM15
if (Close [0] <= RMA15B0)
{
if (OrdersTotal () == 0 && Open [1] >= Open [0]);
if (RSI1 >= RSI0 && RSI0 <= 55);
}
OrderSend ("DAX30",OP_SELL,LotSize,Bid,slipage,SL,TP,"SELL",0,0,Red);
// ------------------ Ordre Close Sell
// si le TP/SL est atteint
// si la bougie 0 est supérieure à la bougie 3 (Close)
// si le RSI [0] est supérieur ou égale à 50
if (OrdersTotal () >= 1)
{
if (Close [0] >= Close [3]|| RSI0 >= 50);
OrderClose (order_id,LotSize,Bid,slipage,Red);
return (0);
}
}
Pour faciliter la compréhension, cet EA est destiné au DAX30, j'ai également décrit ma logique avec les // . Mais je rencontre un problème quant aux TP et SL ( Error Code : 130 - sur OrderSend
et Error Code 4051 - sur OrderClose ).
Ps : je n'ai pas notifié de MagicNumber car l'objectif est d'avoir un compte de trading uniquement réservé à un EA.
J'en demande beaucoup, mais toutes aides ou conseils seront appréciés.
En espérant avoir posté mon topic dans la bonne rubrique.
Merci d'avance.