Squeeze Momentum Indicator [LazyBear]

MQL5 Esperti

Lavoro terminato

Tempo di esecuzione 31 minuti
Feedback del cliente
absolutely brilliant everything i ask for and more, and all done within a couple of hours. I would use again without hesitation
Feedback del dipendente
Very thanks for order! Please let me know if you need programmer!

Specifiche

I would like someone who could change this indicator onto an expert adviser.

i want it to buy when the red histogram changes to green and see when green changes to red. i know that this is not a great strategy but i can add other indicators later.

I want the mql5 an ex5 files please

//+------------------------------------------------------------------+
//|                                     SqueezeMomentumIndicator.mq5 |
//|                                Copyright 2020, Andrei Novichkov. |
//|                                               http://fxstill.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Andrei Novichkov."
#property description "Translate from Pine: Squeeze Momentum Indicator [LazyBear]"
/*********************************************************************************************************
This is a derivative of John Carter's 
"TTM Squeeze" volatility indicator, as discussed in his book "Mastering the Trade" (chapter 11).

Black crosses on the midline show that the market just entered a squeeze 
( Bollinger Bands are with in Keltner Channel).
This signifies low volatility , market preparing itself for an explosive move (up or down).
Gray crosses signify "Squeeze release".

Mr.Carter suggests waiting till the first gray after a black cross, and taking a position in the 
direction of the momentum (for ex., if momentum value is above zero, go long).
Exit the position when the momentum changes (increase or decrease - signified by a color change).

Mr.Carter uses simple momentum indicator , while I have used a different method (linreg based)
to plot the histogram.

More info:
- Book: Mastering The Trade by John F Carter 
*********************************************************************************************************/
#property link      "http://fxstill.com"
#property version   "1.00"


#property indicator_separate_window

#property indicator_buffers 5
#property indicator_plots   2

#property indicator_label1  "SqueezeMomentum"
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  clrLimeGreen, clrGreen, clrRed, clrMaroon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

#property indicator_label2  "SqueezeMomentumLine"
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color2  clrDodgerBlue, clrBlack, clrGray
#property indicator_style2  STYLE_SOLID
#property indicator_width2  5

//--- input parameters
input int      lengthBB                 = 20;          // Bollinger Bands Period
input double   multBB                   = 2.0;         // Bollinger Bands MultFactor
input int      lengthKC                 = 20;          // Keltner Channel Period
input double   multKC                   = 1.5;         // Keltner Channel MultFactor
input ENUM_APPLIED_PRICE  applied_price = PRICE_CLOSE; // type of price or handle 


double iB[], iC[], lB[], lC[];
double srce[];
int kc, bb;

static int MINBAR = MathMax(lengthBB, lengthKC) + 1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {

   SetIndexBuffer(0, iB,    INDICATOR_DATA);
   SetIndexBuffer(1, iC,    INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2, lB,    INDICATOR_DATA);
   SetIndexBuffer(3, lC,    INDICATOR_COLOR_INDEX);   
   SetIndexBuffer(4, srce,  INDICATOR_CALCULATIONS);
   
   ArraySetAsSeries(iB,    true);
   ArraySetAsSeries(iC,    true);
   ArraySetAsSeries(srce,   true);
   ArraySetAsSeries(lB, true);
   ArraySetAsSeries(lC,   true);   

   IndicatorSetString(INDICATOR_SHORTNAME,"SQZMOM");
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   
   kc = iCustom(NULL, 0, "KeltnerChannel", lengthKC, multKC, false, MODE_SMA, applied_price);
   if (kc == INVALID_HANDLE) {
      Print("Error while open KeltnerChannel");
      return(INIT_FAILED);
   }   
   bb = iBands(NULL, 0, lengthBB, 0, multBB, applied_price);
   if (bb == INVALID_HANDLE) {
      Print("Error while open BollingerBands");
      return(INIT_FAILED);
   }      
   return(INIT_SUCCEEDED);
}
  
void OnDeinit(const int reason) {

   IndicatorRelease(kc);
   IndicatorRelease(bb);     
}

void GetValue(const double& h[], const double& l[], const double& c[], int shift) {
   
   double bbt[1], bbb[1], kct[1], kcb[1];
   if (CopyBuffer(bb, 1,  shift, 1, bbt) <= 0) return;
   if (CopyBuffer(bb, 2,  shift, 1, bbb) <= 0) return;
   if (CopyBuffer(kc, 0,  shift, 1, kct) <= 0) return; 
   if (CopyBuffer(kc, 2,  shift, 1, kcb) <= 0) return; 
  
   bool sqzOn  = (bbb[0] > kcb[0]) && (bbt[0] < kct[0]);
   bool sqzOff = (bbb[0] < kcb[0]) && (bbt[0] > kct[0]);
   bool noSqz  = (sqzOn == false)  && (sqzOff == false); 
   
   int indh = iHighest(NULL, 0, MODE_HIGH, lengthKC, shift); 
   if (indh == -1) return;
   int indl = iLowest(NULL, 0, MODE_LOW, lengthKC, shift);
   if (indl == -1) return;       
   double avg = (h[indh] + l[indl]) / 2;
          avg = (avg + (kct[0] + kcb[0]) / 2) / 2;
   srce[shift] = c[shift] - avg; 
     
   double error;
   iB[shift] = LinearRegression(srce, lengthKC, shift, error);
   
   if (iB[shift] > 0){
      if(iB[shift] < iB[shift + 1]) iC[shift] = 1;
   } else {
      if(iB[shift] < iB[shift + 1]) iC[shift] = 2;
      else iC[shift] = 3;
   }
   
   if (!noSqz) {
      lC[shift] = (sqzOn)? 1: 2;
   }
}

double LinearRegression(const double& array[], int period, int shift, double& error) {
  
   double sx = 0, sy = 0, sxy = 0, sxx = 0, syy = 0, y = 0;
   
   int param = (ArrayIsSeries(array) )? -1: 1;
   
   for (int x = 0; x < period; x++) {
      y    = array[shift + param * x];
      sx  += x;
      sy  += y;
      sxx += x * x;
      sxy += x * y;
      syy += y * y;
   }//for (int x = 1; x <= period; x++)
               
   double slope = (period * sxy - sx * sy) / (sx * sx - period * sxx);
   double intercept = (sy - slope * sx) / period;
   error = MathSqrt((period * syy - sy * sy - slope * slope * (period * sxx - sx*sx)) / 
                    (period * (period - 2)) );
                    
   return intercept + slope * period;
}//double LinearRegression(const double& array[], int shift)

//+------------------------------------------------------------------+
//| 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[])
  {
      if(rates_total <= 4) return 0;
      ArraySetAsSeries(close,true);    
      ArraySetAsSeries(high,true); 
      ArraySetAsSeries(low,true); 
      int limit = rates_total - prev_calculated;
      if (limit == 0)        {   //A new tick has come
      } else if (limit == 1) {   // A new bar is formed
         GetValue(high, low, close, 1);      
      } else if (limit > 1)  {   // The first call of the indicator, changing the timeframe, loading data from history
         ArrayInitialize(iB,    EMPTY_VALUE);
         ArrayInitialize(iC,    0);
         ArrayInitialize(lB,    0);
         ArrayInitialize(lC,    0);         
         ArrayInitialize(srce,  0);
         limit = rates_total - MINBAR;
         for(int i = limit; i >= 1 && !IsStopped(); i--){
            GetValue(high, low, close, i);
         }//for(int i = limit + 1; i >= 0 && !IsStopped(); i--)
         return(rates_total);         
      }
//      GetValue(high, low, close, 0);          
   return(rates_total);
  
  
}
//+------------------------------------------------------------------+


Con risposta

1
Sviluppatore 1
Valutazioni
(1156)
Progetti
1462
63%
Arbitraggio
21
57% / 10%
In ritardo
43
3%
Gratuito
2
Sviluppatore 2
Valutazioni
(8)
Progetti
16
0%
Arbitraggio
8
13% / 75%
In ritardo
3
19%
Gratuito
3
Sviluppatore 3
Valutazioni
(361)
Progetti
644
26%
Arbitraggio
92
72% / 14%
In ritardo
12
2%
In elaborazione
Pubblicati: 1 codice
4
Sviluppatore 4
Valutazioni
(87)
Progetti
114
26%
Arbitraggio
7
29% / 57%
In ritardo
5
4%
Gratuito
5
Sviluppatore 5
Valutazioni
(54)
Progetti
53
17%
Arbitraggio
7
0% / 100%
In ritardo
5
9%
Gratuito
Ordini simili
Read signal and enter trade and close trade at good profits and open trade again. Either bullish or bearish signals at 0.1 on XAUUSD. Maximum trade a day should be 4-5 times with good opens and close signals. Looking foward to a long cooperation and also a honest and genuine person
Strategy Overview: I am looking for a professional MQL5 developer to create an Expert Advisor named "AURAE". The EA is based on a hybrid strategy that combines trend momentum analysis with volatility filters to identify high-probability entry points. Core Requirements: Logic: The EA should analyze trend direction using Moving Averages and confirm momentum using RSI. Entry Rules: * Buy: When the price closes above
AlphaGreen 150 - 200 USD
Hello, I need a professional MT5 Expert Advisor (EA) developed for a custom indicator-based strategy. Strategy Logic: Determine the trend direction: Uptrend = Buy opportunities only. Downtrend = Sell opportunities only. Entry Conditions: The indicator has 4 lines: 2 Green lines, 1 Red line, and 1 Blue line. Open a Buy trade when both Green lines move inside/between the Red and Blue lines during an uptrend. Open a
Robot trading 30+ USD
A trading robot that operates with a balance of $20 to $50, with a loss of $5 and a profit of $10, and a maximum of three trades per day
Prop Firm EA 30 - 40 USD
I am looking for an MT5 Expert Advisor specifically designed to help meet common prop-firm evaluation requirements while prioritizing consistency, low drawdown, and strong risk management. The EA should use a robust trend-following and market structure-based strategy with multi-timeframe confirmation, momentum filtering, and optional news filtering to avoid low-quality trades. It must include configurable risk
The bot uses: RSI MA(2/7) crossover for entry signals Price Bollinger Bands as trend filter RSI Bands(34) as confirmation London/NY session filter (M5 only) ATR-based SL/TP Gap bridge between sessions Here's your EA. Here's what it replicates from the Pine Script bot: Strategy logic RSI MA(2) crosses MA(7) for entry signals Price Bollinger Bands(20) as trend filter RSI Bands(34) as confirmation filter ATR-based SL/TP
UltraTrend EA 40+ USD
An Executive Assistant provides comprehensive administrative and operational support to senior leaders, ensuring efficient management of schedules, communications, meetings, and projects. They act as a key point of contact, coordinate business activities, maintain confidentiality, and help executives focus on strategic priorities while supporting organizational effectiveness
I need a simple bot for opening range. Simple Entry / Exit rules, to be able to customize the timeframe, time zone (entry candle) and other normal settings like size, etc
Hello, I am searching profitable, 0/1 rules strategy. Only serious offers please, I am expecting longer co-operation, I am open for your propositions, ideas. Have a nice day! I hope I will find here honest person
Need an Expert Advisor designed specifically for XAUUSD (Gold) , based on liquidity sweep + breakout confirmation logic. Market Focus Instrument: XAUUSD only Optimized for high volatility and intraday expansion behavior typical for Gold. Strategy Concept The EA is based on liquidity sweep of previous day levels followed by market structure shift and continuation in the confirmed direction. Daily Levels Previous Day

Informazioni sul progetto

Budget
30+ USD