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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---