Updated for ver. 3.18 - added new indicators
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -15,6 +15,7 @@
|
||||
double InpBarSize = 180; // Range bar size
|
||||
ENUM_BAR_SIZE_CALC_MODE InpBarSizeCalcMode = BAR_SIZE_ABSOLUTE_TICKS; // Bar size calculation
|
||||
int InpShowNumberOfDays = 7; // Show history for number of days
|
||||
datetime InpShowFromDate = 0; // Show history starting from
|
||||
ENUM_TIMEFRAMES InpAtrTimeFrame = PERIOD_D1; // ATR timeframe setting
|
||||
int InpAtrPeriod = 14; // ATR period setting
|
||||
ENUM_BOOL InpResetOpenOnNewTradingDay = true; // Synchronize first bar's open on new day
|
||||
@@ -24,6 +25,7 @@
|
||||
input double InpBarSize = 100; // Range bar size
|
||||
input ENUM_BAR_SIZE_CALC_MODE InpBarSizeCalcMode = BAR_SIZE_ABSOLUTE_TICKS;// Bar size calculation
|
||||
input int InpShowNumberOfDays = 5; // Show history for number of days
|
||||
input datetime InpShowFromDate = 0; // Show history starting from
|
||||
input group "### ATR bar size calculation settings"
|
||||
input ENUM_TIMEFRAMES InpAtrTimeFrame = PERIOD_D1; // ATR timeframe setting
|
||||
input int InpAtrPeriod = 14; // ATR period setting
|
||||
@@ -35,6 +37,7 @@
|
||||
double InpBarSize = 180; // Range bar size
|
||||
ENUM_BAR_SIZE_CALC_MODE InpBarSizeCalcMode = BAR_SIZE_ABSOLUTE_TICKS;// Bar size calculation
|
||||
int InpShowNumberOfDays = 7; // Show history for number of days
|
||||
datetime InpShowFromDate = 0; // Show history starting from
|
||||
ENUM_TIMEFRAMES InpAtrTimeFrame = PERIOD_D1; // ATR timeframe setting
|
||||
int InpAtrPeriod = 14; // ATR period setting
|
||||
ENUM_BOOL InpResetOpenOnNewTradingDay = true; // Synchronize first bar's open on new day
|
||||
@@ -57,6 +60,7 @@ struct RANGEBAR_SETTINGS
|
||||
ENUM_TIMEFRAMES atrTimeFrame;
|
||||
int atrPeriod;
|
||||
int showNumberOfDays;
|
||||
datetime showFromDate;
|
||||
ENUM_BOOL resetOpenOnNewTradingDay;
|
||||
};
|
||||
|
||||
@@ -109,6 +113,7 @@ void CRangeBarCustomChartSettigns::SetCustomChartSettings()
|
||||
settings.barSize = InpBarSize;
|
||||
settings.barSizeCalcMode = InpBarSizeCalcMode;
|
||||
settings.showNumberOfDays = InpShowNumberOfDays;
|
||||
settings.showFromDate = InpShowFromDate;
|
||||
settings.atrTimeFrame = InpAtrTimeFrame;
|
||||
settings.atrPeriod = InpAtrPeriod;
|
||||
settings.resetOpenOnNewTradingDay = InpResetOpenOnNewTradingDay;
|
||||
|
||||
@@ -199,6 +199,7 @@ int RangeBars::Init()
|
||||
s.barSize,
|
||||
s.barSizeCalcMode,
|
||||
s.showNumberOfDays,
|
||||
s.showFromDate,
|
||||
"=",
|
||||
s.atrTimeFrame,
|
||||
s.atrPeriod,
|
||||
@@ -242,8 +243,7 @@ int RangeBars::Init()
|
||||
cis.ChannelAppliedPrice,
|
||||
cis.ChannelMultiplier,
|
||||
cis.ChannelBandsDeviations,
|
||||
cis.ChannelPriceLabel,
|
||||
cis.ChannelMidPriceLabel,
|
||||
cis.ChannelPriceLabels,
|
||||
"=",
|
||||
true); // used in EA
|
||||
// TopBottomPaddingPercentage,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//
|
||||
// Copyright 2018-19, Artur Zas
|
||||
// Copyright 2018-2021, Artur Zas
|
||||
// GNU General Public License v3.0 -> https://github.com/9nix6/Median-and-Turbo-Renko-indicator-bundle/blob/master/LICENSE
|
||||
// https://www.az-invest.eu
|
||||
// https://www.mql5.com/en/users/arturz
|
||||
//
|
||||
@@ -8,46 +9,100 @@ class CTimeControl
|
||||
{
|
||||
private:
|
||||
|
||||
int scheduleID;
|
||||
|
||||
int startHH;
|
||||
int startMM;
|
||||
string start;
|
||||
datetime startOfSession;
|
||||
|
||||
int endHH;
|
||||
int endMM;
|
||||
string end;
|
||||
datetime endOfSession;
|
||||
|
||||
bool scheduleEnabled;
|
||||
|
||||
public:
|
||||
|
||||
CTimeControl(int id = 0) { scheduleID = id; };
|
||||
|
||||
void SetValidTraingHours(string _from = "0:00", string _to = "0:00");
|
||||
void SetValidTraingHours(bool _unused, string _timeSpan = "0:00-0:00");
|
||||
bool IsTradingTimeValid();
|
||||
bool IsScheduleEnabled() { return scheduleEnabled; };
|
||||
void UpdateSessionDateTime(int addSecods = 0);
|
||||
datetime GetSessionStartTime() { return startOfSession; };
|
||||
datetime GetSessionEndTime() { return endOfSession; };
|
||||
void MoveSessionStartToNow();
|
||||
string ToString();
|
||||
|
||||
private:
|
||||
|
||||
void StringToHHMM(string value, int &HH, int &MM);
|
||||
bool StringToHHMMRange(string value, int &startHH, int &startMM, string& _start, int &endHH, int &endMM, string& _end);
|
||||
void SetScheduleState();
|
||||
};
|
||||
|
||||
void CTimeControl::SetValidTraingHours(string _from,string _to)
|
||||
void CTimeControl::SetValidTraingHours(string _from, string _to)
|
||||
{
|
||||
this.start = _from;
|
||||
this.end = _to;
|
||||
|
||||
StringToHHMM(this.start, this.startHH, this.startMM);
|
||||
StringToHHMM(this.end, this.endHH, this.endMM);
|
||||
UpdateSessionDateTime();
|
||||
|
||||
if(this.startHH == 0 && this.startMM == 0 && this.endHH == 0 && this.endMM == 0)
|
||||
SetScheduleState();
|
||||
}
|
||||
|
||||
void CTimeControl::MoveSessionStartToNow()
|
||||
{
|
||||
datetime now = TimeCurrent();
|
||||
|
||||
MqlDateTime temp;
|
||||
TimeToStruct(now,temp);
|
||||
|
||||
startHH = temp.hour;
|
||||
startMM = temp.min;
|
||||
start = StringFormat("%02d:%02d", startHH, startMM);
|
||||
|
||||
UpdateSessionDateTime(temp.sec + 1);
|
||||
}
|
||||
|
||||
void CTimeControl::UpdateSessionDateTime(int addSecods = 0)
|
||||
{
|
||||
datetime now = TimeCurrent();
|
||||
|
||||
MqlDateTime temp;
|
||||
TimeToStruct(now,temp);
|
||||
|
||||
if(addSecods > 0)
|
||||
{
|
||||
scheduleEnabled = false;
|
||||
string startTimeTemp = StringFormat("%s:%02d", this.start, addSecods);
|
||||
startOfSession = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+startTimeTemp);
|
||||
}
|
||||
else
|
||||
{
|
||||
scheduleEnabled = true;
|
||||
startOfSession = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+this.start);
|
||||
}
|
||||
|
||||
endOfSession = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+this.end);
|
||||
}
|
||||
|
||||
void CTimeControl::SetValidTraingHours(bool _unused, string _timeSpan = "0:00-0:00")
|
||||
{
|
||||
if(!StringToHHMMRange(_timeSpan, this.startHH, this.startMM, this.start, this.endHH, this.endMM, this.end))
|
||||
return;
|
||||
|
||||
UpdateSessionDateTime();
|
||||
SetScheduleState();
|
||||
}
|
||||
|
||||
bool CTimeControl::IsTradingTimeValid()
|
||||
{
|
||||
if(scheduleEnabled == false)
|
||||
return true;
|
||||
return true;
|
||||
|
||||
datetime now = TimeCurrent();
|
||||
|
||||
@@ -57,12 +112,32 @@ bool CTimeControl::IsTradingTimeValid()
|
||||
datetime _start = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+this.start);
|
||||
datetime _end = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+this.end);
|
||||
|
||||
if((now >= _start) && (now <= _end))
|
||||
if(_start <= now && now <= _end)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
string CTimeControl::ToString()
|
||||
{
|
||||
string tradingScheduleName = "Trading schedule ";
|
||||
|
||||
tradingScheduleName += (scheduleID != 0)
|
||||
? (string)scheduleID+" "
|
||||
: "";
|
||||
|
||||
if(IsScheduleEnabled())
|
||||
{
|
||||
return tradingScheduleName+"ON ("+this.start+" to "+this.end+") | trading "+(IsTradingTimeValid()
|
||||
? "enabled"
|
||||
: "disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
return tradingScheduleName+"NOT USED";
|
||||
}
|
||||
}
|
||||
|
||||
void CTimeControl::StringToHHMM(string value, int &HH, int &MM)
|
||||
{
|
||||
MqlDateTime temp;
|
||||
@@ -73,4 +148,46 @@ void CTimeControl::StringToHHMM(string value, int &HH, int &MM)
|
||||
|
||||
HH = temp.hour;
|
||||
MM = temp.min;
|
||||
}
|
||||
}
|
||||
|
||||
bool CTimeControl::StringToHHMMRange(string value, int &_startHH, int &_startMM, string& _start, int &_endHH, int &_endMM, string& _end)
|
||||
{
|
||||
string result[];
|
||||
int count = StringSplit(value, '-', result);
|
||||
if(count != 2)
|
||||
return false;
|
||||
|
||||
MqlDateTime temp;
|
||||
TimeToStruct(TimeCurrent(),temp);
|
||||
|
||||
// Start time
|
||||
_start = result[0];
|
||||
datetime fullDateTime = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+_start);
|
||||
TimeToStruct(fullDateTime,temp);
|
||||
|
||||
startHH = temp.hour;
|
||||
startMM = temp.min;
|
||||
|
||||
// End time
|
||||
TimeToStruct(TimeCurrent(),temp);
|
||||
_end = result[1];
|
||||
fullDateTime = StringToTime((string)temp.year+"."+(string)temp.mon+"."+(string)temp.day+" "+_end);
|
||||
TimeToStruct(fullDateTime,temp);
|
||||
|
||||
endHH = temp.hour;
|
||||
endMM = temp.min;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CTimeControl::SetScheduleState()
|
||||
{
|
||||
if(this.startHH == 0 && this.startMM == 0 && this.endHH == 0 && this.endMM == 0)
|
||||
{
|
||||
scheduleEnabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
scheduleEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//
|
||||
// Copyright 2017-2021, Artur Zas
|
||||
// GNU General Public License v3.0 -> https://github.com/9nix6/Median-and-Turbo-Renko-indicator-bundle/blob/master/LICENSE
|
||||
// https://www.az-invest.eu
|
||||
// https://www.mql5.com/en/users/arturz
|
||||
//
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//
|
||||
// Copyright 2018-2021, Artur Zas
|
||||
// GNU General Public License v3.0 -> https://github.com/9nix6/Median-and-Turbo-Renko-indicator-bundle/blob/master/LICENSE
|
||||
// https://www.az-invest.eu
|
||||
// https://www.mql5.com/en/users/arturz
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user