complete xrl indicator ...
This commit is contained in:
@@ -1,652 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// SaherElm IT Center X121EA MQL5 Expert Advisor
|
|
||||||
// -------------------------------------------------
|
|
||||||
// Name: X121EA
|
|
||||||
// Description: an Exper Advisor which used RSI and MA
|
|
||||||
// to Analyse Market ...
|
|
||||||
//
|
|
||||||
// Maintainer:
|
|
||||||
// ------------
|
|
||||||
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////x
|
|
||||||
//
|
|
||||||
// Global Properties ...
|
|
||||||
#property copyright "Copyright 2023, SaherElm IT Center"
|
|
||||||
#property link "https://saherelm.ir"
|
|
||||||
#property version "1.00"
|
|
||||||
#property description "SaherElm X121EA"
|
|
||||||
#property strict
|
|
||||||
|
|
||||||
//
|
|
||||||
// Imports ...
|
|
||||||
#include "../Helpers/x-saherelm.xct.helper.mq5"
|
|
||||||
#include "../Helpers/x-saherelm.xcc.helper.mq5"
|
|
||||||
#include "../Classes/x-saherelm.x121.setup.xea.mq5"
|
|
||||||
|
|
||||||
//
|
|
||||||
#define ShortName "X121EA"
|
|
||||||
|
|
||||||
//
|
|
||||||
// Inputs ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Common ...
|
|
||||||
input group "Common";
|
|
||||||
input long x121EAMagicNumber = 78692110; // Magic Number
|
|
||||||
input int x121EASlippage = 10; // Slippgae
|
|
||||||
|
|
||||||
//
|
|
||||||
// Symbols ...
|
|
||||||
input group "Symbol(s)";
|
|
||||||
input string x121EASymbols = "EURUSDb,USDCHFb,EURCHFb,USDJPYb,EURJPYb,GBPUSDb"; // Symbols
|
|
||||||
input bool x121EAUseAllSymbols = false; // Use All Available Symbols
|
|
||||||
input bool x121EAUseAllWatchListSymbols = false; // Use All Watch List Symbols
|
|
||||||
|
|
||||||
//
|
|
||||||
// Signals ...
|
|
||||||
input group "Signals";
|
|
||||||
input bool x121EAAllowLong = true; // Allow Long Trades
|
|
||||||
input bool x121EAAllowShort = true; // Allow Short Trades
|
|
||||||
input int x121EAStartSignallingHoure = 3; // Start Signalling at Specific Time
|
|
||||||
input int x121EAEndSignallingHoure = 22; // End Signalling at Specific Time
|
|
||||||
input int x121EACloseOnSpecificTime = -1; // Close All Trades in Specific Time
|
|
||||||
input int x121EADelayBetweenTwoSignal = 10; // Delay Between two Same Signals
|
|
||||||
input int x121EAReuiredSignalVerifications = 4; // Required Verifications for Signals
|
|
||||||
input bool x121EAExecuteSignalsOnBreakout = false; // Execute Signals On Breakouts
|
|
||||||
input bool x121EAGetVerificationFromOtherTimeFrames = true; // Get Verifications from Other Time Frames
|
|
||||||
|
|
||||||
//
|
|
||||||
// Risk Management ...
|
|
||||||
input group "Risk Management";
|
|
||||||
input double x121EAVolume = 0.01; // Static Volume
|
|
||||||
input double x121EATPPoint = 1000; // TP Point
|
|
||||||
input double x121EASLPoint = 1000; // SL Point
|
|
||||||
input bool x121EAIgnoreSL = false; // Ignore Calculated SL
|
|
||||||
input bool x121EAIgnoreTP = false; // Ignore Calculated TP
|
|
||||||
input bool x121EACloseOnOpposit = false; // Close all Positions on Opposit
|
|
||||||
input int x121EAMaxAllowedTrades = 2; // Max Allowed Positions Per Symbol
|
|
||||||
input bool x121EAUseMaxAllowedPerDirection = true; // Use Max Allowed Positions Per Direction
|
|
||||||
input int x121EAMinFreeMargingForOpenTrades = 900; // Min Margin For Opening Trades
|
|
||||||
input bool x121EAIncreaseNextSignalsVolume = true; // Increase Next Signals Volume
|
|
||||||
input double x121EAIncreaseNextSignalsVolumeMultiplier = 1; // Increase Next Signals Volume Multiplier
|
|
||||||
input bool x121EAAcceptNextDirectionalSignalsWhenFirstInProfit = true; // Accept Same Symbol/Type Signal when Last in Profit
|
|
||||||
|
|
||||||
//
|
|
||||||
input group "Trailling";
|
|
||||||
input bool x121EAAllowTrailStop = true; // Enable Trailling Stop Losses
|
|
||||||
input bool x121EADisableTrailingWhenOpposit = true; // Disable Trailling When has Opposite In Drawdown
|
|
||||||
input double x121EAFirstTrailDistance = 100; // Start Trailling Distance
|
|
||||||
input double x121EAFirstTrailPoint = 60; // First Stop Trail
|
|
||||||
input double x121EANextTrailDistance = 50; // Next Trailling Distance
|
|
||||||
input double x121EANextTrailPoint = 25; // Next Trailling Step
|
|
||||||
|
|
||||||
//
|
|
||||||
input group "Supporting";
|
|
||||||
input bool x121EAAllowSupport = false; // Allow Support Signals
|
|
||||||
input bool x121EASupportOnlyForces = false; // Support Only Force Signals
|
|
||||||
double x121EASupportDistance = 0; // Supporting Distance
|
|
||||||
input int x121EAMaxNumberOfSupports = 0; // Max Number of Support Signals
|
|
||||||
input double x121EASupportVolumeMultiplier = 0; // Support Signals Volume Multiplier
|
|
||||||
input double x121EAMaxAllowedSupportVolume = 0; // Max Allowed Support Signals Volume
|
|
||||||
|
|
||||||
//
|
|
||||||
input group "Grid";
|
|
||||||
input bool x121EAAllowGrid = false; // Allow Grid Signals
|
|
||||||
input bool x121EAGridOnlyForces = false; // Grid Only Force Signals
|
|
||||||
input int x121EAMaxNumberOfGrids = 0; // Max Number of Grid Signals
|
|
||||||
input double x121EAGridDistance = 0; // Grid Distance
|
|
||||||
input double x121EAGridVolumeMultiplier = 0; // Grid Volume Multiplier
|
|
||||||
input double x121EAMaxAllowedGridVolume = 0; // Max Allowed Grid Signals Volume
|
|
||||||
|
|
||||||
//
|
|
||||||
input group "Recovery";
|
|
||||||
input bool x121EAAllowRecovery = false; // Allow Recovery Signals
|
|
||||||
input bool x121EARecoverOnlyForces = false; // Recover Only Force Signals
|
|
||||||
input int x121EAMaxNumberOfRecoveries = 0; // Max Number of Recovery Signals
|
|
||||||
input double x121EARecoveryDistance = 0; // Recovery Distance
|
|
||||||
input double x121EARecoveryVolumeMultiplier = 0; // Recovery Volume Multiplier
|
|
||||||
input double x121EAMaxAllowedRecoveryVolume = 0; // Max Allowed Recovery Signals Volume
|
|
||||||
|
|
||||||
//
|
|
||||||
input group "Hedging";
|
|
||||||
input int x121EARestingAfterHedge = 1000; // Resting Seconds After Hedge
|
|
||||||
input double x121EAMinRequiredProfitPerTrade = 0.3; // Minimum Required Profit for Hedging
|
|
||||||
input double x121EAMinRequiredProfitPerVolumeFactor = 0.01; // Minimum Required Profit for Hedging Per Volume
|
|
||||||
|
|
||||||
//
|
|
||||||
// Alert ...
|
|
||||||
input group "Alerts";
|
|
||||||
input bool x121EAEnableAlerts = true; // Enable Alerts
|
|
||||||
input bool x121EALogAlerts = true; // Log Alerts
|
|
||||||
input bool x121EAMailAlerts = false; // Mail Alerts
|
|
||||||
input bool x121EAPushAlerts = false; // Push Alerts
|
|
||||||
input bool x121EATerminalAlerts = false; // Terminal Alerts
|
|
||||||
|
|
||||||
//
|
|
||||||
// Definitions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Local Variables ...
|
|
||||||
|
|
||||||
//
|
|
||||||
string x121EAUsedSymbols[];
|
|
||||||
XSCX121SetupEA *x121EA;
|
|
||||||
|
|
||||||
//
|
|
||||||
XSCXCTHelper *x121EACTHelper;
|
|
||||||
XSCXCCHelper *x121EACCHelper;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Event Handlers ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Initialization ...
|
|
||||||
int OnInit()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
drawPrefix = ShortName;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (!InitialEA())
|
|
||||||
{
|
|
||||||
return INIT_PARAMETERS_INCORRECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Init Succeed ...
|
|
||||||
return INIT_SUCCEEDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// DeInitialization ...
|
|
||||||
void OnDeinit(const int reason)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function
|
|
||||||
// REASON_REMOVE 1 Program removed from a chart
|
|
||||||
// REASON_RECOMPILE 2 Program recompiled
|
|
||||||
// REASON_CHARTCHANGE 3 A symbol or a chart period is changed
|
|
||||||
// REASON_CHARTCLOSE 4 Chart closed
|
|
||||||
// REASON_PARAMETERS 5 Inputs changed by a user
|
|
||||||
// REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings
|
|
||||||
// REASON_TEMPLATE 7 Another chart template applied
|
|
||||||
// REASON_INITFAILED 8 The OnInit() handler returned a non-zero value
|
|
||||||
// REASON_CLOSE 9 Terminal closed
|
|
||||||
|
|
||||||
//
|
|
||||||
// De Initialize XSampleEA Providers ...
|
|
||||||
delete x121EA;
|
|
||||||
|
|
||||||
//
|
|
||||||
delete x121EACTHelper;
|
|
||||||
delete x121EACCHelper;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// On Tick Handler ...
|
|
||||||
void OnTick()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
x121EA.OnTick();
|
|
||||||
|
|
||||||
//
|
|
||||||
X121ReportState();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Custom Functions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool InitialEA()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bar Timer ...
|
|
||||||
XCTInputs ctInputs;
|
|
||||||
ctInputs.Default();
|
|
||||||
x121EACTHelper = new XSCXCTHelper();
|
|
||||||
result = x121EACTHelper.Init(
|
|
||||||
_Symbol,
|
|
||||||
_Period,
|
|
||||||
ctInputs //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bar Styles ...
|
|
||||||
XCCInputs ccInputs;
|
|
||||||
ccInputs.Default();
|
|
||||||
x121EACCHelper = new XSCXCCHelper();
|
|
||||||
result = x121EACCHelper.Init(
|
|
||||||
_Symbol,
|
|
||||||
_Period,
|
|
||||||
ccInputs //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// TesterHideIndicators(true);
|
|
||||||
|
|
||||||
//
|
|
||||||
string inputSymbols[];
|
|
||||||
int inputSymbolsCount = SplitContent(
|
|
||||||
inputSymbols,
|
|
||||||
x121EASymbols //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
string allSymbols[];
|
|
||||||
int allSymbolsCount = GetAllSymbols(
|
|
||||||
allSymbols //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
string watchListSymbols[];
|
|
||||||
int watchListSymbolsCount = GetAllSymbols(
|
|
||||||
watchListSymbols,
|
|
||||||
true //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
Clean(x121EAUsedSymbols);
|
|
||||||
if (x121EAUseAllSymbols)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Copy(
|
|
||||||
allSymbols,
|
|
||||||
x121EAUsedSymbols //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (x121EAUseAllWatchListSymbols)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Copy(
|
|
||||||
watchListSymbols,
|
|
||||||
x121EAUsedSymbols //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (IsValidSize(inputSymbolsCount))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Copy(
|
|
||||||
inputSymbols,
|
|
||||||
x121EAUsedSymbols //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Add(
|
|
||||||
_Symbol,
|
|
||||||
x121EAUsedSymbols //
|
|
||||||
);
|
|
||||||
}
|
|
||||||
int symbolsCount = ArraySize(x121EAUsedSymbols);
|
|
||||||
result = IsValidSize(symbolsCount);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
x121EA = new XSCX121SetupEA(
|
|
||||||
x121EASlippage,
|
|
||||||
x121EAMagicNumber //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Configure EA Class Instance ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Signals ...
|
|
||||||
x121EA.AllowLong(x121EAAllowLong);
|
|
||||||
x121EA.AllowShort(x121EAAllowShort);
|
|
||||||
x121EA.DelayBetweenTwoSignal(x121EADelayBetweenTwoSignal);
|
|
||||||
x121EA.ExecuteSignalsOnBreakout(x121EAExecuteSignalsOnBreakout);
|
|
||||||
x121EA.ReuiredSignalVerifications(x121EAReuiredSignalVerifications);
|
|
||||||
x121EA.GetVerificationFromOtherTimeFrames(x121EAGetVerificationFromOtherTimeFrames);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Risk Management ...
|
|
||||||
x121EA.Volume(x121EAVolume);
|
|
||||||
x121EA.TPPoint(x121EATPPoint);
|
|
||||||
x121EA.SLPoint(x121EASLPoint);
|
|
||||||
x121EA.IgnoreSL(x121EAIgnoreSL);
|
|
||||||
x121EA.IgnoreTP(x121EAIgnoreTP);
|
|
||||||
x121EA.MaxAllowedTrades(x121EAMaxAllowedTrades);
|
|
||||||
x121EA.IncreaseNextSignalsVolume(x121EAIncreaseNextSignalsVolume);
|
|
||||||
x121EA.UseMaxAllowedPerDirection(x121EAUseMaxAllowedPerDirection);
|
|
||||||
x121EA.MinFreeMargingForOpenTrades(x121EAMinFreeMargingForOpenTrades);
|
|
||||||
x121EA.IncreaseNextSignalsVolumeMultiplier(x121EAIncreaseNextSignalsVolumeMultiplier);
|
|
||||||
x121EA.AcceptNextDirectionalSignalsWhenFirstInProfit(x121EAAcceptNextDirectionalSignalsWhenFirstInProfit);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Protection ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Signalling ...
|
|
||||||
x121EA.CloseOnOpposit(x121EACloseOnOpposit);
|
|
||||||
x121EA.EndSignallingHoure(x121EAEndSignallingHoure);
|
|
||||||
x121EA.CloseOnSpecificTime(x121EACloseOnSpecificTime);
|
|
||||||
x121EA.StartSignallingHoure(x121EAStartSignallingHoure);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trailling ...
|
|
||||||
x121EA.AllowTrailStop(x121EAAllowTrailStop);
|
|
||||||
x121EA.NextTrailPoint(x121EANextTrailPoint);
|
|
||||||
x121EA.FirstTrailPoint(x121EAFirstTrailPoint);
|
|
||||||
x121EA.NextTrailDistance(x121EANextTrailDistance);
|
|
||||||
x121EA.FirstTrailDistance(x121EAFirstTrailDistance);
|
|
||||||
x121EA.DisableTrailingWhenOpposit(x121EADisableTrailingWhenOpposit);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Supporting ...
|
|
||||||
x121EA.AllowSupport(x121EAAllowSupport);
|
|
||||||
x121EA.SupportOnlyForces(x121EASupportOnlyForces);
|
|
||||||
x121EA.SupportDistance(x121EASupportDistance);
|
|
||||||
x121EA.MaxNumberOfSupports(x121EAMaxNumberOfSupports);
|
|
||||||
x121EA.SupportVolumeMultiplier(x121EASupportVolumeMultiplier);
|
|
||||||
x121EA.MaxAllowedSupportVolume(x121EAMaxAllowedSupportVolume);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Grid ...
|
|
||||||
x121EA.AllowGrid(x121EAAllowGrid);
|
|
||||||
x121EA.GridOnlyForces(x121EAGridOnlyForces);
|
|
||||||
x121EA.GridDistance(x121EAGridDistance);
|
|
||||||
x121EA.MaxNumberOfGrids(x121EAMaxNumberOfGrids);
|
|
||||||
x121EA.GridVolumeMultiplier(x121EAGridVolumeMultiplier);
|
|
||||||
x121EA.MaxAllowedGridVolume(x121EAMaxAllowedGridVolume);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Recovery ...
|
|
||||||
x121EA.AllowRecovery(x121EAAllowRecovery);
|
|
||||||
x121EA.RecoverOnlyForces(x121EARecoverOnlyForces);
|
|
||||||
x121EA.RecoveryDistance(x121EARecoveryDistance);
|
|
||||||
x121EA.MaxNumberOfRecoveries(x121EAMaxNumberOfRecoveries);
|
|
||||||
x121EA.RecoveryVolumeMultiplier(x121EARecoveryVolumeMultiplier);
|
|
||||||
x121EA.MaxAllowedRecoveryVolume(x121EAMaxAllowedRecoveryVolume);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Hedging ...
|
|
||||||
x121EA.RestingAfterHedge(x121EARestingAfterHedge);
|
|
||||||
x121EA.MinProfitPerTrade(x121EAMinRequiredProfitPerTrade);
|
|
||||||
x121EA.MinProfitPerVolumeFactor(x121EAMinRequiredProfitPerVolumeFactor);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Alert ...
|
|
||||||
x121EA.SetAlertPrefix(ShortName);
|
|
||||||
x121EA.SetAlertEnableAlerts(x121EAEnableAlerts);
|
|
||||||
x121EA.SetAlertLogAlerts(x121EALogAlerts);
|
|
||||||
x121EA.SetAlertMailAlerts(x121EAMailAlerts);
|
|
||||||
x121EA.SetAlertPushAlerts(x121EAPushAlerts);
|
|
||||||
x121EA.SetAlertTerminalAlerts(x121EATerminalAlerts);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Configure Indicators ...
|
|
||||||
X121SetupInputs setupInputsDefault;
|
|
||||||
setupInputsDefault.Default();
|
|
||||||
X121PreConfigureStyles(setupInputsDefault);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Prepare Providers and Add them into mX121EA class ...
|
|
||||||
for (int i = 0; i < symbolsCount; i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Requirements ...
|
|
||||||
string iSymbol = x121EAUsedSymbols[i];
|
|
||||||
ENUM_TIMEFRAMES iHostPeriod = _Period;
|
|
||||||
|
|
||||||
//
|
|
||||||
XSCX121SetupCycles *iSetupCycle;
|
|
||||||
iSetupCycle = new XSCX121SetupCycles();
|
|
||||||
result = iSetupCycle.Init(
|
|
||||||
setupInputsDefault,
|
|
||||||
iSymbol,
|
|
||||||
iHostPeriod //
|
|
||||||
);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
result = x121EA.AddSetup(iSetupCycle);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
void X121PreConfigureStyles(X121SetupInputs &inputs)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// XHTD ...
|
|
||||||
inputs.htdInputs.show = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XATSL ...
|
|
||||||
inputs.atslInputs.show = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XSLN ...
|
|
||||||
inputs.slnInputs.show = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XDMNT ...
|
|
||||||
inputs.dmntInputs.showBull = false;
|
|
||||||
inputs.dmntInputs.showBear = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XSTR ...
|
|
||||||
inputs.strInputs.showTrends = false;
|
|
||||||
inputs.strInputs.fillTrends = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPV ...
|
|
||||||
inputs.pvInputs.showPeaksAndVales = false;
|
|
||||||
inputs.pvInputs.showLevels = false;
|
|
||||||
inputs.pvInputs.showConsolidations = false;
|
|
||||||
inputs.pvInputs.showFibo1Levels = false;
|
|
||||||
inputs.pvInputs.showFibo2Levels = false;
|
|
||||||
inputs.pvInputs.showFibo3Levels = false;
|
|
||||||
inputs.pvInputs.showFibo4Levels = false;
|
|
||||||
inputs.pvInputs.showFibo5Levels = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XMC ...
|
|
||||||
inputs.mcInputs.showSar = false;
|
|
||||||
inputs.mcInputs.showFastMa = false;
|
|
||||||
inputs.mcInputs.showSlowMa = false;
|
|
||||||
inputs.mcInputs.showVerifierMa = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XHK ...
|
|
||||||
inputs.hkInputs.drawHikenAshi = false;
|
|
||||||
inputs.hkInputs.drawSmoothedHikenAshi = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XCHE ...
|
|
||||||
inputs.cheInputs.showLongExit1Line = false;
|
|
||||||
inputs.cheInputs.showShortExit1Line = false;
|
|
||||||
inputs.cheInputs.showLongExit2Line = false;
|
|
||||||
inputs.cheInputs.showShortExit2Line = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XICH ...
|
|
||||||
inputs.ichInputs.showTenkanSen = false;
|
|
||||||
inputs.ichInputs.showKijunSen = false;
|
|
||||||
inputs.ichInputs.showKijunSenPlus = false;
|
|
||||||
inputs.ichInputs.showKijunSenNegative = false;
|
|
||||||
inputs.ichInputs.showChikouSpan = false;
|
|
||||||
inputs.ichInputs.showSenkouSpanA = false;
|
|
||||||
inputs.ichInputs.showSenkouSpanB = false;
|
|
||||||
inputs.ichInputs.showKumo = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XMRB ...
|
|
||||||
inputs.mrbInputs.showFastMa = false;
|
|
||||||
inputs.mrbInputs.showSlowMa = false;
|
|
||||||
inputs.mrbInputs.showRibbon = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XASCT ...
|
|
||||||
inputs.asctInputs.showLongs = false;
|
|
||||||
inputs.asctInputs.showShorts = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XSSLC ...
|
|
||||||
inputs.sslcInputs.showUp = false;
|
|
||||||
inputs.sslcInputs.showDown = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// XHULL ...
|
|
||||||
inputs.hullInputs.showUpZone = false;
|
|
||||||
inputs.hullInputs.showDownZone = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
void X121ReportState()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
string comment = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
comment =
|
|
||||||
ShortName + "\n" +
|
|
||||||
"------------" + "\n" +
|
|
||||||
"Trading Symbols: " + ToString(ArraySize(x121EAUsedSymbols)) + "\n" + "\n";
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect What we Want to Show as Comment ...
|
|
||||||
// bool isInForceState = x121EA.ForceState();
|
|
||||||
double bullishScore = 0; // x121EA.GetBullishScore();
|
|
||||||
double bearishScore = 0; // x121EA.GetBearishScore();
|
|
||||||
double drawDownPercent = x121EA.GetDrawdownPercent();
|
|
||||||
|
|
||||||
//
|
|
||||||
comment +=
|
|
||||||
//
|
|
||||||
(bullishScore > 0 || bearishScore > 0
|
|
||||||
? "Scores:" + "\n" +
|
|
||||||
"------------" + "\n" +
|
|
||||||
"Bullish: " + ToString(bullishScore) + "\n" +
|
|
||||||
"Bearish: " + ToString(bearishScore) + "\n" +
|
|
||||||
"------------" + "\n"
|
|
||||||
: "") +
|
|
||||||
"Drawdown: " + ToString(drawDownPercent) + "%" + "\n" +
|
|
||||||
// "------------" + "\n" +
|
|
||||||
// "Force State: " + ToString(isInForceState) + "\n" +
|
|
||||||
//
|
|
||||||
""
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
XPosition positions[];
|
|
||||||
int positionsCount = x121EA.mTrader.GetPositions(
|
|
||||||
positions //
|
|
||||||
);
|
|
||||||
if (IsValidSize(positionsCount))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int longs = 0;
|
|
||||||
double longVolumes = 0;
|
|
||||||
double longProfits = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
int shorts = 0;
|
|
||||||
double shortVolumes = 0;
|
|
||||||
double shortProfits = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Retrieve Required Informations of Positions ...
|
|
||||||
CountPositions(
|
|
||||||
positions,
|
|
||||||
longs,
|
|
||||||
longProfits,
|
|
||||||
longVolumes,
|
|
||||||
shorts,
|
|
||||||
shortProfits,
|
|
||||||
shortVolumes //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
comment +=
|
|
||||||
//
|
|
||||||
"------------" + "\n" +
|
|
||||||
"Positions: " + "\n" +
|
|
||||||
"------------" + "\n" +
|
|
||||||
(longs <= 0
|
|
||||||
? ""
|
|
||||||
: "\n" + "Longs:" + "\n" +
|
|
||||||
"------------" + "\n" +
|
|
||||||
"Count: " + ToString(longs) + "\n" +
|
|
||||||
"Profits: " + ToString(longProfits) + "\n" +
|
|
||||||
""
|
|
||||||
//
|
|
||||||
) +
|
|
||||||
//
|
|
||||||
(shorts <= 0
|
|
||||||
? ""
|
|
||||||
: "\n" + "Shorts:" + "\n" +
|
|
||||||
"------------" + "\n" +
|
|
||||||
"Count: " + ToString(shorts) + "\n" +
|
|
||||||
"Profits: " + ToString(shortProfits) + "\n" +
|
|
||||||
""
|
|
||||||
//
|
|
||||||
) +
|
|
||||||
//
|
|
||||||
""
|
|
||||||
//
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (positionsCount > 1 && x121EAMinRequiredProfitPerTrade > 0 && x121EAMinRequiredProfitPerVolumeFactor > 0)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
double profit = SpecifiedCalculatePositionsProfit(
|
|
||||||
positions //
|
|
||||||
);
|
|
||||||
double requiredProfitForHedge = SpecifiedCalculateRequiredProfitForHedge(
|
|
||||||
positions,
|
|
||||||
x121EAMinRequiredProfitPerTrade,
|
|
||||||
x121EAMinRequiredProfitPerVolumeFactor //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
comment +=
|
|
||||||
//
|
|
||||||
"\n" + "Hedging: " + "\n" +
|
|
||||||
"------------" + "\n" +
|
|
||||||
"Profits: " + ToString(profit) + "\n" +
|
|
||||||
"RequiredProft: " + ToString(requiredProfitForHedge) + "\n" +
|
|
||||||
//
|
|
||||||
""
|
|
||||||
//
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (IsValid(comment))
|
|
||||||
{
|
|
||||||
Comment(comment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
+214
-167
@@ -30,16 +30,16 @@
|
|||||||
//
|
//
|
||||||
input group "Market";
|
input group "Market";
|
||||||
input group "Fast";
|
input group "Fast";
|
||||||
input int fastLength = 9; // Length
|
input int fastLength = 9; // Length
|
||||||
input ENUM_APPLIED_PRICE fastAppliedTo = PRICE_CLOSE; // Applied To
|
input ENUM_APPLIED_PRICE fastAppliedTo = PRICE_CLOSE; // Applied To
|
||||||
input int slowLength = 18; // Length
|
input int slowLength = 18; // Length
|
||||||
input ENUM_APPLIED_PRICE slowAppliedTo = PRICE_CLOSE; // Applied To
|
input ENUM_APPLIED_PRICE slowAppliedTo = PRICE_CLOSE; // Applied To
|
||||||
|
|
||||||
//
|
//
|
||||||
input group "Presentation";
|
input group "Presentation";
|
||||||
input bool showFast = true; // Show Fast
|
input bool showFast = true; // Show Fast
|
||||||
input bool showSlow = true; // Show Slow
|
input bool showSlow = true; // Show Slow
|
||||||
input bool showVerifier = true; // Show Verifier
|
input bool showVerifier = true; // Show Verifier
|
||||||
|
|
||||||
//
|
//
|
||||||
// Buffers ...
|
// Buffers ...
|
||||||
@@ -52,16 +52,16 @@ input bool showVerifier = true; // Show Verifier
|
|||||||
#property indicator_plots 6
|
#property indicator_plots 6
|
||||||
|
|
||||||
//
|
//
|
||||||
#define hideColorIDX 0
|
#define hideColorIDX 0
|
||||||
#define neuturalColorIDX 1
|
#define neuturalColorIDX 1
|
||||||
#define bullColorIDX 2
|
#define bullColorIDX 2
|
||||||
#define bearColorIDX 3
|
#define bearColorIDX 3
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fast ...
|
// Fast ...
|
||||||
|
|
||||||
//
|
//
|
||||||
#define fastBufferIndex 0
|
#define fastBufferIndex 0
|
||||||
#define fastBufferPlotIndex 0
|
#define fastBufferPlotIndex 0
|
||||||
double fastBuffer[];
|
double fastBuffer[];
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ double fastBufferColor[];
|
|||||||
// Slow ...
|
// Slow ...
|
||||||
|
|
||||||
//
|
//
|
||||||
#define slowBufferIndex 2
|
#define slowBufferIndex 2
|
||||||
#define slowBufferPlotIndex 1
|
#define slowBufferPlotIndex 1
|
||||||
double slowBuffer[];
|
double slowBuffer[];
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ double slowBufferColor[];
|
|||||||
// Verifier ...
|
// Verifier ...
|
||||||
|
|
||||||
//
|
//
|
||||||
#define verifierBufferIndex 4
|
#define verifierBufferIndex 4
|
||||||
#define verifierBufferPlotIndex 2
|
#define verifierBufferPlotIndex 2
|
||||||
double verifierBuffer[];
|
double verifierBuffer[];
|
||||||
|
|
||||||
@@ -137,12 +137,10 @@ XLinearRegression verifierCalculator;
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Initialization ...
|
// Initialization ...
|
||||||
int OnInit()
|
int OnInit() {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Validate Inputs ...
|
// Validate Inputs ...
|
||||||
if (!ValidateInputs())
|
if(!ValidateInputs()) {
|
||||||
{
|
|
||||||
return INIT_PARAMETERS_INCORRECT;
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,8 +166,7 @@ int OnInit()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// DeInitialization ...
|
// DeInitialization ...
|
||||||
void OnDeinit(const int reason)
|
void OnDeinit(const int reason) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function
|
// REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function
|
||||||
// REASON_REMOVE 1 Program removed from a chart
|
// REASON_REMOVE 1 Program removed from a chart
|
||||||
@@ -186,150 +183,52 @@ void OnDeinit(const int reason)
|
|||||||
//
|
//
|
||||||
// Calculating what we want ...
|
// Calculating what we want ...
|
||||||
int OnCalculate(
|
int OnCalculate(
|
||||||
const int rates_total, // Total Bars on Chart ...
|
const int rates_total, // Total Bars on Chart ...
|
||||||
const int prev_calculated, // Total Calculated Bars on Charts ...
|
const int prev_calculated, // Total Calculated Bars on Charts ...
|
||||||
const datetime &time[], // History of Open Time ...
|
const datetime &time[], // History of Open Time ...
|
||||||
const double &open[], // History of Open Price ...
|
const double &open[], // History of Open Price ...
|
||||||
const double &high[], // History of High Price ...
|
const double &high[], // History of High Price ...
|
||||||
const double &low[], // History of Low Price ...
|
const double &low[], // History of Low Price ...
|
||||||
const double &close[], // History of Close Price ...
|
const double &close[], // History of Close Price ...
|
||||||
const long &tick_volume[], // History of Tick Volumes on Bar ...
|
const long &tick_volume[], // History of Tick Volumes on Bar ...
|
||||||
const long &volume[], // History of Trade Volumes ...
|
const long &volume[], // History of Trade Volumes ...
|
||||||
const int &spread[] // History of Spread Price ...
|
const int &spread[] // History of Spread Price ...
|
||||||
)
|
) {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
int limit = (prev_calculated > 0) ? prev_calculated - 1 : 0;
|
int limit = (prev_calculated > 0) ? prev_calculated - 1 : 0;
|
||||||
|
|
||||||
//
|
|
||||||
// Calculate Verifier ...
|
|
||||||
for (int i = limit; i < rates_total && !IsStopped(); i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
double verifierSlope;
|
|
||||||
double verifierIntercept;
|
|
||||||
|
|
||||||
//
|
|
||||||
double verifierAppliedPrice = iGetPrice(slowAppliedTo, open[i], high[i], low[i], close[i]);
|
|
||||||
|
|
||||||
//
|
|
||||||
double verifier = verifierCalculator.Calculate(
|
|
||||||
verifierAppliedPrice,
|
|
||||||
slowLength,
|
|
||||||
verifierSlope,
|
|
||||||
verifierIntercept,
|
|
||||||
i,
|
|
||||||
rates_total //
|
|
||||||
);
|
|
||||||
verifierBuffer[i] = verifier;
|
|
||||||
|
|
||||||
//
|
|
||||||
double verifierColor =
|
|
||||||
(i > 0)
|
|
||||||
? (verifierBuffer[i] > verifierBuffer[i - 1])
|
|
||||||
? bullColorIDX
|
|
||||||
: (verifierBuffer[i] < verifierBuffer[i - 1])
|
|
||||||
? bearColorIDX
|
|
||||||
: verifierBuffer[i - 1]
|
|
||||||
: neuturalColorIDX;
|
|
||||||
verifierBufferColor[i] = verifierColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Fast ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Calculate Fast Intercept and Slope ...
|
|
||||||
double fastSlope = 0;
|
|
||||||
double fastIntercept = 0;
|
|
||||||
for (int i = limit; i < rates_total && !IsStopped(); i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
double fastAppliedPrice = iGetPrice(fastAppliedTo, open[i], high[i], low[i], close[i]);
|
|
||||||
|
|
||||||
//
|
|
||||||
double fastLRValue = fastCalculator.Calculate(
|
|
||||||
fastAppliedPrice,
|
|
||||||
fastLength,
|
|
||||||
fastSlope,
|
|
||||||
fastIntercept,
|
|
||||||
i,
|
|
||||||
rates_total //
|
|
||||||
);
|
|
||||||
fastLRBuffer[i] = fastLRValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Calculate Fast ...
|
// Calculate Fast ...
|
||||||
for (int i = 0; i < fastLength && !IsStopped(); i++)
|
CalculateFast(
|
||||||
{
|
open,
|
||||||
//
|
high,
|
||||||
double fast = fastIntercept + fastSlope * (fastLength - i - 1);
|
low,
|
||||||
fastBuffer[rates_total - i - 1] = fast;
|
close,
|
||||||
|
limit,
|
||||||
//
|
rates_total //
|
||||||
double fastColor =
|
);
|
||||||
(fastSlope > 0)
|
|
||||||
? bullColorIDX
|
|
||||||
: (fastSlope < 0)
|
|
||||||
? bearColorIDX
|
|
||||||
: neuturalColorIDX;
|
|
||||||
|
|
||||||
//
|
|
||||||
fastBufferColor[rates_total - i - 1] = fastColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
int fastDrawBegin = rates_total - fastLength;
|
|
||||||
PlotIndexSetInteger(fastBufferIndex, PLOT_DRAW_BEGIN, fastDrawBegin);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Slow ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Calculate Slow Intercept and Slope ...
|
|
||||||
double slowSlope = 0;
|
|
||||||
double slowIntercept = 0;
|
|
||||||
for (int i = limit; i < rates_total && !IsStopped(); i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
double slowAppliedPrice = iGetPrice(slowAppliedTo, open[i], high[i], low[i], close[i]);
|
|
||||||
|
|
||||||
//
|
|
||||||
double slowLRValue = slowCalculator.Calculate(
|
|
||||||
slowAppliedPrice,
|
|
||||||
slowLength,
|
|
||||||
slowSlope,
|
|
||||||
slowIntercept,
|
|
||||||
i,
|
|
||||||
rates_total //
|
|
||||||
);
|
|
||||||
slowLRBuffer[i] = slowLRValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Calculate Slow ...
|
// Calculate Slow ...
|
||||||
for (int i = 0; i < slowLength && !IsStopped(); i++)
|
CalculateSlow(
|
||||||
{
|
open,
|
||||||
//
|
high,
|
||||||
double slow = slowIntercept + slowSlope * (slowLength - i - 1);
|
low,
|
||||||
slowBuffer[rates_total - i - 1] = slow;
|
close,
|
||||||
|
limit,
|
||||||
//
|
rates_total //
|
||||||
double slowColor =
|
);
|
||||||
(slowSlope > 0)
|
|
||||||
? bullColorIDX
|
|
||||||
: (slowSlope < 0)
|
|
||||||
? bearColorIDX
|
|
||||||
: neuturalColorIDX;
|
|
||||||
|
|
||||||
//
|
|
||||||
slowBufferColor[rates_total - i - 1] = slowColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
int slowDrawBegin = rates_total - slowLength;
|
// Calculate Verifier ...
|
||||||
PlotIndexSetInteger(slowBufferIndex, PLOT_DRAW_BEGIN, slowDrawBegin);
|
CalculateVerifier(
|
||||||
|
open,
|
||||||
|
high,
|
||||||
|
low,
|
||||||
|
close,
|
||||||
|
limit,
|
||||||
|
rates_total //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
return rates_total;
|
return rates_total;
|
||||||
@@ -340,8 +239,7 @@ int OnCalculate(
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Validate Input Args for Initialization ...
|
// Validate Input Args for Initialization ...
|
||||||
bool ValidateInputs()
|
bool ValidateInputs() {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
@@ -356,8 +254,7 @@ bool ValidateInputs()
|
|||||||
//
|
//
|
||||||
// Retrieve all Exists Input Max Length ...
|
// Retrieve all Exists Input Max Length ...
|
||||||
// use for Start Of Drawing ...
|
// use for Start Of Drawing ...
|
||||||
int ExtractMaxLengthOfInputs()
|
int ExtractMaxLengthOfInputs() {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
@@ -371,15 +268,13 @@ int ExtractMaxLengthOfInputs()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Set Indicator Short Name and also we can define Buffers Labels ...
|
// Set Indicator Short Name and also we can define Buffers Labels ...
|
||||||
void SetIndicatorName()
|
void SetIndicatorName() {
|
||||||
{
|
|
||||||
IndicatorSetString(INDICATOR_SHORTNAME, ShortName);
|
IndicatorSetString(INDICATOR_SHORTNAME, ShortName);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Define Indexes and Styles ...
|
// Define Indexes and Styles ...
|
||||||
void DefineBuffers()
|
void DefineBuffers() {
|
||||||
{
|
|
||||||
//
|
//
|
||||||
// Fast ...
|
// Fast ...
|
||||||
|
|
||||||
@@ -391,8 +286,9 @@ void DefineBuffers()
|
|||||||
SetIndexBuffer(fastBufferColorIndex, fastBufferColor, INDICATOR_COLOR_INDEX);
|
SetIndexBuffer(fastBufferColorIndex, fastBufferColor, INDICATOR_COLOR_INDEX);
|
||||||
|
|
||||||
//
|
//
|
||||||
PlotIndexSetInteger(fastBufferIndex, PLOT_SHOW_DATA, showFast);
|
PlotIndexSetDouble(fastBufferPlotIndex, PLOT_EMPTY_VALUE, 0);
|
||||||
PlotIndexSetInteger(fastBufferIndex, PLOT_DRAW_TYPE, fastDrawType);
|
PlotIndexSetInteger(fastBufferPlotIndex, PLOT_SHOW_DATA, showFast);
|
||||||
|
PlotIndexSetInteger(fastBufferPlotIndex, PLOT_DRAW_TYPE, fastDrawType);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Slow ...
|
// Slow ...
|
||||||
@@ -405,8 +301,9 @@ void DefineBuffers()
|
|||||||
SetIndexBuffer(slowBufferColorIndex, slowBufferColor, INDICATOR_COLOR_INDEX);
|
SetIndexBuffer(slowBufferColorIndex, slowBufferColor, INDICATOR_COLOR_INDEX);
|
||||||
|
|
||||||
//
|
//
|
||||||
PlotIndexSetInteger(slowBufferIndex, PLOT_SHOW_DATA, showSlow);
|
PlotIndexSetDouble(slowBufferPlotIndex, PLOT_EMPTY_VALUE, 0);
|
||||||
PlotIndexSetInteger(slowBufferIndex, PLOT_DRAW_TYPE, slowDrawType);
|
PlotIndexSetInteger(slowBufferPlotIndex, PLOT_SHOW_DATA, showSlow);
|
||||||
|
PlotIndexSetInteger(slowBufferPlotIndex, PLOT_DRAW_TYPE, slowDrawType);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Verifier ...
|
// Verifier ...
|
||||||
@@ -419,8 +316,9 @@ void DefineBuffers()
|
|||||||
SetIndexBuffer(verifierBufferColorIndex, verifierBufferColor, INDICATOR_COLOR_INDEX);
|
SetIndexBuffer(verifierBufferColorIndex, verifierBufferColor, INDICATOR_COLOR_INDEX);
|
||||||
|
|
||||||
//
|
//
|
||||||
PlotIndexSetInteger(verifierBufferIndex, PLOT_SHOW_DATA, showVerifier);
|
PlotIndexSetDouble(verifierBufferPlotIndex, PLOT_EMPTY_VALUE, 0);
|
||||||
PlotIndexSetInteger(verifierBufferIndex, PLOT_DRAW_TYPE, verifierDrawType);
|
PlotIndexSetInteger(verifierBufferPlotIndex, PLOT_SHOW_DATA, showVerifier);
|
||||||
|
PlotIndexSetInteger(verifierBufferPlotIndex, PLOT_DRAW_TYPE, verifierDrawType);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Data Buffers ...
|
// Data Buffers ...
|
||||||
@@ -431,3 +329,152 @@ void DefineBuffers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Custom Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
void CalculateFast(
|
||||||
|
const double &open[], // History of Open Price ...
|
||||||
|
const double &high[], // History of High Price ...
|
||||||
|
const double &low[], // History of Low Price ...
|
||||||
|
const double &close[], // History of Close Price ...
|
||||||
|
int limit,
|
||||||
|
const int rates_total //
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// Fast ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate Fast Intercept and Slope ...
|
||||||
|
double fastSlope = 0;
|
||||||
|
double fastIntercept = 0;
|
||||||
|
for(int i = limit; i < rates_total && !IsStopped(); i++) {
|
||||||
|
//
|
||||||
|
double fastAppliedPrice = iGetPrice(fastAppliedTo, open[i], high[i], low[i], close[i]);
|
||||||
|
|
||||||
|
//
|
||||||
|
double fastLRValue = fastCalculator.Calculate(
|
||||||
|
fastAppliedPrice,
|
||||||
|
fastLength,
|
||||||
|
fastSlope,
|
||||||
|
fastIntercept,
|
||||||
|
i,
|
||||||
|
rates_total //
|
||||||
|
);
|
||||||
|
fastLRBuffer[i] = fastLRValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate Fast ...
|
||||||
|
for(int i = 0; i < fastLength && !IsStopped(); i++) {
|
||||||
|
//
|
||||||
|
double fast = fastIntercept + fastSlope * (fastLength - i - 1);
|
||||||
|
fastBuffer[rates_total - i - 1] = fast;
|
||||||
|
|
||||||
|
//
|
||||||
|
double fastColor =
|
||||||
|
(fastSlope > 0) ? bullColorIDX : (fastSlope < 0) ? bearColorIDX :
|
||||||
|
neuturalColorIDX;
|
||||||
|
|
||||||
|
//
|
||||||
|
fastBufferColor[rates_total - i - 1] = fastColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int fastDrawBegin = rates_total - fastLength;
|
||||||
|
PlotIndexSetInteger(fastBufferPlotIndex, PLOT_DRAW_BEGIN, fastDrawBegin);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void CalculateSlow(
|
||||||
|
const double &open[], // History of Open Price ...
|
||||||
|
const double &high[], // History of High Price ...
|
||||||
|
const double &low[], // History of Low Price ...
|
||||||
|
const double &close[], // History of Close Price ...
|
||||||
|
int limit,
|
||||||
|
const int rates_total //
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// Slow ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate Slow Intercept and Slope ...
|
||||||
|
double slowSlope = 0;
|
||||||
|
double slowIntercept = 0;
|
||||||
|
for(int i = limit; i < rates_total && !IsStopped(); i++) {
|
||||||
|
//
|
||||||
|
double slowAppliedPrice = iGetPrice(slowAppliedTo, open[i], high[i], low[i], close[i]);
|
||||||
|
|
||||||
|
//
|
||||||
|
double slowLRValue = slowCalculator.Calculate(
|
||||||
|
slowAppliedPrice,
|
||||||
|
slowLength,
|
||||||
|
slowSlope,
|
||||||
|
slowIntercept,
|
||||||
|
i,
|
||||||
|
rates_total //
|
||||||
|
);
|
||||||
|
slowLRBuffer[i] = slowLRValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Calculate Slow ...
|
||||||
|
for(int i = 0; i < slowLength && !IsStopped(); i++) {
|
||||||
|
//
|
||||||
|
double slow = slowIntercept + slowSlope * (slowLength - i - 1);
|
||||||
|
slowBuffer[rates_total - i - 1] = slow;
|
||||||
|
|
||||||
|
//
|
||||||
|
double slowColor =
|
||||||
|
(slowSlope > 0) ? bullColorIDX : (slowSlope < 0) ? bearColorIDX :
|
||||||
|
neuturalColorIDX;
|
||||||
|
|
||||||
|
//
|
||||||
|
slowBufferColor[rates_total - i - 1] = slowColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int slowDrawBegin = rates_total - slowLength;
|
||||||
|
PlotIndexSetInteger(slowBufferPlotIndex, PLOT_DRAW_BEGIN, slowDrawBegin);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void CalculateVerifier(
|
||||||
|
const double &open[], // History of Open Price ...
|
||||||
|
const double &high[], // History of High Price ...
|
||||||
|
const double &low[], // History of Low Price ...
|
||||||
|
const double &close[], // History of Close Price ...
|
||||||
|
int limit,
|
||||||
|
const int rates_total //
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// Calculate Verifier ...
|
||||||
|
for(int i = limit; i < rates_total && !IsStopped(); i++) {
|
||||||
|
//
|
||||||
|
double verifierSlope;
|
||||||
|
double verifierIntercept;
|
||||||
|
|
||||||
|
//
|
||||||
|
double verifierAppliedPrice = iGetPrice(slowAppliedTo, open[i], high[i], low[i], close[i]);
|
||||||
|
|
||||||
|
//
|
||||||
|
double verifier = verifierCalculator.Calculate(
|
||||||
|
verifierAppliedPrice,
|
||||||
|
slowLength,
|
||||||
|
verifierSlope,
|
||||||
|
verifierIntercept,
|
||||||
|
i,
|
||||||
|
rates_total //
|
||||||
|
);
|
||||||
|
verifierBuffer[i] = verifier;
|
||||||
|
|
||||||
|
//
|
||||||
|
double verifierColor =
|
||||||
|
(i > 0) ?
|
||||||
|
(verifierBuffer[i] > verifierBuffer[i - 1]) ? bullColorIDX : (verifierBuffer[i] < verifierBuffer[i - 1]) ? bearColorIDX :
|
||||||
|
verifierBuffer[i - 1] :
|
||||||
|
neuturalColorIDX;
|
||||||
|
verifierBufferColor[i] = verifierColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
+1
-1
@@ -8,6 +8,6 @@
|
|||||||
"C_Cpp.default.includePath": [
|
"C_Cpp.default.includePath": [
|
||||||
"c:\\Users\\saherelm\\AppData\\Roaming\\MetaQuotes\\Terminal\\FAE4959D5A0334AE230243FCFFFD4053\\MQL5\\Include"
|
"c:\\Users\\saherelm\\AppData\\Roaming\\MetaQuotes\\Terminal\\FAE4959D5A0334AE230243FCFFFD4053\\MQL5\\Include"
|
||||||
],
|
],
|
||||||
"C_Cpp.clang_format_style": "file:c:\\Users\\SaherElm\\.vscode\\extensions\\l-i-v.mql-tools-2.1.0\\files\\.clang-format"
|
"C_Cpp.clang_format_style": "file:c:\\Users\\saherelm\\.vscode\\extensions\\l-i-v.mql-tools-2.1.0\\files\\.clang-format"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user