Indistinctkiller:
if(time[]>8:00 && time[]>12:00 && (all the other statements that are part of the indi...) { signal... }Does anyone know how to do this in mql5?
-
Please edit your (original) post and use the CODE button (Alt-S)! (For large amounts of code, attach it.)
General rules and best pratices of the Forum. - General - MQL5 programming forum 2019.05.06
Messages Editor - Don't you mean 8:00 <= time && time < 12:00 [08:00…12:00)? Right now you have (12:00…24:00)
- Obviously that isn't valid code.
- There are several ways.
#define HR0800 28800 #define HR1200 43200 // (12*3600) SECONDS now = time(time[]); if(now>HR0800 && now>HR1200 && (all the other statements that are part of the indi...){
Find bar of the same time one day ago - MQL4 programming forum 2017.10.06
-
Please edit your (original) post and use the CODE button (Alt-S)! (For large amounts of code, attach it.)
General rules and best pratices of the Forum. - General - MQL5 programming forum 2019.05.06
Messages Editor - Don't you mean 8:00 <= time && time < 12:00 [08:00…12:00)? Right now you have (12:00…24:00)
- Obviously that isn't valid code.
- There are several ways. Find bar of the same time one day ago - MQL4 programming forum 2017.10.06
Thanks for the reply!
The code below should be in the for loop right?
SECONDS now = time(time[]); if(now>HR0800 && now>HR1200 && (all the other statements that are part of the indi...)
and the define should be on the global scope in the beginning?
#define HR0800 28800 #define HR1200 43200 // (12*3600)
and yes thats what I mean sorry I misstyped.
An example of an indicator that displays its data in a given time range: iRVI Time Control
*** input int Inp_RVI_ma_period = 15; // RVI: averaging period input bool InpTimeControl = true; // Use time control input uchar InpStartHour = 09; // Start Hour input uchar InpStartMinute = 00; // Start Minute input uchar InpEndHour = 23; // End Hour input uchar InpEndMinute = 01; // End Minute ***
An example of an indicator that displays its data in a given time range: iRVI Time Control
Thanks for the reply.
In this case the Time control is already part of the indicator which is why, the time at which I would want the iRVI to be displayed would just need to be inserted into the iCustom function.
This is however is not what I am looking for. I programmed a custom indicator which displays arrows when certain conditions are met. It does this 24/5 and I am trying to contain it only to a certain time range instead of it running along the whole time 24 h a day. So for example I would only want it to display from 8-12. I does not use the iRVI indicator.
What might have the answer is the source code for iRVI.
edit:
found it thanks this should work I will study it and try to implement it.
//+------------------------------------------------------------------+ //| iRVI Time Control.mq5 | //| Copyright © 2020, Vladimir Karputov | //| https://www.mql5.com/ru/market/product/43516 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2020, Vladimir Karputov" #property link "https://www.mql5.com/ru/market/product/43516" #property version "1.002" #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 2 //--- plot RVI #property indicator_label1 "RVI" #property indicator_type1 DRAW_LINE #property indicator_color1 clrDarkOrange #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot Signal #property indicator_label2 "Signal" #property indicator_type2 DRAW_LINE #property indicator_color2 clrRoyalBlue #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- input parameters input int Inp_RVI_ma_period = 15; // RVI: averaging period input bool InpTimeControl = true; // Use time control input uchar InpStartHour = 09; // Start Hour input uchar InpStartMinute = 00; // Start Minute input uchar InpEndHour = 23; // End Hour input uchar InpEndMinute = 01; // End Minute //--- indicator buffers double TimeRVIBuffer[]; double TimeSignalBuffer[]; double RVIBuffer[]; double SignalBuffer[]; //-- long m_start=0,m_end=0; int bars_calculated=0; // we will keep the number of values in the Stochastic Oscillator indicator int handle_iRVI; // variable for storing the handle of the iRVI indicator //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,TimeRVIBuffer,INDICATOR_DATA); SetIndexBuffer(1,TimeSignalBuffer,INDICATOR_DATA); SetIndexBuffer(2,RVIBuffer,INDICATOR_CALCULATIONS); SetIndexBuffer(3,SignalBuffer,INDICATOR_CALCULATIONS); //--- if(InpTimeControl) { m_start=InpStartHour*60*60+InpStartMinute*60; m_end=InpEndHour*60*60+InpEndMinute*60; } //--- the 0.0 (empty) value will mot participate in drawing PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,3); //--- name for DataWindow and indicator subwindow label string time=""; if(InpTimeControl) time=StringFormat(" (%02d:%02d-%02d:%02d)",InpStartHour,InpStartMinute,InpEndHour,InpEndMinute); IndicatorSetString(INDICATOR_SHORTNAME,"RVI("+string(Inp_RVI_ma_period)+")"+time); PlotIndexSetString(0,PLOT_LABEL,"RVI("+string(Inp_RVI_ma_period)+")"); PlotIndexSetString(1,PLOT_LABEL,"Signal("+string(Inp_RVI_ma_period)+")"); //--- create handle of the indicator iRVI handle_iRVI=iRVI(Symbol(),Period(),Inp_RVI_ma_period); //--- if the handle is not created if(handle_iRVI==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iRVI indicator for the symbol %s/%s, error code %d", Symbol(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- 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[]) { //--- number of values copied from the iRVI indicator int values_to_copy; //--- determine the number of values calculated in the indicator int calculated=BarsCalculated(handle_iRVI); if(calculated<=0) { PrintFormat("BarsCalculated() returned %d, error code %d",calculated,GetLastError()); return(0); } //--- if it is the first start of calculation of the indicator or if the number of values in the iRVI indicator changed //---or if it is necessary to calculated the indicator for two or more bars (it means something has changed in the price history) if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1) { //--- if the RVIBuffer array is greater than the number of values in the iRVI indicator for symbol/period, then we don't copy everything //--- otherwise, we copy less than the size of indicator buffers if(calculated>rates_total) values_to_copy=rates_total; else values_to_copy=calculated; } else { //--- it means that it's not the first time of the indicator calculation, and since the last call of OnCalculate() //--- for calculation not more than one bar is added values_to_copy=(rates_total-prev_calculated)+1; } //--- fill the arrays with values of the iRVI indicator //--- if FillArrayFromBuffer returns false, it means the information is nor ready yet, quit operation if(!FillArrayFromBuffer(RVIBuffer,SignalBuffer,handle_iRVI,values_to_copy)) return(0); //--- memorize the number of values in the Relative Vigor Index indicator bars_calculated=calculated; //--- main loop int limit=prev_calculated-1; if(prev_calculated==0) limit=0; for(int i=limit; i<rates_total; i++) { if(InpTimeControl) { MqlDateTime STime; TimeToStruct(time[i],STime); if((STime.hour*60*60+STime.min*60)<m_start || (STime.hour*60*60+STime.min*60)>=m_end) { TimeRVIBuffer[i]=EMPTY_VALUE; TimeSignalBuffer[i]=EMPTY_VALUE; continue; } } TimeRVIBuffer[i]=RVIBuffer[i]; TimeSignalBuffer[i]=SignalBuffer[i]; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Filling indicator buffers from the iRVI indicator | //+------------------------------------------------------------------+ bool FillArrayFromBuffer(double &rvi_buffer[], // indicator buffer of Relative Vigor Index values double &signal_buffer[], // indicator buffer of the signal line int ind_handle, // handle of the iRVI indicator int amount // number of copied values ) { //--- reset error code ResetLastError(); //--- fill a part of the iRVIBuffer array with values from the indicator buffer that has 0 index if(CopyBuffer(ind_handle,0,0,amount,rvi_buffer)<0) { //--- if the copying fails, tell the error code PrintFormat("Failed to copy data from the iRVI indicator, error code %d",GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(false); } //--- fill a part of the SignalBuffer array with values from the indicator buffer that has index 1 if(CopyBuffer(ind_handle,1,0,amount,signal_buffer)<0) { //--- if the copying fails, tell the error code PrintFormat("Failed to copy data from the iRVI indicator, error code %d",GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(false); } //--- everything is fine return(true); }
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
So far I have tried many things but, ether the methods found were not compatible with my code (I don't get errors, just my implied intention with what I coded dosen't work) or I sheerly didn't understand how to implement it into my code(i.e I was to stupid)
I looked at a few posts on the forum to see what other people did using things like MqlDateTime or just using the default time[] array in oncalculate.
I've also tried using TimeToString or StringToTime. Nothing really worked for me.
I am running a for loop using i. When the conditions in the if statement are met a signal is posted.
So at the the moment I am looking for a way to implement the time issue mentioned above into this if statement of the for loop.
So something like
obv very simplified version of the code.
Does anyone know how to do this in mql5?
Help is greatly appreciated <3
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Helvetica Neue'} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Helvetica Neue'; min-height: 16.0px}