Updated code (the same code only with property) :
#property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 1 //--- plot TRIX22 #property indicator_label1 "TRIX22" #property indicator_type1 DRAW_LINE #property indicator_color1 clrDarkKhaki #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int InpPeriod=8; //--- indicator buffers double TRIX22_Buffer[]; string SName="A001"; bool RunOnce=false; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,TRIX22_Buffer,INDICATOR_DATA); CustomSymbolDelete(SName); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- if(RunOnce) return(0); RunOnce=true; CustomSymbolDelete(SName); CustomSymbolCreate(SName,"\\Test\\"); MqlRates rates[]; ArraySetAsSeries(rates,true); int copied=CopyRates(Symbol(),0,0,Bars(_Symbol,_Period),rates); int check_int = CustomRatesUpdate(SName,rates); int handle=iTriX(SName,0,InpPeriod,PRICE_MEDIAN); CopyBuffer(handle,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
int handle=iTriX(SName,0,InpPeriod,PRICE_MEDIAN); CopyBuffer(handle,0,0,Bars(_Symbol,_Period),TRIX22_Buffer);
Perhaps you should read the manual, especially the examples.
How To Ask Questions The Smart Way. (2004)
How To Interpret Answers.
RTFM and STFW: How To Tell You've Seriously Screwed Up.
They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 (2020)
How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 (2020)
MQL5 for Newbies: Guide to Using Technical Indicators in Expert Advisors - MQL5 Articles (2010)
How to call indicators in MQL5 - MQL5 Articles (2010)
They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
Thankyou for answering, I move handle to OnInit and clean the code, but it didnt solve the problem, indicator is emty, not working - now I getting 4806 error on a custom symbol:
2023.06.21 20:35:48.960 TRIX22 (test7Symbol,M15) handle1=iTriX(SName,0,InpPeriod,PRICE_MEDIAN); >> 5304 2023.06.21 20:35:48.960 TRIX22 (test7Symbol,M15) CopyBuffer(handle1,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); >> 4806
ERR_INDICATOR_DATA_NOT_FOUND | 4806 | Requested data not found |
On handle2 - curent Symbol() ther is no error, error hapens only on a custom symbol - on handle1 :
2023.06.21 20:19:20.042 TRIX22 (test7Symbol,M15) handle2=iTriX(_Symbol,0,InpPeriod,PRICE_MEDIAN); >> 5304 2023.06.21 20:19:20.042 TRIX22 (test7Symbol,M15) CopyBuffer(handle2,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); >> 5304
Updated code:
#property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 1 //--- plot TRIX22 #property indicator_label1 "TRIX22" #property indicator_type1 DRAW_LINE #property indicator_color1 clrDarkKhaki #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int InpPeriod=8; //--- indicator buffers double TRIX22_Buffer[]; string SName="A001"; bool RunOnce=false; int handle1,handle2; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,TRIX22_Buffer,INDICATOR_DATA); //--- sets drawing line to empty value PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); CustomSymbolDelete(SName); CustomSymbolCreate(SName,"\\Test\\"); MqlRates rates[]; ArraySetAsSeries(rates,true); int copied=CopyRates(Symbol(),0,0,Bars(_Symbol,_Period),rates); int check_int = CustomRatesUpdate(SName,rates); Print("==================== "+TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" ===================="); handle1=iTriX(SName,0,InpPeriod,PRICE_MEDIAN); Print("handle1=iTriX(SName,0,InpPeriod,PRICE_MEDIAN); >> ",GetLastError()); handle2=iTriX(_Symbol,0,InpPeriod,PRICE_MEDIAN); Print("handle2=iTriX(_Symbol,0,InpPeriod,PRICE_MEDIAN); >> ",GetLastError()); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- if(!RunOnce) { RunOnce=true; //ArrayInitialize(TRIX22_Buffer,EMPTY_VALUE); ArrayInitialize(TRIX22_Buffer,0); } CopyBuffer(handle1,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); Print("CopyBuffer(handle1,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); >> ",GetLastError()); //CopyBuffer(handle2,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); //Print("CopyBuffer(handle2,0,0,Bars(_Symbol,_Period),TRIX22_Buffer); >> ",GetLastError()); ArraySetAsSeries(TRIX22_Buffer,true); Print("ArraySetAsSeries(TRIX22_Buffer,true); >> ",GetLastError()); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
=============================
Update:
It start working after I presed refresh button!..
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
I try to write indicator - iTriX on custom symbol
The problem is - each time I switch time frames iTriX chenges charts, doesn't seem to work - sam time working, other times not working!..