Squeeze Momentum Indicator [LazyBear]

MQL5 Experts

Trabalho concluído

Tempo de execução 31 minutos
Comentário do cliente
absolutely brilliant everything i ask for and more, and all done within a couple of hours. I would use again without hesitation
Comentário do desenvolvedor
Very thanks for order! Please let me know if you need programmer!

Termos de Referência

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);
  
  
}
//+------------------------------------------------------------------+


Respondido

1
Desenvolvedor 1
Classificação
(1156)
Projetos
1462
63%
Arbitragem
21
57% / 10%
Expirado
43
3%
Livre
2
Desenvolvedor 2
Classificação
(8)
Projetos
16
0%
Arbitragem
8
13% / 75%
Expirado
3
19%
Livre
3
Desenvolvedor 3
Classificação
(361)
Projetos
643
26%
Arbitragem
92
72% / 14%
Expirado
12
2%
Trabalhando
Publicou: 1 código
4
Desenvolvedor 4
Classificação
(87)
Projetos
114
26%
Arbitragem
7
29% / 57%
Expirado
5
4%
Livre
5
Desenvolvedor 5
Classificação
(54)
Projetos
53
17%
Arbitragem
7
0% / 100%
Expirado
5
9%
Livre
Pedidos semelhantes
==== GENERAL SETTINGS ==== Buy trades = true Sell trades = true Upper Band period = 20 Lower Band period = 10 Timeframe = 1 Hour Next signal bars= 5 Order Comment = Donchian Channel EA Magic number = 123 Maximum allowed spread = 20 Maximum allowed slippage = 20 ====TRADE SETTINGS ==== Trade volume = VOLUME_FIXED / VOLUME_PERCENT Fixed Lots = 0.01 Risk percent of Balance = 5 TP Points (0 to No TP) = 100 SL Points (0
I am looking to develop a highly optimized and fully modular script in MQL5 specifically for detecting RSI Divergences. This script will serve as a foundational building block to be integrated into a larger, comprehensive Expert Advisor (EA) later. Therefore, execution speed, strict logic, and a clean codebase are my absolute top priorities. Here are the core technical requirements for this project: 1. MQL5
My requirement i have mention in the video. I explain it from a screen record will be more clear https://www.youtube.com/watch?v=oTCWx7tfckM Mainly RSI martingale TP/SL lot size will auto base on the profit/loss i wish to risk
We have an existing Expert Advisor (EA) for MetaTrader 4. We need to restrict the EA so it only works on specific MetaTrader account ID(s). Key Requirements: Add account ID locking functionality to the EA. EA should run only on authorized account number(s). If used on any unauthorized account, the EA should: Stop trading, and/or Display an error message (e.g., “Unauthorized Account”). Ability to easily update or add
I hope to acquire a profitable and existing expert advisor (EA) from the gold market, with complete source code, to add to our client portfolio. you can WECHAT: Faca7898 Please note EA when adding friends. It should be clarified that this does not require you to formulate or design new strategies. If you already have a verified, consistent, and production-ready EA, I am willing to purchase it immediately and engage
Hello I want a very profitable scalping EA , tight stoploss and low drawdown , for Xauusd or any pair, time frame any, daily profit 20$ minimum and minimum deposite 200$ maximum sir
I’m looking for an experienced developer to help build a trading bot for Polymarket , focused on short-term crypto prediction markets (e.g. 5–15 minute intervals). The strategy is fully rule-based and operates on binary outcome markets (YES/NO shares). The bot should be able to: monitor live market prices and probabilities, execute trades based on predefined conditions, manage positions dynamically before market
This project is to create or provide a back testable renko chart builder/EA for MT5 which must be: Back testable using strategy tester Optimisable using strategy tester Accurate in terms of price, including wicks Accurate in terms of time, with no future date issue. Able to produce both normal and median renko. The renko must have been developed by the developer OR have been used previously by the developer for off
Hi developers, I want to create a Trading Assistant. The minimum developer experience is someone who has created a Trading Assistant before. The developer has worked on more than 100 job orders The Trading Assistant uses a Risk-Reward Ratio, a movable panel, an expandable panel with a hidden menu, and a modern UI. Thank you
Core Requirements: Platform: MetaTrader 5 (MT5). Symbol: XAUUSD (Gold). Timeframes: M1 and M5 (user selectable). Trading Style: Scalping with controlled risk (not aggressive or high-risk strategies) -> adjustable, even better. Execution: Fast execution, optimized for gold market conditions. Frequence = adjustable, but there should be 10-20 trades per day. Strategy Logic: Use a reliable and conservative strategy

Informações sobre o projeto

Orçamento
30+ USD