You are getting the handle of the indicator.
Read the documentation of how to use iCustom.
You are getting the handle of the indicator.
Read the documentation of how to use iCustom.
The problem is the indicator only shows the trend cycle in the data window, thats not the value I need.
Would I need to alter the code of the indicator to return valc to the data window?
I'm looking to incorporate a value generated in this STC indicator into my EA: https://www.mql5.com/en/code/20281
On inspecting the code I discovered there is a data type called "valc" that holds a value (0, 1 or 2) - these numbers indicate whether the trend is going up (1) or down (2) Normally these are used by the indicator to define the line color but I'd like to use them for my own purposes. So I'm looking to pull that number from the indicator and bring it into my EA to use.
I ran a test using iCustom but that just returns a constant value of 10?
Any suggestion for how to go about this?
Please read the reference documentation. In MQL5, an indicator handle MUST be created ONLY ONCE - and this is done in OnInit.
Example:
//+------------------------------------------------------------------+ //| iCustom Get Value.mq5 | //| Copyright © 2021, Vladimir Karputov | //+------------------------------------------------------------------+ #property copyright "Copyright © 2021, Vladimir Karputov" #property version "1.000" //+------------------------------------------------------------------+ //| Enub enPrices | //+------------------------------------------------------------------+ enum enPrices { pr_close, // Close pr_open, // Open pr_high, // High pr_low, // Low pr_median, // Median pr_typical, // Typical pr_weighted, // Weighted pr_average, // Average (high+low+open+close)/4 pr_medianb, // Average median body (open+close)/2 pr_tbiased, // Trend biased price pr_tbiased2, // Trend biased (extreme) price pr_haclose, // Heiken Ashi close pr_haopen, // Heiken Ashi open pr_hahigh, // Heiken Ashi high pr_halow, // Heiken Ashi low pr_hamedian, // Heiken Ashi median pr_hatypical, // Heiken Ashi typical pr_haweighted, // Heiken Ashi weighted pr_haaverage, // Heiken Ashi average pr_hamedianb, // Heiken Ashi median body pr_hatbiased, // Heiken Ashi trend biased price pr_hatbiased2 // Heiken Ashi trend biased (extreme) price }; //--- input parameters input int SchaffPeriod = 32; // Schaff period input int FastEma = 23; // Fast EMA period input int SlowEma = 50; // Slow EMA period input double SmoothPeriod = 3; // Smoothing period input enPrices Price = pr_close; // Price //--- int handle_iCustom; // variable for storing the handle of the iCustom indicator bool m_init_error = false; // error on InInit //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- forced initialization of variables m_init_error = false; // error on InInit //--- create handle of the indicator iCustom handle_iCustom=iCustom(Symbol(),Period(),"Schaff Trend Cycle", SchaffPeriod, FastEma, SlowEma, SmoothPeriod, Price); //--- if the handle is not created if(handle_iCustom==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d", Symbol(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early m_init_error=true; return(INIT_SUCCEEDED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(m_init_error) return; //--- double custom[]; ArraySetAsSeries(custom,true); int start_pos=0,count=3; if(!iGetArray(handle_iCustom,0,start_pos,count,custom)) return; //--- string text=""; for(int i=0; i<count; i++) { text=text+ " bar #"+IntegerToString(i)+": "+ " value "+DoubleToString(custom[i],Digits()+1)+"\n"; } Comment(text); } //+------------------------------------------------------------------+ //| Get value of buffers | //+------------------------------------------------------------------+ bool iGetArray(const int handle,const int buffer,const int start_pos, const int count,double &arr_buffer[]) { bool result=true; if(!ArrayIsDynamic(arr_buffer)) { PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__); return(false); } ArrayFree(arr_buffer); //--- reset error code ResetLastError(); //--- fill a part of the iBands array with values from the indicator buffer int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer); if(copied!=count) { //--- if the copying fails, tell the error code PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d", __FILE__,__FUNCTION__,count,copied,GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(false); } return(result); } //+------------------------------------------------------------------+
Result:
Please read the reference documentation. In MQL5, an indicator handle MUST be created ONLY ONCE - and this is done in OnInit.
Example:
Result:
Vladimir to the rescue once again. This did it. I was able to use the cycle instead of the value I was looking for, totally rethought my approach.
Thank you!
![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
I'm looking to incorporate a value generated in this STC indicator into my EA: https://www.mql5.com/en/code/20281
On inspecting the code I discovered there is a data type called "valc" that holds a value (0, 1 or 2) - these numbers indicate whether the trend is going up (1) or down (2) Normally these are used by the indicator to define the line color but I'd like to use them for my own purposes. So I'm looking to pull that number from the indicator and bring it into my EA to use.
I ran a test using iCustom but that just returns a constant value of 10?
Any suggestion for how to go about this?