I'm doing more testing, I leave no errors but I think is not working properly, the correct code is written in your opinion?
Thank you
//--- indicator settings #property indicator_chart_window #property indicator_buffers 2 #property indicator_type1 DRAW_ARROW #property indicator_width1 1 #property indicator_color1 Yellow #property indicator_label1 "Sell" #property indicator_type2 DRAW_ARROW #property indicator_width2 1 #property indicator_color2 Yellow #property indicator_label2 "Buy" //--- indicator buffers double Buffer1[]; double Buffer2[]; extern string RSI =" Setting RSI"; extern int Periodo = 2; extern double RSI_Max = 70; extern double RSI_Min = 30; datetime time_alert; //used when sending alert extern bool Audible_Alerts = true; double myPoint; //initialized in OnInit //----------------------------------------------------------------------------------------------------// int Ora_From_Hour = 08; //time of the day // int Min_From_Min = 00; //time of the day // int Ora_To_Hour = 12; //time of the day // int Min_To_Min = 30; //time of the day // bool inTimeInterval(datetime t, int TOD_From_Hour, int TOD_From_Min, int TOD_To_Hour, int TOD_To_Min) // { // string TOD = TimeToString(t, TIME_MINUTES); // string TOD_From = StringFormat("%02d", TOD_From_Hour)+":"+StringFormat("%02d", TOD_From_Min); // string TOD_To = StringFormat("%02d", TOD_To_Hour)+":"+StringFormat("%02d", TOD_To_Min); // return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0) // || (StringCompare(TOD_From, TOD_To)> 0 // && ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59")<= 0) // || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0)))); // } // //----------------------------------------------------------------------------------------------------// //----------------------------------------------------------------------------------------------------// int Ora_From_Hour2 = 14; //time of the day // int Min_From_Min2 = 30; //time of the day // int Ora_To_Hour2 = 20; //time of the day // int Min_To_Min2 = 00; //time of the day // bool inTimeInterval2(datetime t, int TOD_From_Hour, int TOD_From_Min, int TOD_To_Hour, int TOD_To_Min)// { // string TOD = TimeToString(t, TIME_MINUTES); // string TOD_From = StringFormat("%02d", TOD_From_Hour)+":"+StringFormat("%02d", TOD_From_Min); // string TOD_To = StringFormat("%02d", TOD_To_Hour)+":"+StringFormat("%02d", TOD_To_Min); // return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0) // || (StringCompare(TOD_From, TOD_To)> 0 // && ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59")<= 0) // || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0)))); // } // //----------------------------------------------------------------------------------------------------// void myAlert(string type, string message) { if(type == "print") Print(message); else if(type == "error") { Print(type+" | RSIalert @ "+Symbol()+","+Period()+" | "+message); } else if(type == "order") { } else if(type == "modify") { } else if(type == "indicator") { if(Audible_Alerts) Alert(type+" | RSIalert @ "+Symbol()+","+Period()+" | "+message); } } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { IndicatorBuffers(2); SetIndexBuffer(0, Buffer1); SetIndexEmptyValue(0, 0); SetIndexArrow(0, 159); SetIndexBuffer(1, Buffer2); SetIndexEmptyValue(1, 0); SetIndexArrow(1, 159); //initialize myPoint Comment("Copyright © 2016, Trade60Secondi.com"); myPoint = Point(); if(Digits() == 5 || Digits() == 3) { myPoint *= 10; } 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[]) { int limit = rates_total - prev_calculated; //--- counting from 0 to rates_total ArraySetAsSeries(Buffer1, true); ArraySetAsSeries(Buffer2, true); //--- initial zero if(prev_calculated < 1) { ArrayInitialize(Buffer1, 0); ArrayInitialize(Buffer2, 0); } else limit++; //--- main loop for(int i = limit-1; i >= 0; i--) { if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation // Indicator Buffer 1 if(iRSI(NULL, PERIOD_CURRENT, Periodo, PRICE_CLOSE, 1+i) > RSI_Max //Relative Strength Index > fixed value ) { if (!inTimeInterval(Time[i], Ora_From_Hour, Min_From_Min, Ora_To_Hour, Min_To_Min)) continue; Buffer1[i] = High[i] + 1 * myPoint; } else { if (!inTimeInterval(Time[i], Ora_From_Hour2, Min_From_Min2, Ora_To_Hour2, Min_To_Min2)) continue; Buffer1[i] = High[i] + 1 * myPoint; } //Indicator Buffer 2 if(iRSI(NULL, PERIOD_CURRENT, Periodo, PRICE_CLOSE, 1+i) < RSI_Min //Relative Strength Index < fixed value ) { if (!inTimeInterval(Time[i], Ora_From_Hour, Min_From_Min, Ora_To_Hour, Min_To_Min)) continue; Buffer2[i] = Low [i] - 1 * myPoint; } else { if (!inTimeInterval(Time[i], Ora_From_Hour2, Min_From_Min2, Ora_To_Hour2, Min_To_Min2)) continue; Buffer2[i] = Low [i] - 1 * myPoint; } } return(0); } //+------------------------------------------------------------------+
You think it's not working properly?
Then test it and find out. Maybe you also find what's going wrong.
&& ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59")<= 0) // || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0))));
Will always be true StringCompare("2016.07.15 xx:xx", "00:00") >= 0
Will always be false. StringCompare("2016.07.15 xx:xx", "23:59")<= 0)
Don't compare strings, convert your times to a datetime and compare directly // string TOD = TimeToString(t, TIME_MINUTES); // string TOD_From = StringFormat("%02d", TOD_From_Hour)+":"+StringFormat("%02d", TOD_From_Min); // string TOD_To = StringFormat("%02d", TOD_To_Hour)+":"+StringFormat("%02d", TOD_To_Min); // return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0) datetime TOD_From = StringToTime( string(TOD_From_Hour)+":"+string(TOD_From_Min) ); datetime TOD_To = StringToTime( string(TOD_To_Hour)+":"+string(TOD_To_Min) ); return t >= TOD_From && TOD < TOD_to;
int Ora_From_Hour = 08; //time of the day // int Min_From_Min = 00; //time of the day // int Ora_To_Hour = 12; //time of the day // int Min_To_Min = 30; //time of the day
You want to allow 08:00 to 12:30. You do not want to trade at 12:30;00.0-12:30:59.9. Thus you do not want the equals.
//----------------------------------------------------------------------------------------------------// int Ora_From_Hour = 08; //time of the day // int Min_From_Min = 00; //time of the day // int Ora_To_Hour = 12; //time of the day // int Min_To_Min = 30; //time of the day // bool inTimeInterval(datetime t, int TOD_From_Hour, int TOD_From_Min, int TOD_To_Hour, int TOD_To_Min) // { // string TOD = TimeToString(t, TIME_MINUTES); // string TOD_From = StringFormat("%02d", TOD_From_Hour)+":"+StringFormat("%02d", TOD_From_Min); // string TOD_To = StringFormat("%02d", TOD_To_Hour)+":"+StringFormat("%02d", TOD_To_Min); // return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0) // || (StringCompare(TOD_From, TOD_To)> 0 // && ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59")<= 0) // || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0)))); // } // //----------------------------------------------------------------------------------------------------//
First you need to change Ora to TOD
//----------------------------------------------------------------------------------------------------// int TOD_From_Hour = 08; //time of the day // int Min_From_Min = 00; //time of the day // int TOD_To_Hour = 12; //time of the day // int Min_To_Min = 30; //time of the day // bool inTimeInterval(datetime t, int TOD_From_Hour, int TOD_From_Min, int TOD_To_Hour, int TOD_To_Min) // { // string TOD = TimeToString(t, TIME_MINUTES); // string TOD_From = StringFormat("%02d", TOD_From_Hour)+":"+StringFormat("%02d", TOD_From_Min); // string TOD_To = StringFormat("%02d", TOD_To_Hour)+":"+StringFormat("%02d", TOD_To_Min); // return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0) // || (StringCompare(TOD_From, TOD_To)> 0 // && ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59")<= 0) // || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0)))); // } // //----------------------------------------------------------------------------------------------------// First you need to change Ora to TOD. Then it will be matching integer with function. I will try this too, because i need 3 session time filter too. Ihave tried withif (!inTimeInterval(Time[i], TOD_From_Hour, Min_From_Min, TOD_To_Hour, Min_To_Min) || !inTimeInterval(Time[i], 14, 30, 20, 00)) return;but with no luck. No trade at all and not working in backtest too.
fly7680:
hello, I plugged in my code a time lock but I have problems. I have duplicate this code, but in the time 14:30 20:00 signals that I receive are all wrong:
if(TimeHour(TimeLocal())>=Ora_From_Hour && TimeMinute(TimeLocal())>=Min_From_Min && TimeHour(TimeLocal())<=Ora_To_Hour && TimeMinute(TimeLocal())<=Min_To_Min ) { // Your Codes.... }
if(TimeHour(TimeLocal())>=Ora_From_Hour && TimeMinute(TimeLocal())>=Min_From_Min
If you are looking for 10:30 or later, code fails on 11:00 to 11:29, 12:00 to 11:29, etc.
int from=Ora_From_Hour * 3600 + Min_From_Min * 60; int to=Ora_To_Hour * 3600 + Min_To_Min * 60; int now=time(); return from >= now && now < to;Find bar of the same time one day ago - MQL4 programming forum 2017.10.06
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
hello, I plugged in my code a time lock but I have problems. I have duplicate this code, but in the time 14:30 20:00 signals that I receive are all wrong: