Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Получи статус продавца и начни продавать свои сигналы!
Automated-Trading
Админ
88366
Automated-Trading 2012.08.22 08:25 

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

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

Автор: Dmitry

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

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

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

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

sv_
162
sv_ 2012.08.22 19:25  

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

 


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

 

sv_
162
sv_ 2012.08.22 20:45  

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

   //ArraySetAsSeries(ind1,true);

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

 

 

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий