multimomentum

Author: Copyright 2021, Francesco Danti aka Abbadon1334
0 Views
0 Downloads
0 Favorites
multimomentum
//+------------------------------------------------------------------+
//|                                                MultiMomentum.mq5 |
//|                  Copyright 2021, Francesco Danti aka Abbadon1334 |
//|                                   https://www.francescodanti.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Francesco Danti aka Abbadon1334"
#property link      "https://www.francescodanti.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Variation
#property indicator_label1  "MultiMomentum"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int TotalBarsToCalculate=1000;   // Number of total bars to calculate
input int VariationPeriod=14;          // Momentum period

input string InputSymbolName01 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName02 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName03 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName04 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName05 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName06 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName07 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName08 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName09 = "";   // Symbol name as it shows in the MarketWatch
input string InputSymbolName10 = "";   // Symbol name as it shows in the MarketWatch

//--- indicator buffers
#include <symbolcollection.mqh>;

CSymbolCollection *SCollection = new CSymbolCollection(TotalBarsToCalculate);

double         VariationBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,VariationBuffer,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, TotalBarsToCalculate - 1);

   IndicatorSetString(INDICATOR_SHORTNAME,"MultiMomentum("+string(VariationPeriod)+")");

   IndicatorSetInteger(INDICATOR_LEVELCOLOR,100,clrWhiteSmoke);

   if(InputSymbolName01 != "")
      SCollection.Add(InputSymbolName01);
   if(InputSymbolName02 != "")
      SCollection.Add(InputSymbolName02);
   if(InputSymbolName03 != "")
      SCollection.Add(InputSymbolName03);
   if(InputSymbolName04 != "")
      SCollection.Add(InputSymbolName04);
   if(InputSymbolName05 != "")
      SCollection.Add(InputSymbolName05);
   if(InputSymbolName06 != "")
      SCollection.Add(InputSymbolName06);
   if(InputSymbolName07 != "")
      SCollection.Add(InputSymbolName07);
   if(InputSymbolName08 != "")
      SCollection.Add(InputSymbolName08);
   if(InputSymbolName09 != "")
      SCollection.Add(InputSymbolName09);
   if(InputSymbolName10 != "")
      SCollection.Add(InputSymbolName10);

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {

   if(rates_total<TotalBarsToCalculate+VariationPeriod)
      return(0);

   int start = rates_total - TotalBarsToCalculate;

   int collection_length = SCollection.GetCollectionLength();

   if(!SCollection.Update())
     {
      return 0;
     }

   int bar;
   for(bar = VariationPeriod; bar < TotalBarsToCalculate && !IsStopped(); bar++)
     {
      double sum = 0;

      for(int s=0; s<collection_length; s++)
        {
         MqlRates rate_prev = SCollection.GetRateAtPos(s,bar-VariationPeriod);
         MqlRates rate_actual = SCollection.GetRateAtPos(s,bar);
         sum+=(rate_actual.close*100/rate_prev.close);
        }

      VariationBuffer[start+bar] = (sum / collection_length);
     }

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

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---