Coding Help: MTF Problem
This code is part of my personal indicator and my problem is that the arrow #1 appear after candle closed and after reload of the indicator, arrow #2 appear too and the arrow #1 still stays.
I don't know what is incorrect on my code
I want the arrow #1 does not appear, and arrow #2 will appear after the current candle closes.
chart period is M1 and indicator calculation is M5.
I made some assumptions on how you declared all your buffers, indexes and variables, and content of OnInit, and I was able to run without the problem mentioned by you.
As such, may I suggest that you post your complete code?
I don't know what is incorrect on my code
if (counted_bars > 0) counted_bars--; limit = MathMax(Bars - counted_bars - 1, 0); ArrayCopySeries(tfM5, MODE_TIME, Symbol(), PERIOD_M5); for (int i = 1; i < limit; i++)
-
Why did you post your MT4 question in the
Root /
MT5 General section
instead of the MQL4 section,
(bottom of the Root page?)
General rules and best pratices of the Forum. - General - MQL5 programming forum
Next time post in the correct place. The moderators will likely move this thread there soon. - You don't process bar zero of the current time frame, or reprocess all bars of the bar zero of the source time frame. See How to do your lookbacks correctly № 14.
- No need for the decrement. Contradictory information on
IndicatorCounted() - MQL4 and MetaTrader 4 -
MQL4 programming forum
-
You should stop using the old event handlers and IndicatorCounted and
start using the new ones.
Event Handling Functions - Functions - Language Basics - MQL4 Reference
How to do your lookbacks correctly. -
On MT4: Unless the current chart is that specific pair/TF referenced, you must handle 4066/4073 errors
before accessing prices.
Download history in MQL4 EA - Forex Calendar - MQL4 and MetaTrader 4 - MQL4 programming forum - Page 3 № 26
-
Why did you post your MT4 question in the
Root /
MT5 General section
instead of the MQL4 section,
(bottom of the Root page?)
General rules and best pratices of the Forum. - General - MQL5 programming forum
Next time post in the correct place. The moderators will likely move this thread there soon. - You don't process bar zero of the current time frame, or reprocess all bars of the bar zero of the source time frame. See How to do your lookbacks correctly № 14.
- No need for the decrement. Contradictory information on
IndicatorCounted() - MQL4 and MetaTrader 4 -
MQL4 programming forum
-
You should stop using the old event handlers and IndicatorCounted and
start using the new ones.
Event Handling Functions - Functions - Language Basics - MQL4 Reference
How to do your lookbacks correctly. -
On MT4: Unless the current chart is that specific pair/TF referenced, you must handle 4066/4073 errors
before accessing prices.
Download history in MQL4 EA - Forex Calendar - MQL4 and MetaTrader 4 - MQL4 programming forum - Page 3 № 26
Dear William Roeder,
sorry for create post in wrong section, next time will be correct place.
I fixed that as you told me above,
another question : is that possible to call rates_total and prev_calculated and etc like OnCalculate parameters in my custom function?
int OnCalculate(const int rates_total, // the size of the input timeseries const int prev_calculated, // bars processed at the previous call const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low[], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& volume[], // Real Volume const int& spread[] // Spread ) { if (!download_history(TimeFrame)) return prev_calculated; const int lookback = TimeFrame / _Period; int iBar = rates_total - MathMax(lookback, prev_calculated); int iLast = iBar; while (iBar > 1) { --iBar; int iTF = iBarShift(NULL, TimeFrame, Time[iBar]); if (iTF != 0) iLast = iBar; value1 = iRSI(NULL, TimeFrame, period, 0, iTF); value2 = iRSI(NULL, TimeFrame, period, 0, iTF + 1); if (value1 > Oversell && value2 < Oversell && value1 > value2) { int y = iBarShift(NULL, TimeFrame, Time[iBar]); int x = iBarShift(NULL, TimeFrame, Time[iBar + 1]); if (x != y) { CrossUp[iBar] = Low[iBar] - iATR(NULL, 0, 15, iBar) * ArrowDistance; } else { CrossUp[iBar] = EMPTY_VALUE; } } if (value1 < Overbought && value2 > Overbought && value1 < value2) { int y = iBarShift(NULL, TimeFrame, Time[iBar]); int x = iBarShift(NULL, TimeFrame, Time[iBar + 1]); if (x != y) { CrossDown[iBar] = High[iBar] + iATR(NULL, 0, 15, iBar) * ArrowDistance; } else { CrossDown[iBar] = EMPTY_VALUE; } } } #define REDRAW_BAR_LAST false return rates_total - REDRAW_BAR_LAST - iLast; }
// Is That Possible? I mean something like this void MyFunction(const int rates_total, // the size of the input timeseries const int prev_calculated, // bars processed at the previous call const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low[], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& volume[], // Real Volume const int& spread[] // Spread ) { if (!download_history(TimeFrame)) return prev_calculated; const int lookback = TimeFrame / _Period; int iBar = rates_total - MathMax(lookback, prev_calculated); int iLast = iBar; while (iBar > 1) { --iBar; int iTF = iBarShift(NULL, TimeFrame, Time[iBar]); if (iTF != 0) iLast = iBar; value1 = iRSI(NULL, TimeFrame, period, 0, iTF); value2 = iRSI(NULL, TimeFrame, period, 0, iTF + 1); if (value1 > Oversell && value2 < Oversell && value1 > value2) { int y = iBarShift(NULL, TimeFrame, Time[iBar]); int x = iBarShift(NULL, TimeFrame, Time[iBar + 1]); if (x != y) { CrossUp[iBar] = Low[iBar] - iATR(NULL, 0, 15, iBar) * ArrowDistance; } else { CrossUp[iBar] = EMPTY_VALUE; } } if (value1 < Overbought && value2 > Overbought && value1 < value2) { int y = iBarShift(NULL, TimeFrame, Time[iBar]); int x = iBarShift(NULL, TimeFrame, Time[iBar + 1]); if (x != y) { CrossDown[iBar] = High[iBar] + iATR(NULL, 0, 15, iBar) * ArrowDistance; } else { CrossDown[iBar] = EMPTY_VALUE; } } } #define REDRAW_BAR_LAST false return rates_total - REDRAW_BAR_LAST - iLast; }
They only exist in OnCalculate. Pass them
int OnCalculate(const int rates_total, // the size of the input timeseries const int prev_calculated, // bars processed at the previous call const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low[], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& volume[], // Real Volume const int& spread[] // Spread ) { return MyFunction(rates_total, prev_calculated); }
Hi guys,
First of all, thank you to those who help beginners to solve their problems and I appreciate if you help me with this problem.
This code is part of my personal indicator and my problem is that the arrow #1 appear after candle closed and after reload of the indicator, arrow #2 appear too and the arrow #1 still stays.
I don't know what is incorrect on my code
I want the arrow #1 does not appear, and arrow #2 will appear after the current candle closes.
chart period is M1 and indicator calculation is M5.
thank in advance