How can I use isNewBar function correctly?
input static isNewBar(string() ,ENUM_TIMEFRAMES());
void OnTick()
{
double MA=iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0)
if (isNewBar () == && Close[1] > MA )
{
OrderSend("EURUSD",OP_BUY, Lotsize, Ask, Slippage, 0, 0, "1", MagicNo, 0, clrGreen);
}
}
Best,
M.G.
Input is related to parameters for program, not for function return type- also why is the function static?
bool isNewBar(string() ,ENUM_TIMEFRAMES());
need to call IsNewBar with its parameters
if (isNewBar (Symbol(),Period()) && Close[1] > MA )
Input is related to parameters for program, not for function return type- also why is the function static?
need to call IsNewBar with its parameters
void OnTick() { if(IsNewBar(Symbol(),_Period)) { ........ } }
Thank you, guys. I will try to do it again.
M.G
Input is related to parameters for program, not for function return type- also why is the function static?
need to call IsNewBar with its parameters
Hi Amir,
I modified the part as you suggested.
After compiling, there is an error message that 'IsNewBar' - function must have a body
Is there anything I need to add??
input double
Lotsize=1.0;
input int Slippage=10;
input int Stoploss=30;
input int Takeprofit=30;
input int MAPeriod=20;
input
int MAShift=0;
input ENUM_TIMEFRAMES MATimeFrame=PERIOD_M30;
input ENUM_MA_METHOD MAMethod=MODE_SMA;
input
ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE;
bool IsNewBar (string symbol, ENUM_TIMEFRAMES timeframe);
void OnTick()
{
double MA=iMA(NULL, MATimeFrame, MAPeriod, MAShift, MAMethod, MAPrice, 0);
if (IsNewBar (Symbol(), PERIOD_M30))
{
if (Close[1] > MA)
{
OrderSend(Symbol(),OP_BUY, Lotsize, Ask, Slippage, 0, 0, "1", 2, 0, clrGreen);
}
}
}
Best,
M.G.
- www.mql5.com
Hi Amir,
I modified the part as you suggested.
After compiling, there is an error message that 'IsNewBar' - function must have a body
Is there anything I need to add??
input double Lotsize=1.0;
input int Slippage=10;
input int Stoploss=30;
input
int Takeprofit=30;
input int MAPeriod=20;
input int MAShift=0;
input ENUM_TIMEFRAMES MATimeFrame=PERIOD_M30;
input
ENUM_MA_METHOD MAMethod=MODE_SMA;
input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE;
bool IsNewBar (string symbol,
ENUM_TIMEFRAMES timeframe);
void OnTick()
{
double MA=iMA(NULL, MATimeFrame, MAPeriod,
MAShift, MAMethod, MAPrice, 0);
if (IsNewBar (Symbol(), PERIOD_M30))
{
if (Close[1] > MA)
{
OrderSend(Symbol(),OP_BUY, Lotsize, Ask,
Slippage, 0, 0, "1", 2, 0, clrGreen);
}
}
}
Best,
M.G.
Aren't you calling IsNewBar(...), but not providing any code for it to action?
It's not an inbuilt function like, say iLow, which returns a value without you having to do anything else
iLow(_Symbol,_Period,0) ;
It might have to look like this
bool IsNewBar (string symbol, ENUM_TIMEFRAMES timeframe){ // code in here to return true; // or return false; }
Aren't you calling IsNewBar(...), but not providing any code for it to action?
There are likely dozens of definitions for IsNewBar() in this forum.
This is the one I use:
// Detects when a "new bar" occurs, which is the same as when the previous bar has completed. bool IsNewBar(const string symbol, const ENUM_TIMEFRAMES period) { bool isNewBar = false; static datetime priorBarOpenTime = NULL; // New Bar event handler -> per https://www.mql5.com/en/articles/159 // SERIES_LASTBAR_DATE == Open time of the last bar of the symbol-period const datetime currentBarOpenTime = (datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE); if( priorBarOpenTime != currentBarOpenTime ) { // Don't want new bar just because EA started if ( priorBarOpenTime == NULL ) { isNewBar = false; } else { isNewBar = true; } // isNewBar = ( priorBarOpenTime == NULL )?false:true; // priorBarOpenTime is only NULL once // Regardless of new bar, update the held bar time priorBarOpenTime = currentBarOpenTime; } return isNewBar; }
There are likely dozens of definitions for IsNewBar() in this forum.
This is the one I use:
Yes, I was encouraging OP to create their own solution...;)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
input static isNewBar(string() ,ENUM_TIMEFRAMES());
void OnTick()
{
double MA=iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0)
if (isNewBar () == && Close[1] > MA )
{
OrderSend("EURUSD",OP_BUY, Lotsize, Ask, Slippage, 0, 0, "1", MagicNo, 0, clrGreen);
}
}
Best,
M.G.