TheSmcIctIndEx/Ex/Swings.mq5
2026-04-15 21:15:54 -05:00

119 lines
No EOL
4.4 KiB
MQL5

//+------------------------------------------------------------------+
//| Swings.mq5 |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
#include "..\\Src\\Defines.mqh"
//+------------------------------------------------------------------+
//| Global variables |
//+------------------------------------------------------------------+
//--- Swing structure buffers
double g_swing_high_buffer[];
double g_swing_low_buffer[];
//--- Market structure buffers (HH / HL / LH / LL)
double g_hh_buffer[];
double g_hl_buffer[];
double g_lh_buffer[];
double g_ll_buffer[];
//--- Indicator handle
int g_handle = INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Load ICT SMC indicator
ResetLastError();
g_handle = iCustom(_Symbol, _Period, ICTSMCIND_NAME_RES);
if(g_handle == INVALID_HANDLE)
{
PrintFormat("Failed to load TheSmcIctIndicator, last error = %d", GetLastError());
return INIT_FAILED;
}
else
{
Print("Successful loading TheSmcIctIndicator");
}
//--- Set all buffers as series
ArraySetAsSeries(g_swing_high_buffer, true);
ArraySetAsSeries(g_swing_low_buffer, true);
ArraySetAsSeries(g_hh_buffer, true);
ArraySetAsSeries(g_hl_buffer, true);
ArraySetAsSeries(g_lh_buffer, true);
ArraySetAsSeries(g_ll_buffer, true);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- Release handle to free resources
if(g_handle != INVALID_HANDLE)
IndicatorRelease(g_handle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- Only process on new bar open
static datetime last_time = 0;
const datetime new_time = iTime(_Symbol, _Period, 0);
if(last_time == new_time)
return;
//--- Copy last closed bar (index 1) from each buffer
ResetLastError();
if(CopyBuffer(g_handle, ICTSMCIND_BUFFER_SWING_HIGH, 1, 1, g_swing_high_buffer) != 1 ||
CopyBuffer(g_handle, ICTSMCIND_BUFFER_SWING_LOW, 1, 1, g_swing_low_buffer) != 1 ||
CopyBuffer(g_handle, ICTSMCIND_BUFFER_HH, 1, 1, g_hh_buffer) != 1 ||
CopyBuffer(g_handle, ICTSMCIND_BUFFER_HL, 1, 1, g_hl_buffer) != 1 ||
CopyBuffer(g_handle, ICTSMCIND_BUFFER_LH, 1, 1, g_lh_buffer) != 1 ||
CopyBuffer(g_handle, ICTSMCIND_BUFFER_LL, 1, 1, g_ll_buffer) != 1)
{
Print("Error copying indicator data, last error = ", GetLastError());
return;
}
//--- Swing High / Swing Low
if(g_swing_high_buffer[0] > ICTSMCIND_VOID_BUFFER_VALUE)
Print("New Swing High detected, price = ", g_swing_high_buffer[0]);
if(g_swing_low_buffer[0] > ICTSMCIND_VOID_BUFFER_VALUE)
Print("New Swing Low detected, price = ", g_swing_low_buffer[0]);
//--- Market structure: Higher High / Higher Low
if(g_hh_buffer[0] > ICTSMCIND_VOID_BUFFER_VALUE)
Print("Higher High (HH) confirmed, price = ", g_hh_buffer[0]);
if(g_hl_buffer[0] > ICTSMCIND_VOID_BUFFER_VALUE)
Print("Higher Low (HL) confirmed, price = ", g_hl_buffer[0]);
//--- Market structure: Lower High / Lower Low
if(g_lh_buffer[0] > ICTSMCIND_VOID_BUFFER_VALUE)
Print("Lower High (LH) confirmed, price = ", g_lh_buffer[0]);
if(g_ll_buffer[0] > ICTSMCIND_VOID_BUFFER_VALUE)
Print("Lower Low (LL) confirmed, price = ", g_ll_buffer[0]);
//--- Update timestamp
last_time = new_time;
}
//+------------------------------------------------------------------+