318 lines
10 KiB
Plaintext
318 lines
10 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| RangeBarSettings.mqh ver 1.04 |
|
|
//| Copyright 2017, AZ-iNVEST |
|
|
//| http://www.az-invest.eu |
|
|
//+------------------------------------------------------------------+
|
|
|
|
#property copyright "Copyright 2017, AZ-iNVEST"
|
|
#property link "http://www.az-invest.eu"
|
|
|
|
enum ENUM_CHANNEL_TYPE
|
|
{
|
|
None = 0, // None
|
|
Donchian_Channel, // Donchian Channel
|
|
Bollinger_Bands, // Bollinger Bands
|
|
SuperTrend, // Super Trend
|
|
// VWAP,
|
|
};
|
|
|
|
#ifdef SHOW_INDICATOR_INPUTS
|
|
|
|
input int barSizeInTicks = 100; // Range bar size (in points)
|
|
double customBarSize = barSizeInTicks * Point();
|
|
bool useTickVolume = true; // Use tick volume (for FX)
|
|
input datetime _startFromDateTime = 0; // Start building chart from date/time
|
|
datetime startFromDateTime = 0;
|
|
input bool resetOpenOnNewTradingDay = false; // Synchronize first bar's open on new day
|
|
input bool showNextBarLevels = true; // Show current bar's close projections
|
|
input color HighThresholdIndicatorColor = clrLime; // Bullish bar projection color
|
|
input color LowThresholdIndicatorColor = clrRed; // Bearish bar projection color
|
|
input bool showCurrentBarOpenTime = true; // Display chart info and current bar's open time
|
|
input color InfoTextColor = clrWhite; // Current bar's open time info color
|
|
input bool UseSoundSignalOnNewBar = false; // Play sound on new bar
|
|
input bool OnlySignalReversalBars = false; // Only signal reversals
|
|
input bool UseAlertWindow = false; // Display Alert window with new bar info
|
|
input bool SendPushNotifications = false; // Send new bar info push notification to smartphone
|
|
input string SoundFileBull = "news.wav"; // Use sound file for bullish bar close
|
|
input string SoundFileBear = "news.wav"; // Use sound file for bearish bar close
|
|
input bool MA1on = false; // Show first MA
|
|
input int MA1period = 20; // 1st MA period
|
|
input ENUM_MA_METHOD MA1method = MODE_EMA; // 1st MA metod
|
|
input ENUM_APPLIED_PRICE MA1applyTo = PRICE_CLOSE; //1st MA apply to
|
|
input int MA1shift = 0; //1st MA shift
|
|
input bool MA2on = false; // Show second MA
|
|
input int MA2period = 50; // 2nd MA period
|
|
input ENUM_MA_METHOD MA2method = MODE_EMA; // 2nd MA method
|
|
input ENUM_APPLIED_PRICE MA2applyTo = PRICE_CLOSE; // 2nd MA apply to
|
|
input int MA2shift = 0; //2nd MA shift
|
|
input ENUM_CHANNEL_TYPE ShowChannel = None; // Show Channel
|
|
input string Channel_Settings = "--------------------------"; // Channel settings
|
|
input int DonchianPeriod = 20; // Donchian Channel period
|
|
input ENUM_APPLIED_PRICE BBapplyTo = PRICE_CLOSE; //Bollinger Bands apply to
|
|
input int BollingerBandsPeriod = 20; // Bollinger Bands period
|
|
input double BollingerBandsDeviations = 2.0; // Bollinger Bands deviations
|
|
input int SuperTrendPeriod = 10; // Super Trend period
|
|
input double SuperTrendMultiplier=1.7; // Super Trend multiplier
|
|
input string Misc_Settings = "--------------------------"; // Misc settings
|
|
input bool UsedInEA = false; // Indicator used in EA via iCustom()
|
|
|
|
#else
|
|
|
|
int barSizeInTicks;
|
|
bool useTickVolume = true;
|
|
datetime startFromDateTime;
|
|
datetime _startFromDateTime = 0;
|
|
bool resetOpenOnNewTradingDay;
|
|
|
|
//
|
|
// This block should always be set to the follwong values
|
|
//
|
|
|
|
bool showNextBarLevels = false;
|
|
color HighThresholdIndicatorColor = clrNONE;
|
|
color LowThresholdIndicatorColor = clrNONE;
|
|
bool showCurrentBarOpenTime = false;
|
|
color InfoTextColor = clrNONE;
|
|
bool UseSoundSignalOnNewBar = false;
|
|
bool OnlySignalReversalBars = false;
|
|
bool UseAlertWindow = false;
|
|
bool SendPushNotifications = false;
|
|
string SoundFileBull = "";
|
|
string SoundFileBear = "";
|
|
|
|
bool UsedInEA = true; // This should always be set to TRUE for EAs & Indicators
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
bool MA1on;
|
|
int MA1period;
|
|
ENUM_MA_METHOD MA1method;
|
|
ENUM_APPLIED_PRICE MA1applyTo;
|
|
int MA1shift;
|
|
|
|
bool MA2on;
|
|
int MA2period;
|
|
ENUM_MA_METHOD MA2method;
|
|
ENUM_APPLIED_PRICE MA2applyTo;
|
|
int MA2shift;
|
|
|
|
ENUM_CHANNEL_TYPE ShowChannel;
|
|
int DonchianPeriod;
|
|
ENUM_APPLIED_PRICE BBapplyTo;
|
|
int BollingerBandsPeriod;
|
|
double BollingerBandsDeviations;
|
|
int SuperTrendPeriod = 10;
|
|
double SuperTrendMultiplier=1.7;
|
|
|
|
#endif
|
|
|
|
struct RANGEBAR_SETTINGS
|
|
{
|
|
int barSizeInTicks;
|
|
bool useTickVolume;
|
|
datetime _startFromDateTime;
|
|
bool resetOpenOnNewTradingDay;
|
|
|
|
bool MA1on;
|
|
int MA1period;
|
|
ENUM_MA_METHOD MA1method;
|
|
ENUM_APPLIED_PRICE MA1applyTo;
|
|
int MA1shift;
|
|
|
|
bool MA2on;
|
|
int MA2period;
|
|
ENUM_MA_METHOD MA2method;
|
|
ENUM_APPLIED_PRICE MA2applyTo;
|
|
int MA2shift;
|
|
|
|
ENUM_CHANNEL_TYPE ShowChannel;
|
|
|
|
int DonchianPeriod;
|
|
|
|
ENUM_APPLIED_PRICE BBapplyTo;
|
|
int BollingerBandsPeriod;
|
|
double BollingerBandsDeviations;
|
|
|
|
int SuperTrendPeriod;
|
|
double SuperTrendMultiplier;
|
|
};
|
|
|
|
class RangeBarSettings
|
|
{
|
|
protected:
|
|
|
|
string settingsFileName;
|
|
RANGEBAR_SETTINGS settings;
|
|
|
|
public:
|
|
|
|
RangeBarSettings(void);
|
|
~RangeBarSettings(void);
|
|
|
|
void Save(void);
|
|
bool Load(void);
|
|
void Delete(void);
|
|
bool Changed(void);
|
|
|
|
RANGEBAR_SETTINGS Get(void);
|
|
void Debug(void);
|
|
};
|
|
|
|
void RangeBarSettings::RangeBarSettings(void)
|
|
{
|
|
this.settingsFileName = "RangeBars"+(string)ChartID()+".set";
|
|
|
|
}
|
|
|
|
void RangeBarSettings::~RangeBarSettings(void)
|
|
{
|
|
|
|
}
|
|
|
|
void RangeBarSettings::Save(void)
|
|
{
|
|
settings.barSizeInTicks = barSizeInTicks;
|
|
settings.useTickVolume = useTickVolume;
|
|
settings._startFromDateTime = startFromDateTime;
|
|
settings.resetOpenOnNewTradingDay = resetOpenOnNewTradingDay;
|
|
settings.MA1on = MA1on;
|
|
settings.MA1period = MA1period;
|
|
settings.MA1method = MA1method;
|
|
settings.MA1applyTo = MA1applyTo;
|
|
settings.MA1shift = MA1shift;
|
|
settings.MA2on = MA2on;
|
|
settings.MA2period = MA2period;
|
|
settings.MA2method = MA2method;
|
|
settings.MA2applyTo = MA2applyTo;
|
|
settings.MA2shift = MA2shift;
|
|
settings.ShowChannel = ShowChannel;
|
|
settings.DonchianPeriod = DonchianPeriod;
|
|
settings.BBapplyTo = BBapplyTo;
|
|
settings.BollingerBandsPeriod = BollingerBandsPeriod;
|
|
settings.BollingerBandsDeviations = BollingerBandsDeviations;
|
|
settings.SuperTrendPeriod = SuperTrendPeriod;
|
|
settings.SuperTrendMultiplier = SuperTrendMultiplier;
|
|
|
|
if(MQLInfoInteger((int)MQL5_TESTING))
|
|
return;
|
|
|
|
this.Delete();
|
|
|
|
int handle = FileOpen(this.settingsFileName,FILE_SHARE_READ|FILE_WRITE|FILE_BIN);
|
|
FileWriteStruct(handle,this.settings);
|
|
FileClose(handle);
|
|
}
|
|
|
|
void RangeBarSettings::Delete(void)
|
|
{
|
|
if(FileIsExist(this.settingsFileName))
|
|
FileDelete(this.settingsFileName);
|
|
}
|
|
|
|
bool RangeBarSettings::Load(void)
|
|
{
|
|
#ifdef SHOW_INDICATOR_INPUTS
|
|
this.settings.barSizeInTicks = barSizeInTicks;
|
|
this.settings.useTickVolume = useTickVolume;
|
|
this.settings._startFromDateTime = _startFromDateTime;
|
|
this.settings.resetOpenOnNewTradingDay = resetOpenOnNewTradingDay;
|
|
this.settings.MA1on = MA1on;
|
|
this.settings.MA1period = MA1period;
|
|
this.settings.MA1method = MA1method;
|
|
this.settings.MA1applyTo = MA1applyTo;
|
|
this.settings.MA1shift = MA1shift;
|
|
this.settings.MA2on = MA2on;
|
|
this.settings.MA2period = MA2period;
|
|
this.settings.MA2method = MA2method;
|
|
this.settings.MA2applyTo = MA2applyTo;
|
|
this.settings.MA2shift = MA2shift;
|
|
this.settings.ShowChannel = ShowChannel;
|
|
this.settings.DonchianPeriod = DonchianPeriod;
|
|
this.settings.BBapplyTo = BBapplyTo;
|
|
this.settings.BollingerBandsPeriod = BollingerBandsPeriod;
|
|
this.settings.BollingerBandsDeviations = BollingerBandsDeviations;
|
|
this.settings.SuperTrendPeriod = SuperTrendPeriod;
|
|
this.settings.SuperTrendMultiplier = SuperTrendMultiplier;
|
|
return true;
|
|
#else
|
|
|
|
if(!FileIsExist(this.settingsFileName))
|
|
return false;
|
|
|
|
int handle = FileOpen(this.settingsFileName,FILE_SHARE_READ|FILE_BIN);
|
|
if(handle == INVALID_HANDLE)
|
|
return false;
|
|
|
|
if(FileReadStruct(handle,this.settings) <= 0)
|
|
{
|
|
Print("Failed loading settigns!");
|
|
FileClose(handle);
|
|
return false;
|
|
}
|
|
|
|
// this.Debug();
|
|
FileClose(handle);
|
|
return true;
|
|
|
|
#endif
|
|
}
|
|
|
|
RANGEBAR_SETTINGS RangeBarSettings::Get(void)
|
|
{
|
|
this.Debug();
|
|
return this.settings;
|
|
}
|
|
|
|
bool RangeBarSettings::Changed(void)
|
|
{
|
|
if(MQLInfoInteger((int)MQL5_TESTING))
|
|
return false;
|
|
|
|
static datetime prevFileTime = 0;
|
|
|
|
if(!FileIsExist(this.settingsFileName))
|
|
return false;
|
|
|
|
int handle = FileOpen(this.settingsFileName,FILE_SHARE_READ|FILE_BIN);
|
|
datetime currFileTime = (datetime)FileGetInteger(handle,FILE_CREATE_DATE);
|
|
FileClose(handle);
|
|
|
|
if(prevFileTime != currFileTime)
|
|
{
|
|
prevFileTime = currFileTime;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void RangeBarSettings::Debug(void)
|
|
{
|
|
Print("RangeBars settings:");
|
|
Print("barSizeInTicks = "+(string)settings.barSizeInTicks);
|
|
Print("useTickVolume = "+(string)settings.useTickVolume);
|
|
Print("startFromDateTime = "+(string)settings._startFromDateTime);
|
|
Print("resetOpenOnNewTradingDay = "+(string)settings.resetOpenOnNewTradingDay);
|
|
Print("MA1on = "+(string)settings.MA1on);
|
|
Print("MA1period = "+(string)settings.MA1period);
|
|
Print("MA1method = "+(string)settings.MA1method);
|
|
Print("MA1applyTo = "+(string)settings.MA1applyTo);
|
|
Print("MA1shift = "+(string)settings.MA1shift);
|
|
Print("MA2on = "+(string)settings.MA2on);
|
|
Print("MA2period = "+(string)settings.MA2period);
|
|
Print("MA2method = "+(string)settings.MA2method);
|
|
Print("MA2applyTo = "+(string)settings.MA2applyTo);
|
|
Print("MA2shift = "+(string)settings.MA1shift);
|
|
Print("ShowChannel = "+(string)settings.ShowChannel);
|
|
Print("DonchianPeriod = "+(string)settings.DonchianPeriod);
|
|
Print("BBapplyTo = "+(string)settings.BBapplyTo);
|
|
Print("BBperiod = "+(string)settings.BollingerBandsPeriod);
|
|
Print("BBdeviations = "+(string)settings.BollingerBandsDeviations);
|
|
Print("SuperTrendPeriod = "+(string)settings.SuperTrendPeriod);
|
|
Print("SuperTrendMultiplier = "+(string)settings.SuperTrendMultiplier);
|
|
|
|
Print("UsedInEA = "+(string)UsedInEA);
|
|
|
|
} |