Updated for ver. 3.18 - added new indicators

This commit is contained in:
Artur
2021-07-28 21:42:13 +02:00
parent 419ea51fca
commit ee4a0d0cec
76 changed files with 347 additions and 32 deletions
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;
+2 -2
View File
@@ -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,
+125 -8
View File
@@ -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
View File
@@ -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
View File
@@ -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
//