Индикаторы: Индикатор "Spread_Of_Symbols"

 

Индикатор "Spread_Of_Symbols":

Индикатор показывает график разницы (суммы) цен торговых инструментов. Предназначен для визуальной оценки корреляции торговых символов. Будет очень полезен для интересующихся/занимающихся парным трейдингом (торговлей спредом). Бары индикатора синхронизированы по времени с барами графика на котором открывается индикатор.

Автор: Dmitry

 
Чтобы не плодить в Codebase подобные частные случаи, украсьте базу один раз - ChartBuilder.
 
hrenfx:
Чтобы не плодить в Codebase подобные частные случаи, украсьте базу один раз - ChartBuilder.
В этом индикаторе (ChartBuilder) - аж целых 23 входных параметра, что бы в нём разобраться нужно досканально изучать его описание, а мой индюк Spread_Of_Symbols - проше некуда, всего 4 входных параметра и  они понятны даже без описания. Понятно что  ChartBuilder наверное более универсален... зато мой проще донельзя, по его скелету любой начинающий может себе индюк написать.... и тем более Вы дали ссылку на индикатор четвёртого языка, а мой пятого
 

В том то и дело, что для простейших вещей ничего изучать там не надо. В вашем случае все предельно элементарно:

Formula1 = "AUDUSD - NZDUSD";
Перепишите просто продуманный инструментарий с MQL4 на MQL5. И практически 99% придуманных индикаторов по теме парного трейдинга будете сходу реализовывать на неплохом уровне.
 
Благодарность автору.
Для образовательных целей такой индикатор просто необходим. 

Сразу видно что куда добавлять. Когда сам дорабатываеш (расширяеш функционал) лучше понимаеш происходящее. 

 

Пробую канал навесить, но что-то криво вышло.

 


//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   4
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot Label3
#property indicator_label3  "Label3"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot Label4
#property indicator_label4  "Label4"
#property indicator_type4   DRAW_LINE
#property indicator_color4  clrRed
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1

//--- input parameters
input string         symbol1="EURUSD";
input string         symbol2="GBPUSD";
input double         mass_of_symbol1=1;
input double         mass_of_symbol2=1;
input int            ENPeriod    =  14;
input ENUM_MA_METHOD ENMethod    =  MODE_SMA;
input double         ENDeviation =  0.1;

//--- indicator buffers
double         UBuffer[];
double         LBuffer[];
double         CBuffer[];

#include <IncOnArray/IncEnvelopesOnArray.mqh>
CEnvelopesOnArray en;

int i,r1,r2,j;
double S,prs,k1,k2,d1,d2;
//--- indicator buffers
double        ind1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
    en.Init(ENPeriod,ENMethod,ENDeviation);
    
    //--- indicator buffers mapping
    SetIndexBuffer(0,ind1,INDICATOR_DATA);
    SetIndexBuffer(1,UBuffer,INDICATOR_DATA);
    SetIndexBuffer(2,LBuffer,INDICATOR_DATA);
    SetIndexBuffer(3,CBuffer,INDICATOR_DATA);
    
    PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,en.BarsRequired());
    PlotIndexSetString(1,PLOT_LABEL,en.Name()+" Upper");

    PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,en.BarsRequired());
    PlotIndexSetString(2,PLOT_LABEL,en.Name()+" Lower");

    PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,en.BarsRequired());
    PlotIndexSetString(3,PLOT_LABEL,en.Name()+" MA");

    //---
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   ArraySetAsSeries(time,true);ArraySetAsSeries(open,true);ArraySetAsSeries(high,true);ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);ArraySetAsSeries(tick_volume,true);ArraySetAsSeries(volume,true);ArraySetAsSeries(spread,true);

   ArraySetAsSeries(ind1,true);
   MqlRates rates1[]; ArraySetAsSeries(rates1,true);
   MqlRates rates2[]; ArraySetAsSeries(rates2,true);

   if(prev_calculated<rates_total)
     {
      for(i=0;i<rates_total;i++)
        {
         CopyRates(symbol1,0,time[i],1,rates1);
         CopyRates(symbol2,0,time[i],1,rates2);
         ind1[i]=mass_of_symbol1*rates1[0].close-mass_of_symbol2*rates2[0].close;
        }
     }

   en.Solve(rates_total,prev_calculated,ind1,CBuffer,UBuffer,LBuffer);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 

 

Похоже нужно в кодах Интежера разбираться.

   //ArraySetAsSeries(ind1,true);

убрал индексацию и стало отображаться, но не корректно.

 

 

Причина обращения: