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
Hi, I am looking for a marketer or affiliate to promote my Expert Advisor (EA). Offer Details: Partnership Model: Revenue Sharing / Performance-Based Commission. Duration: 6 Months of continuous profit-sharing from all generated sales/subscriptions. Profit Ratio: Flexible and open for negotiation depending on your marketing reach and experience (Details will be discussed via Private Message / DM). If you have a solid
Straddle bot v1.1.38 30 - 100 USD
any one can make straddle bot v1.1.38 its original made by yoforex.com Manual gold trading on the M15 chart demands constant attention. Price can break sharply in either direction or chop for hours. Many traders miss the move, enter late, or over-react when volatility spikes. Straddle EA V1.1.38 MT5 is built to handle that specific problem on XAUUSD by placing a multi-level pending-order grid on both sides of price
Indicador Maximas e Minimas + Super Trend O Indicador MAX/MIN é um indicador de análise técnica para o MetaTrader 5 , desenvolvido para ajudar você a identificar regiões importantes de preço e possíveis oportunidades de compra e venda. O que ele faz MAX/MIN: identifica máximas e mínimas relevantes do mercado e mostra os preços no gráfico. HH / HL / LH / LL: ajuda a visualizar a estrutura do mercado, mostrando quando
Subject: Custom MT5 Multi-Currency EA Request - Multi-Timeframe Strategy with Trailing Stop Hi, I am looking for a developer to create a custom Expert Advisor (EA) for MetaTrader 5 (MT5) . The EA must be optimized for multi-currency testing and trading , allowing me to run it across multiple currency pairs simultaneously. The trading logic should be based on a multi-timeframe approach using the following indicators
Hi All, Looking for a ready to TEST and USE EA which makes $20 per day with initial deposit of $200 only with controlled drawdown and no trades during news time. Please note: Budget is fixed and no trial and hit error for testing and developing EA as I do not have time. I will select the developer only after the TEST is successful only, do not force to select and make the payment and payment will be done once I am
Looking for an experienced Sierra Chart ACSIL/C++ developer to customize footprint chart. I need 3 things: 7-Day ATR – calculate and display a configurable 7-day ATR. Custom Footprint – footprint chart to match my preferred layout/data display. Automatic LVN – detect and plot Low Volume Nodes automatically based on volume distribution. I need to build one from scratch . Experience with Sierra Chart, ACSIL
This is SCAMMER! Need Good Programmer to UPDATE Current Expert Advisor To Use VirtualPendingOrders and UPDATE UI Dashboard 7 minutes ago MQL4 Experts Specification EN Good working version of an expert advisor needs update in the SOURCE CODE implement VirtualPendingOrders and UPDATE UI Dashboard. I will upload the Source code and approach to VirtualPendingOrders for selected programmer to update expert advisor
Hello Traders, Have a trading strategy or idea you want to automate? I specialize exclusively in MQL5 development, helping traders turn their concepts into professional trading solutions. Custom Expert Advisors — automate your strategy and reduce manual execution Custom Indicators — transform your market ideas into powerful trading tools Fix & Debug — identify errors and get your existing code working properly
please share: Strategy description — entry/exit rules, indicators used, timeframe(s), and instrument(s) (a written explanation, screenshots, or an existing indicator/EA to reference all work) Risk management rules — position sizing method (fixed lot / % risk), stop loss / take profit logic, max drawdown or daily loss limits, and whether martingale/grid/hedging is involved Broker & account details — broker name
I need a unique grid trading system for XAUUSD that combines entry, controlled two-sided grid expansion, DCA (Dollar Cost Averaging) basket profit control, hedging. Unlike traditional grid EAs that only trade against price, this unique grid system should dynamically build positions in both directions based on market movement, allowing flexible adaptation to changing conditions ie the grid needs to dynamically move

Informazioni sul progetto

Budget
30+ USD