Hi Fabio
You need to wait until the bar closes and the next one opens, then check the bar close. So you will be looking at Bar 1, not Bar 0. So you just need to change the Shift parameter in your RSI call:
iRSI(NULL,PERIOD_H1,14,PRICE_CLOSE,1)
Cheers
Stuart,
thank you for your reply, would that be valid for the others indicators i am using?
thanks
Stuart,
thank you for your reply, would that be valid for the others indicators i am using?
thanks
Cheers
Stu
Depends on the indicator and your strategy Fabio, but in most cases, yes.
Cheers
Stu
Hello Stuart,
I have implemented some more logic to my EA, but I am struggling to get to work as i thought it should:
double Macd_Main = iMACD(NULL,PERIOD_CURRENT,12,16,9,PRICE_CLOSE,MODE_MAIN,1);
if(IMA_8>IMA_34 && Sto_1>85 && (Macd_Main>-0.00005||Macd_Main<0.00005)) // Here is your open buy rule
according to the logic the EA should not open a new position but it actually opens a lot of them.
thanks for the help
Hello Stuart,
I have implemented some more logic to my EA, but I am struggling to get to work as i thought it should:
double Macd_Main = iMACD(NULL,PERIOD_CURRENT,12,16,9,PRICE_CLOSE,MODE_MAIN,1);
if(IMA_8>IMA_34 && Sto_1>85 && (Macd_Main>-0.00005||Macd_Main<0.00005)) // Here is your open buy rule
according to the logic the EA should not open a new position but it actually opens a lot of them.
thanks for the help
At this stage, it's probably better if you post up the whole code so we can see what's going on. Unfortunately, I'm off on 2 weeks holiday as of tomorrow so if I don't answer, hopefully someone else will be able to help you. If not, please send me a message and I'll help you out when I get back.
Cheers
Stu
G'day Fabio
At this stage, it's probably better if you post up the whole code so we can see what's going on. Unfortunately, I'm off on 2 weeks holiday as of tomorrow so if I don't answer, hopefully someone else will be able to help you. If not, please send me a message and I'll help you out when I get back.
Cheers
Stu
// extern int MagicNumber=10001; extern double Lots =0.1; extern double StopLoss=50; extern double TakeProfit=200; extern int TrailingStop=0; extern int RSI_TOP_IN=70; extern int RSI_BOT_IN=30; extern int RSI_TOP_OUT=60; extern int RSI_BOT_OUT=40; extern int Slippage=3; //+------------------------------------------------------------------+ // expert start function //+------------------------------------------------------------------+ int start() { double MyPoint=Point; if(Digits==3 || Digits==5) MyPoint=Point*10; double TheStopLoss=0; double TheTakeProfit=0; // double IMA_8 = iMA(NULL,PERIOD_CURRENT,8,0,MODE_SMA,PRICE_CLOSE,1); double IMA_34 = iMA(NULL,PERIOD_CURRENT,34,0,MODE_EMA,PRICE_CLOSE,1); // double Sto_1 = iStochastic(NULL,PERIOD_CURRENT,14,3,3,MODE_SMA,1,MODE_MAIN,1); // double Macd_Main = iMACD(NULL,PERIOD_CURRENT,12,16,9,PRICE_CLOSE,MODE_MAIN,1); double Macd_Sign = iMACD(NULL,PERIOD_CURRENT,12,16,9,PRICE_CLOSE,MODE_SIGNAL,1); // double RSI_1 = iRSI(NULL,PERIOD_CURRENT,14,1,1); if( TotalOrdersCount()==0 ) { int result=0; if(IMA_8>IMA_34 && Sto_1>85 && (Macd_Main>-0.00005||Macd_Main<0.00005)) // Here is your open buy rule { result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",MagicNumber,0,Blue); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint; OrderSelect(result,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } } for(int cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber ) { if(OrderType()==OP_BUY) { if(Sto_1>85 && RSI_1>80) //here is your close buy rule { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); } if(TrailingStop>0) { if(Bid-OrderOpenPrice()>MyPoint*TrailingStop) { if(OrderStopLoss()<Bid-MyPoint*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green); return(0); } } } } } } return(0); } int TotalOrdersCount() { int result=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS ,MODE_TRADES); if (OrderMagicNumber()==MagicNumber) result++; } return (result); }
Stuart,
by the way thank you for your time and help.
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello all,
first of all i am pretty new at EA coding, second I have looked for a related post in the forum itself and on mighty google, even on stackoverflow.
Now I wrote a simple EA to open an order if certain conditions are met, one of which is double RSI_1 = iRSI(NULL,PERIOD_H1,14,PRICE_CLOSE,0) > 70. Well as you can see in the attachment the order is opened not at the close price of the candle but higher, according to the picture it should have opened at the next candle on the right.
I would think, according to the documentation that by using price_close the rsi would get calculated at the close price for the time frame selected, but it doesn't look that way. what am i missing? how can i fix it?
thanks