Re: MT4 Indicator requests and ideas

22021
kvak wrote: Thu May 28, 2026 3:40 am like this?
Hello Kvak, good evening!

Could you create your version of Spearman/Pearson with your prices, RSIs and eaverages kit?

And if possible, adding a signal moving average and the arrow area in the OBOS? something like Cagliostro stuff :D

post1295564871.html#p1295564871

Since it's another interesting counter-trading indicator and one that's on our friend Cagliostro's radar, having your eAverages would be very valuable.

Finally, I'm studying in depth averages that might make sense in your moving average kit.

If you want (100% optional, really), I've taken the liberty of creating some regularized averages with Claude Max that combine well with the average volume of cryptocurrencies, to filter spikes.

Coral regularized — T3 with each of the 6 EMAs regularized

JMA regularized — JMA approx. with λ in the final phase

TMA regularized — triangular with λ in the second SMA pass

McGinley regularized — denominator N·(ratio^4) modified with λ

VIDYA regularized (Type A at baseline) — different from #13: applies regularization to the CMO itself

KAMA regularized (ER smoothed) — smooths the efficiency ratio before

Thank you very much in advance!!
These users thanked the author RodrigoRT7 for the post (total 3):
kvak, Tsar, ixion700

Re: MT4 Indicator requests and ideas

22023
myrlim wrote: Tue Jun 02, 2026 11:25 pm Can someone up there helps to explain why this Percent BB indicator appears blank on MT4 platform after being attached to? The platform Journal indicated this indicator loaded successfully.

Thank you in advance
Working fine on latest MT4 build for me. How about this version, does it work for you?
List of our most powerful reversal indicators | Guide to the "All Averages" Filters (ADXvma, Laguerre etc.)
Using Fibonacci "numbers" for indicator settings 💡
How to draw Fibonacci Extensions easily | The best way to draw Support & Resistance

Re: MT4 Indicator requests and ideas

22025
myrlim wrote: Wed Jun 03, 2026 1:29 am Unfortunately, it is still the same, created window panel but blank inside. My MT4 is Build 1471, fyi
Can you delete some indicators (3 or 4 that you don't use) from your indicator folder and restart your MT4, then refresh your indicator list and try again please?
List of our most powerful reversal indicators | Guide to the "All Averages" Filters (ADXvma, Laguerre etc.)
Using Fibonacci "numbers" for indicator settings 💡
How to draw Fibonacci Extensions easily | The best way to draw Support & Resistance

Re: MT4 Indicator requests and ideas

22026
Jimmy wrote: Wed Jun 03, 2026 10:24 am Can you delete some indicators (3 or 4 that you don't use) from your indicator folder and restart your MT4, then refresh your indicator list and try again please?
I've found the root cause of this problem...In order to locate it easily, I group this indicator by rename it, i.e to add Bollinger in front of it. Now it is working fine with original name. So sorry for the inconvenient caused. Tqvm

Re: MT4 Indicator requests and ideas

22027
myrlim wrote: Wed Jun 03, 2026 12:57 pm I've found the root cause of this problem...In order to locate it easily, I group this indicator by rename it, i.e to add Bollinger in front of it. Now it is working fine with original name. So sorry for the inconvenient caused. Tqvm
Thanks for letting us know. Yes, if you rename our indicators they won't work. We do this to prevent renaming and theft.

If you prefer certain names/format, let us know so in future we can try and name them a bit differently.

Hope you can make many wins.
List of our most powerful reversal indicators | Guide to the "All Averages" Filters (ADXvma, Laguerre etc.)
Using Fibonacci "numbers" for indicator settings 💡
How to draw Fibonacci Extensions easily | The best way to draw Support & Resistance

Re: MT4 Indicator requests and ideas

22028
Please can someone help me make this code to work on mt4 platform. Here is the code
//+------------------------------------------------------------------+
//| SignalHistogram_MTF.mq4 |
//| Histogram: ALL 4 must agree — RSI>50, Momentum>100, |
//| DeMarker>0.5, OsMA>0 (bullish) and inverse bearish |
//| Alert on NEW candle open (non-repainting) |
//| MTF: user selects higher timeframe in inputs |
//+------------------------------------------------------------------+
#property copyright "Custom"
#property link ""
#property version "1.00"
#property strict

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2

// Bull histogram (positive)
#property indicator_label1 "Bull Signal"
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 clrDodgerBlue
#property indicator_style1 STYLE_SOLID
#property indicator_width1 3

// Bear histogram (negative)
#property indicator_label2 "Bear Signal"
#property indicator_type2 DRAW_HISTOGRAM
#property indicator_color2 clrOrangeRed
#property indicator_style2 STYLE_SOLID
#property indicator_width2 3

//--- Input Parameters
input int RSI_Period = 14; // RSI Period
input int Mom_Period = 14; // Momentum Period
input int DeM_Period = 14; // DeMarker Period
input int OSMA_Fast = 12; // OsMA Fast EMA
input int OSMA_Slow = 26; // OsMA Slow EMA
input int OSMA_Signal = 9; // OsMA Signal Period
input ENUM_TIMEFRAMES HTF = PERIOD_H4; // Higher Timeframe (MTF)
input bool UseHTF = true; // Enable MTF Filter
input bool EnableAlerts = true; // Enable Alerts
input bool AlertOnScreen = true; // Alert: popup message
input bool AlertOnEmail = false; // Alert: send email
input bool AlertOnPush = false; // Alert: push notification

//--- Buffers
double BullBuffer[];
double BearBuffer[];

//--- Alert state tracker (to fire only once per new bar)
datetime LastAlertBarTime = 0;

//+------------------------------------------------------------------+
int OnInit()
{
SetIndexBuffer(0, BullBuffer);
SetIndexBuffer(1, BearBuffer);

SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);

IndicatorShortName("SignalHistogram MTF ["+(string)HTF+"]");
IndicatorDigits(2);

return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Get signal for a given timeframe and bar shift |
//| Returns: 1 = Bull, -1 = Bear, 0 = No signal |
//+------------------------------------------------------------------+
int GetSignal(ENUM_TIMEFRAMES tf, int shift)
{
// --- RSI
double rsi = iRSI(NULL, tf, RSI_Period, PRICE_CLOSE, shift);

// --- Momentum
double mom = iMomentum(NULL, tf, Mom_Period, PRICE_CLOSE, shift);

// --- DeMarker
double dem = iDeMarker(NULL, tf, DeM_Period, shift);

// --- OsMA
double osma = iOsMA(NULL, tf, OSMA_Fast, OSMA_Slow, OSMA_Signal, PRICE_CLOSE, shift);

// --- Check BULL: all above their levels
bool bull = (rsi > 50.0) &&
(mom > 100.0) &&
(dem > 0.5) &&
(osma > 0.0);

// --- Check BEAR: all below their levels
bool bear = (rsi < 50.0) &&
(mom < 100.0) &&
(dem < 0.5) &&
(osma < 0.0);

if(bull) return 1;
if(bear) return -1;
return 0;
}

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int limit = rates_total - prev_calculated;
if(prev_calculated == 0) limit = rates_total - 1;

for(int i = limit; i >= 0; i--)
{
BullBuffer = 0.0;
BearBuffer = 0.0;

// Signal on current TF (use bar i)
int sigCurrent = GetSignal(Period(), i);

// MTF Filter (use iBarShift to map current bar time to HTF bar)
int sigHTF = sigCurrent; // default: pass-through if MTF disabled
if(UseHTF && HTF != Period())
{
int htfShift = iBarShift(NULL, HTF, time, false);
sigHTF = GetSignal(HTF, htfShift);
}

// Final signal: both TFs must agree
int finalSig = 0;
if(sigCurrent == sigHTF) finalSig = sigCurrent;

// Assign histogram value (height = 1 or -1 for clean uniform bars)
if(finalSig == 1) BullBuffer = 1.0;
if(finalSig == -1) BearBuffer = -1.0;
}

//--- Alert logic: fire ONCE on the open of bar[0] (new candle)
if(EnableAlerts && time[0] != LastAlertBarTime)
{
// Check signal on bar[1] (the just-CLOSED bar), which is confirmed
// and now visible at bar-open of the new candle — non-repainting
int alertSig = 0;
{
int sigC = GetSignal(Period(), 1);
int sigH = sigC;
if(UseHTF && HTF != Period())
{
int htfShift = iBarShift(NULL, HTF, time[1], false);
sigH = GetSignal(HTF, htfShift);
}
if(sigC == sigH) alertSig = sigC;
}

if(alertSig != 0)
{
string direction = (alertSig == 1) ? "BULLISH" : "BEARISH";
string msg = StringFormat(
"SignalHistogram MTF | %s | %s signal on %s [HTF:%s]",
Symbol(),
direction,
EnumToString((ENUM_TIMEFRAMES)Period()),
EnumToString(HTF)
);

if(AlertOnScreen) Alert(msg);
if(AlertOnEmail) SendMail("MT4 Signal Alert", msg);
if(AlertOnPush) SendNotification(msg);
}

LastAlertBarTime = time[0];
}

return(rates_total);
}
//+------------------------------------------------------------------+

Re: MT4 Indicator requests and ideas

22029
samuelkanu wrote: Fri Jun 05, 2026 11:53 am Please can someone help me make this code to work on mt4 platform. Here is the code
//+------------------------------------------------------------------+
//| SignalHistogram_MTF.mq4 |
//| Histogram: ALL 4 must agree — RSI>50, Momentum>100, |
//| DeMarker>0.5, OsMA>0 (bullish) and inverse bearish |
//| Alert on NEW candle open (non-repainting) |
//| MTF: user selects higher timeframe in inputs |
//+------------------------------------------------------------------+
...
...
...
...
//+------------------------------------------------------------------+

Code: Select all

//+------------------------------------------------------------------+
//|                                           SignalHistogram_MTF.mq4|
//|                                                           Custom |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Custom"
#property link      ""
#property version   "1.00"
#property strict

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2

// Bull histogram (positive)
#property indicator_label1  "Bull Signal"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrDodgerBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

// Bear histogram (negative)
#property indicator_label2  "Bear Signal"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrOrangeRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3

//--- Input Parameters
input int             RSI_Period     = 14;          // RSI Period
input int             Mom_Period     = 14;          // Momentum Period
input int             DeM_Period     = 14;          // DeMarker Period
input int             OSMA_Fast      = 12;          // OsMA Fast EMA
input int             OSMA_Slow      = 26;          // OsMA Slow EMA
input int             OSMA_Signal    = 9;           // OsMA Signal Period
input ENUM_TIMEFRAMES HTF            = PERIOD_H4;   // Higher Timeframe (MTF)
input bool            UseHTF         = true;        // Enable MTF Filter
input bool            EnableAlerts   = true;        // Enable Alerts
input bool            AlertOnScreen  = true;        // Alert: popup message
input bool            AlertOnEmail   = false;       // Alert: send email
input bool            AlertOnPush    = false;       // Alert: push notification

//--- Buffers
double BullBuffer[];
double BearBuffer[];

//--- Alert state tracker (to fire only once per new bar)
datetime LastAlertBarTime = 0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   SetIndexBuffer(0, BullBuffer);
   SetIndexBuffer(1, BearBuffer);
   
   SetIndexEmptyValue(0, 0.0);
   SetIndexEmptyValue(1, 0.0);
   
   IndicatorShortName("SignalHistogram MTF ["+EnumToString(HTF)+"]");
   IndicatorDigits(2);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Get signal for a given timeframe and bar shift                   |
//| Returns: 1 = Bull, -1 = Bear, 0 = No signal                     |
//+------------------------------------------------------------------+
int GetSignal(ENUM_TIMEFRAMES tf, int shift)
{
   // --- RSI
   double rsi = iRSI(NULL, tf, RSI_Period, PRICE_CLOSE, shift);
   // --- Momentum
   double mom = iMomentum(NULL, tf, Mom_Period, PRICE_CLOSE, shift);
   // --- DeMarker
   double dem = iDeMarker(NULL, tf, DeM_Period, shift);
   // --- OsMA
   double osma = iOsMA(NULL, tf, OSMA_Fast, OSMA_Slow, OSMA_Signal, PRICE_CLOSE, shift);
   
   // --- Check BULL: all above their levels
   bool bull = (rsi > 50.0) && (mom > 100.0) && (dem > 0.5) && (osma > 0.0);
   
   // --- Check BEAR: all below their levels
   bool bear = (rsi < 50.0) && (mom < 100.0) && (dem < 0.5) && (osma < 0.0);
   
   if(bull) return 1;
   if(bear) return -1;
   return 0;
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int limit = rates_total - prev_calculated;
   if(prev_calculated == 0) limit = rates_total - 1;
   
   for(int i = limit; i >= 0; i--)
   {
      BullBuffer[i] = 0.0;
      BearBuffer[i] = 0.0;
      
      // 修复 1:将 _Period 强转为枚举类型
      int sigCurrent = GetSignal((ENUM_TIMEFRAMES)_Period, i);
      
      // MTF Filter (use iBarShift to map current bar time to HTF bar)
      int sigHTF = sigCurrent; // default: pass-through if MTF disabled
      if(UseHTF && HTF != (ENUM_TIMEFRAMES)_Period)
      {
         int htfShift = iBarShift(NULL, HTF, time[i], false);
         sigHTF = GetSignal(HTF, htfShift);
      }
      
      // Final signal: both TFs must agree
      int finalSig = 0;
      if(sigCurrent == sigHTF) finalSig = sigCurrent;
      
      // Assign histogram value (with explicit zero reset to prevent phantom drawing)
      if(finalSig == 1)   BullBuffer[i] = 1.0;
      if(finalSig == -1)  BearBuffer[i] = -1.0;
   }
   
   //--- Alert logic: fire ONCE on the open of bar (new candle)
   if(EnableAlerts && time[0] != LastAlertBarTime)
   {
      // Check signal on bar (the just-CLOSED bar), which is confirmed
      int alertSig = 0;
      {
         // 修复 2:将 _Period 强转为枚举类型
         int sigC = GetSignal((ENUM_TIMEFRAMES)_Period, 1);
         int sigH = sigC;
         if(UseHTF && HTF != (ENUM_TIMEFRAMES)_Period)
         {
            int htfShift = iBarShift(NULL, HTF, time[1], false);
            sigH = GetSignal(HTF, htfShift);
         }
         if(sigC == sigH) alertSig = sigC;
      }
      
      if(alertSig != 0)
      {
         string direction = (alertSig == 1) ? "BULLISH" : "BEARISH";
         // 修复 3:确保传递给 EnumToString() 的是一个显式的枚举强转
         string msg = StringFormat("SignalHistogram MTF | %s | %s signal on %s [HTF:%s]", 
                                   Symbol(), 
                                   direction, 
                                   EnumToString((ENUM_TIMEFRAMES)_Period), 
                                   EnumToString(HTF));
         
         if(AlertOnScreen)  Alert(msg);
         if(AlertOnEmail)   SendMail("MT4 Signal Alert", msg);
         if(AlertOnPush)    SendNotification(msg);
      }
      LastAlertBarTime = time[0];
   }
   
   return(rates_total);
}

Re: MT4 Indicator requests and ideas

22030
LIKE wrote: Fri Jun 05, 2026 2:53 pm

Code: Select all

//+------------------------------------------------------------------+
//|                                           SignalHistogram_MTF.mq4|
//|                                                           Custom |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Custom"
#property link      ""
#property version   "1.00"
#property strict

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2

// Bull histogram (positive)
#property indicator_label1  "Bull Signal"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrDodgerBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

// Bear histogram (negative)
#property indicator_label2  "Bear Signal"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrOrangeRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3

//--- Input Parameters
input int             RSI_Period     = 14;          // RSI Period
input int             Mom_Period     = 14;          // Momentum Period
input int             DeM_Period     = 14;          // DeMarker Period
input int             OSMA_Fast      = 12;          // OsMA Fast EMA
input int             OSMA_Slow      = 26;          // OsMA Slow EMA
input int             OSMA_Signal    = 9;           // OsMA Signal Period
input ENUM_TIMEFRAMES HTF            = PERIOD_H4;   // Higher Timeframe (MTF)
input bool            UseHTF         = true;        // Enable MTF Filter
input bool            EnableAlerts   = true;        // Enable Alerts
input bool            AlertOnScreen  = true;        // Alert: popup message
input bool            AlertOnEmail   = false;       // Alert: send email
input bool            AlertOnPush    = false;       // Alert: push notification

//--- Buffers
double BullBuffer[];
double BearBuffer[];

//--- Alert state tracker (to fire only once per new bar)
datetime LastAlertBarTime = 0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   SetIndexBuffer(0, BullBuffer);
   SetIndexBuffer(1, BearBuffer);
   
   SetIndexEmptyValue(0, 0.0);
   SetIndexEmptyValue(1, 0.0);
   
   IndicatorShortName("SignalHistogram MTF ["+EnumToString(HTF)+"]");
   IndicatorDigits(2);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Get signal for a given timeframe and bar shift                   |
//| Returns: 1 = Bull, -1 = Bear, 0 = No signal                     |
//+------------------------------------------------------------------+
int GetSignal(ENUM_TIMEFRAMES tf, int shift)
{
   // --- RSI
   double rsi = iRSI(NULL, tf, RSI_Period, PRICE_CLOSE, shift);
   // --- Momentum
   double mom = iMomentum(NULL, tf, Mom_Period, PRICE_CLOSE, shift);
   // --- DeMarker
   double dem = iDeMarker(NULL, tf, DeM_Period, shift);
   // --- OsMA
   double osma = iOsMA(NULL, tf, OSMA_Fast, OSMA_Slow, OSMA_Signal, PRICE_CLOSE, shift);
   
   // --- Check BULL: all above their levels
   bool bull = (rsi > 50.0) && (mom > 100.0) && (dem > 0.5) && (osma > 0.0);
   
   // --- Check BEAR: all below their levels
   bool bear = (rsi < 50.0) && (mom < 100.0) && (dem < 0.5) && (osma < 0.0);
   
   if(bull) return 1;
   if(bear) return -1;
   return 0;
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int limit = rates_total - prev_calculated;
   if(prev_calculated == 0) limit = rates_total - 1;
   
   for(int i = limit; i >= 0; i--)
   {
      BullBuffer[i] = 0.0;
      BearBuffer[i] = 0.0;
      
      // 修复 1:将 _Period 强转为枚举类型
      int sigCurrent = GetSignal((ENUM_TIMEFRAMES)_Period, i);
      
      // MTF Filter (use iBarShift to map current bar time to HTF bar)
      int sigHTF = sigCurrent; // default: pass-through if MTF disabled
      if(UseHTF && HTF != (ENUM_TIMEFRAMES)_Period)
      {
         int htfShift = iBarShift(NULL, HTF, time[i], false);
         sigHTF = GetSignal(HTF, htfShift);
      }
      
      // Final signal: both TFs must agree
      int finalSig = 0;
      if(sigCurrent == sigHTF) finalSig = sigCurrent;
      
      // Assign histogram value (with explicit zero reset to prevent phantom drawing)
      if(finalSig == 1)   BullBuffer[i] = 1.0;
      if(finalSig == -1)  BearBuffer[i] = -1.0;
   }
   
   //--- Alert logic: fire ONCE on the open of bar (new candle)
   if(EnableAlerts && time[0] != LastAlertBarTime)
   {
      // Check signal on bar (the just-CLOSED bar), which is confirmed
      int alertSig = 0;
      {
         // 修复 2:将 _Period 强转为枚举类型
         int sigC = GetSignal((ENUM_TIMEFRAMES)_Period, 1);
         int sigH = sigC;
         if(UseHTF && HTF != (ENUM_TIMEFRAMES)_Period)
         {
            int htfShift = iBarShift(NULL, HTF, time[1], false);
            sigH = GetSignal(HTF, htfShift);
         }
         if(sigC == sigH) alertSig = sigC;
      }
      
      if(alertSig != 0)
      {
         string direction = (alertSig == 1) ? "BULLISH" : "BEARISH";
         // 修复 3:确保传递给 EnumToString() 的是一个显式的枚举强转
         string msg = StringFormat("SignalHistogram MTF | %s | %s signal on %s [HTF:%s]", 
                                   Symbol(), 
                                   
                                   direction, 
                                   EnumToString((ENUM_TIMEFRAMES)_Period), 
                                   EnumToString(HTF));
         
         if(AlertOnScreen)  Alert(msg);
         if(AlertOnEmail)   SendMail("MT4 Signal Alert", msg);
         if(AlertOnPush)    SendNotification(msg);
      }
      LastAlertBarTime = time[0];
   }
   
   return(rates_total);
}

Thanks so much. It works. Remain blessed 🙏