mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-08-22 16:58:07 +00:00
refactor(indicators): Full Input exposure + Robust Handle Init
This commit is contained in:
@@ -1,14 +1,23 @@
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Market_Inspector_Pro_MTF.mq5 |
|
//| Market_Inspector_Pro_MTF.mq5 |
|
||||||
//| Real-Time Dashboard - iCustom Architecture |
|
//| Real-Time Dashboard - v1.10 (Configurable) |
|
||||||
//| Copyright 2026, xxxxxxxx |
|
//| Copyright 2026, xxxxxxxx |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
#property copyright "Copyright 2026, xxxxxxxx"
|
#property copyright "Copyright 2026, xxxxxxxx"
|
||||||
#property version "1.00"
|
#property version "1.10" // Full Input exposure + Robust Handle Init
|
||||||
#property description "Active Trading Panel using MTF Indicators via iCustom."
|
#property description "Active Trading Panel using MTF Indicators."
|
||||||
#property indicator_chart_window
|
#property indicator_chart_window
|
||||||
#property indicator_plots 0
|
#property indicator_plots 0
|
||||||
|
|
||||||
|
// Need enum definitions for iCustom calls that use them
|
||||||
|
enum ENUM_AB_MODE { MODE_ALPHA, MODE_BETA };
|
||||||
|
enum ENUM_VHF_MODE { VHF_MODE_CLOSE_ONLY, VHF_MODE_HIGH_LOW };
|
||||||
|
enum ENUM_VWAP_PERIOD { PERIOD_SESSION, PERIOD_WEEK, PERIOD_MONTH, PERIOD_CUSTOM_SESSION };
|
||||||
|
#ifndef ENUM_APPLIED_PRICE_HA_ALL_DEFINED
|
||||||
|
#define ENUM_APPLIED_PRICE_HA_ALL_DEFINED
|
||||||
|
enum ENUM_APPLIED_PRICE_HA_ALL { PRICE_CLOSE_STD=1 }; // Simplified for compilation if header missing
|
||||||
|
#endif
|
||||||
|
|
||||||
//--- Visual Settings
|
//--- Visual Settings
|
||||||
input group "Visual Layout"
|
input group "Visual Layout"
|
||||||
input int InpXOffset = 20;
|
input int InpXOffset = 20;
|
||||||
@@ -18,6 +27,8 @@ input color InpColorBase = clrSilver;
|
|||||||
input color InpColorHead = clrGold;
|
input color InpColorHead = clrGold;
|
||||||
input color InpColorTxt = clrSilver;
|
input color InpColorTxt = clrSilver;
|
||||||
input color InpColorLbl = clrGray;
|
input color InpColorLbl = clrGray;
|
||||||
|
input color InpColorBull = clrLime;
|
||||||
|
input color InpColorBear = clrRed;
|
||||||
input ENUM_BASE_CORNER InpCorner = CORNER_LEFT_UPPER;
|
input ENUM_BASE_CORNER InpCorner = CORNER_LEFT_UPPER;
|
||||||
|
|
||||||
//--- Timeframes
|
//--- Timeframes
|
||||||
@@ -26,51 +37,58 @@ input ENUM_TIMEFRAMES InpTFSlow = PERIOD_H1; // Context
|
|||||||
input ENUM_TIMEFRAMES InpTFMid = PERIOD_M15; // Flow
|
input ENUM_TIMEFRAMES InpTFMid = PERIOD_M15; // Flow
|
||||||
input ENUM_TIMEFRAMES InpTFFast = PERIOD_M5; // Trigger
|
input ENUM_TIMEFRAMES InpTFFast = PERIOD_M5; // Trigger
|
||||||
|
|
||||||
//--- Indicator Settings (Must match source files!)
|
//--- Indicator Parameters
|
||||||
input group "Settings"
|
input group "Metric Periods"
|
||||||
|
//input int InpDSMAPeriod = 40;
|
||||||
|
input int InpVHFPeriod = 28;
|
||||||
|
input int InpR2Period = 20;
|
||||||
|
input int InpVScorePeriod = 20;
|
||||||
|
input int InpAutoCorrPeriod = 20;
|
||||||
|
input int InpATRPeriod = 14;
|
||||||
|
input int InpRVOLPeriod = 20;
|
||||||
|
input int InpBetaLookback = 60;
|
||||||
|
//input double InpLaguerreGamma = 0.5;
|
||||||
|
|
||||||
|
input group "TSI Settings"
|
||||||
|
input int InpTSI_Slow = 25;
|
||||||
|
input int InpTSI_Fast = 13;
|
||||||
|
input int InpTSI_Signal = 13;
|
||||||
|
|
||||||
|
input group "Squeeze Settings"
|
||||||
|
input int InpSqueezeLength = 20;
|
||||||
|
input double InpBBMult = 2.0;
|
||||||
|
input double InpKCMult = 1.5;
|
||||||
|
input int InpSqueezeMom = 12;
|
||||||
|
|
||||||
|
input group "Vol Regime"
|
||||||
|
input int InpVRFast = 5; // Vol Regime Fast ATR
|
||||||
|
input int InpVRSlow = 50; // Vol Regime Slow ATR
|
||||||
|
input double InpVRThresh = 1.0; // Vol Regime Threshold
|
||||||
|
|
||||||
|
input group "Thresholds & Options"
|
||||||
|
input double InpR2Threshold = 0.7; // Strong Trend Level (R2)
|
||||||
|
input double InpAutoCorrThresh = 0.1; // AC Significance
|
||||||
|
input double InpVelThreshold = 1.0; // Velocity High Level
|
||||||
|
input double InpRVOLThreshold = 2.0; // High Volume Level
|
||||||
|
input int InpVelPeriod = 3; // Velocity Lookback
|
||||||
|
input int InpAbsHistory = 500; // Absorption History Steps
|
||||||
|
|
||||||
|
input group "Benchmarks"
|
||||||
input string InpBenchmark = "US500";
|
input string InpBenchmark = "US500";
|
||||||
input string InpForexBench = "DX";
|
input string InpForexBench = "DX";
|
||||||
input int InpBetaLookback = 60;
|
|
||||||
|
|
||||||
input int InpVHFPeriod=28;
|
|
||||||
input int InpR2Period=20;
|
|
||||||
input int InpVScorePeriod=20;
|
|
||||||
input int InpAutoCorrPeriod=20;
|
|
||||||
input int InpATRPeriod=14;
|
|
||||||
input int InpRVOLPeriod=20;
|
|
||||||
input double InpLaguerreGamma=0.5;
|
|
||||||
|
|
||||||
input int InpTSI_Slow=25;
|
|
||||||
input int InpTSI_Fast=13;
|
|
||||||
input int InpTSI_Signal=13;
|
|
||||||
input int InpSqueezeLength=20;
|
|
||||||
input double InpBBMult=2.0;
|
|
||||||
input double InpKCMult=1.5;
|
|
||||||
input int InpSqueezeMom=12;
|
|
||||||
input int InpVelPeriod=3;
|
|
||||||
|
|
||||||
//--- Handles
|
//--- Handles
|
||||||
int h_alpha_h1, h_beta_h1;
|
int h_alpha_h1, h_beta_h1;
|
||||||
int h_vhf_h1, h_r2_h1, h_tsi_h1;
|
int h_vhf_h1, h_r2_h1, h_tsi_h1;
|
||||||
int h_vscore_m15, h_ac_m15, h_sqz_m15;
|
int h_vscore_m15, h_ac_m15, h_sqz_m15;
|
||||||
int h_vhf_m15, h_r2_m15, h_tsi_m15;
|
int h_vhf_m15, h_r2_m15, h_tsi_m15;
|
||||||
int h_vola_reg_m15; // Uses VolatilityRegime_MTF_Pro
|
int h_vola_reg_m15;
|
||||||
int h_vel_m5, h_tsi_m5;
|
int h_vel_m5, h_tsi_m5;
|
||||||
int h_rvol_m15, h_rvol_m5; // For Thrust & Absorption
|
int h_rvol_m15, h_rvol_m5;
|
||||||
int h_atr_m5; // For Cost & Absorption
|
int h_atr_m5;
|
||||||
int h_abs;
|
int h_abs;
|
||||||
|
|
||||||
// --- Enums needed for iCustom calls (must match source file definition)
|
bool g_init_failed = false; // Flag to track initialization status
|
||||||
enum ENUM_AB_MODE { MODE_ALPHA, MODE_BETA };
|
|
||||||
enum ENUM_VHF_MODE { VHF_MODE_CLOSE_ONLY, VHF_MODE_HIGH_LOW };
|
|
||||||
// Need this enum for V-Score Input
|
|
||||||
enum ENUM_VWAP_PERIOD
|
|
||||||
{
|
|
||||||
PERIOD_SESSION,
|
|
||||||
PERIOD_WEEK,
|
|
||||||
PERIOD_MONTH,
|
|
||||||
PERIOD_CUSTOM_SESSION
|
|
||||||
};
|
|
||||||
|
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Init |
|
//| Init |
|
||||||
@@ -80,58 +98,133 @@ int OnInit()
|
|||||||
// Helper to format path. Assuming indicators are in root or same folder based on terminal.
|
// Helper to format path. Assuming indicators are in root or same folder based on terminal.
|
||||||
// Typically iCustom uses "IndicatorName" if in same folder.
|
// Typically iCustom uses "IndicatorName" if in same folder.
|
||||||
|
|
||||||
// --- H1 HANDLES ---
|
// --- H1 ---
|
||||||
// AlphaBeta MTF: Params(TF, Mode, Lookback, Bench, ForexBench)
|
|
||||||
h_alpha_h1 = iCustom(_Symbol, Period(), "AlphaBeta_MTF_Pro", InpTFSlow, MODE_ALPHA, InpBetaLookback, InpBenchmark, InpForexBench);
|
h_alpha_h1 = iCustom(_Symbol, Period(), "AlphaBeta_MTF_Pro", InpTFSlow, MODE_ALPHA, InpBetaLookback, InpBenchmark, InpForexBench);
|
||||||
|
if(h_alpha_h1 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load AlphaBeta_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
h_beta_h1 = iCustom(_Symbol, Period(), "AlphaBeta_MTF_Pro", InpTFSlow, MODE_BETA, InpBetaLookback, InpBenchmark, InpForexBench);
|
h_beta_h1 = iCustom(_Symbol, Period(), "AlphaBeta_MTF_Pro", InpTFSlow, MODE_BETA, InpBetaLookback, InpBenchmark, InpForexBench);
|
||||||
|
if(h_beta_h1 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load AlphaBeta_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// VHF MTF: Params(TF, Period, Mode, Price)
|
|
||||||
h_vhf_h1 = iCustom(_Symbol, Period(), "VHF_MTF_Pro", InpTFSlow, InpVHFPeriod, VHF_MODE_HIGH_LOW, PRICE_CLOSE);
|
h_vhf_h1 = iCustom(_Symbol, Period(), "VHF_MTF_Pro", InpTFSlow, InpVHFPeriod, VHF_MODE_HIGH_LOW, PRICE_CLOSE);
|
||||||
|
if(h_vhf_h1 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load VHF_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// R2 MTF: Params(TF, Period, Level)
|
h_r2_h1 = iCustom(_Symbol, Period(), "LinReg_R2_MTF_Pro", InpTFSlow, InpR2Period, InpR2Threshold);
|
||||||
h_r2_h1 = iCustom(_Symbol, Period(), "LinReg_R2_MTF_Pro", InpTFSlow, InpR2Period, 0.7);
|
if(h_r2_h1 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load LinReg_R2_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// TSI MTF: Params(TF, Slow, Fast, Signal, Price)
|
h_tsi_h1 = iCustom(_Symbol, Period(), "TSI_MTF_Simple_Pro", InpTFSlow, InpTSI_Slow, InpTSI_Fast, InpTSI_Signal, PRICE_CLOSE);
|
||||||
h_tsi_h1 = iCustom(_Symbol, Period(), "TSI_MTF_Simple_Pro", InpTFSlow, InpTSI_Slow, InpTSI_Fast, InpTSI_Signal, PRICE_CLOSE);
|
if(h_tsi_h1 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load TSI_MTF_Simple_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// --- M15 HANDLES ---
|
// --- M15 ---
|
||||||
h_vscore_m15 = iCustom(_Symbol, Period(), "VScore_MTF_Pro", InpTFMid, InpVScorePeriod, PERIOD_SESSION);
|
h_vscore_m15 = iCustom(_Symbol, Period(), "VScore_MTF_Pro", InpTFMid, InpVScorePeriod, PERIOD_SESSION);
|
||||||
h_ac_m15 = iCustom(_Symbol, Period(), "AutoCorr_MTF_Pro", InpTFMid, InpAutoCorrPeriod, 0.1);
|
if(h_vscore_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load VScore_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// Vol Regime MTF: Params(TF, Fast, Slow, Thresh)
|
h_ac_m15 = iCustom(_Symbol, Period(), "AutoCorr_MTF_Pro", InpTFMid, InpAutoCorrPeriod, InpAutoCorrThresh);
|
||||||
h_vola_reg_m15 = iCustom(_Symbol, Period(), "VolatilityRegime_MTF_Pro", InpTFMid, 5, 50, 1.0);
|
if(h_ac_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load AutoCorr_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// Squeeze MTF: Params(TF, Len, BB, KC, Mom, Price)
|
h_vola_reg_m15 = iCustom(_Symbol, Period(), "VolatilityRegime_MTF_Pro", InpTFMid, InpVRFast, InpVRSlow, InpVRThresh);
|
||||||
|
if(h_vola_reg_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load VolatilityRegime_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
h_sqz_m15 = iCustom(_Symbol, Period(), "Squeeze_MTF_Pro", InpTFMid, InpSqueezeLength, InpBBMult, InpKCMult, InpSqueezeMom, PRICE_CLOSE);
|
h_sqz_m15 = iCustom(_Symbol, Period(), "Squeeze_MTF_Pro", InpTFMid, InpSqueezeLength, InpBBMult, InpKCMult, InpSqueezeMom, PRICE_CLOSE);
|
||||||
|
if(h_sqz_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load Squeeze_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
h_vhf_m15 = iCustom(_Symbol, Period(), "VHF_MTF_Pro", InpTFMid, InpVHFPeriod, VHF_MODE_HIGH_LOW, PRICE_CLOSE);
|
h_vhf_m15 = iCustom(_Symbol, Period(), "VHF_MTF_Pro", InpTFMid, InpVHFPeriod, VHF_MODE_HIGH_LOW, PRICE_CLOSE);
|
||||||
h_r2_m15 = iCustom(_Symbol, Period(), "LinReg_R2_MTF_Pro", InpTFMid, InpR2Period, 0.7);
|
if(h_vhf_m15 == INVALID_HANDLE)
|
||||||
h_tsi_m15 = iCustom(_Symbol, Period(), "TSI_MTF_Simple_Pro", InpTFMid, InpTSI_Slow, InpTSI_Fast, InpTSI_Signal, PRICE_CLOSE);
|
{
|
||||||
|
Print("Failed to load VHF_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// RVOL MTF: Params(TF, Period, Thresh)
|
h_r2_m15 = iCustom(_Symbol, Period(), "LinReg_R2_MTF_Pro", InpTFMid, InpR2Period, InpR2Threshold);
|
||||||
h_rvol_m15 = iCustom(_Symbol, Period(), "RVOL_MTF_Pro", InpTFMid, InpRVOLPeriod, 2.0);
|
if(h_r2_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load LinReg_R2_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
h_tsi_m15 = iCustom(_Symbol, Period(), "TSI_MTF_Simple_Pro", InpTFMid, InpTSI_Slow, InpTSI_Fast, InpTSI_Signal, PRICE_CLOSE);
|
||||||
|
if(h_tsi_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load TSI_MTF_Simple_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
h_rvol_m15 = iCustom(_Symbol, Period(), "RVOL_MTF_Pro", InpTFMid, InpRVOLPeriod, InpRVOLThreshold);
|
||||||
|
if(h_rvol_m15 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load RVOL_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// --- M5 HANDLES ---
|
// --- M5 HANDLES ---
|
||||||
// Velocity MTF: Params(TF, VelP, ATRP, Thresh, ShowSpeed)
|
h_vel_m5 = iCustom(_Symbol, Period(), "Velocity_MTF_Pro", InpTFFast, InpVelPeriod, InpATRPeriod, InpVelThreshold, false); // false=Hide Speed Line
|
||||||
h_vel_m5 = iCustom(_Symbol, Period(), "Velocity_MTF_Pro", InpTFFast, InpVelPeriod, InpATRPeriod, 1.0, false);
|
if(h_vel_m5 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load Velocity_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
h_rvol_m5 = iCustom(_Symbol, Period(), "RVOL_MTF_Pro", InpTFFast, InpRVOLPeriod, 2.0);
|
h_rvol_m5 = iCustom(_Symbol, Period(), "RVOL_MTF_Pro", InpTFFast, InpRVOLPeriod, InpRVOLThreshold);
|
||||||
h_tsi_m5 = iCustom(_Symbol, Period(), "TSI_MTF_Simple_Pro", InpTFFast, InpTSI_Slow, InpTSI_Fast, InpTSI_Signal, PRICE_CLOSE);
|
if(h_rvol_m5 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load RVOL_MTF_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
// Need generic ATR for Cost. Using iATR on M5.
|
h_tsi_m5 = iCustom(_Symbol, Period(), "TSI_MTF_Simple_Pro", InpTFFast, InpTSI_Slow, InpTSI_Fast, InpTSI_Signal, PRICE_CLOSE);
|
||||||
h_atr_m5 = iATR(_Symbol, InpTFFast, InpATRPeriod);
|
if(h_tsi_m5 == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
Print("Failed to load TSI_MTF_Simple_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
h_atr_m5 = iATR(_Symbol, InpTFFast, InpATRPeriod); // Standard iATR is fine for simple value
|
||||||
|
|
||||||
// --- COMPOSITE ---
|
// --- COMPOSITE ---
|
||||||
// Absorption MTF (Run on M15) -> iCustom takes params: ATRPeriod, RVOLPeriod, History
|
h_abs = iCustom(_Symbol, InpTFMid, "Absorption_Pro", InpTFMid, InpATRPeriod, InpRVOLPeriod, InpAbsHistory, false); // false=Hide Objects
|
||||||
// Input InpTFMid is M15.
|
|
||||||
h_abs = iCustom(_Symbol, InpTFMid, "Absorption_Pro", InpATRPeriod, InpRVOLPeriod, 500, false);
|
|
||||||
if(h_abs == INVALID_HANDLE)
|
if(h_abs == INVALID_HANDLE)
|
||||||
Print("Absorption Handle Error");
|
|
||||||
|
|
||||||
// Check Handles
|
|
||||||
if(h_alpha_h1==INVALID_HANDLE || h_sqz_m15==INVALID_HANDLE || h_vel_m5==INVALID_HANDLE)
|
|
||||||
{
|
{
|
||||||
Print("Error creating iCustom handles. Check if indicators are compiled!");
|
Print("Failed to load Absorption_Pro");
|
||||||
|
g_init_failed=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_init_failed)
|
||||||
|
{
|
||||||
|
Print("Critical Error: Some indicators failed to load. Check Experts log.");
|
||||||
return INIT_FAILED;
|
return INIT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user