Индикаторы: Индикатор "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);

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

 

 

Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

Индикаторы: spread_on_chart

newdigital, 2014.01.12 08:59

О чем говорит трейдерам спред?

  • Спреды основаны на цене покупки и продажи валютной пары.
  • Затраты зависят от спредов и размера лота.
  • Спреды являются переменными и должны быть указаны в вашем торговом программном обеспечении.

Спреды и Форекс

Каждый рынок имеет спред, и Форекс тоже. Спред определяется как разница в цене между тем, где трейдер может купить или продать базовый актив. Трейдеры, знакомые с акциями, синонимично называют это Bid: Ask.

Ниже мы видим пример расчета спреда для пары EURUSD. Сначала мы найдем цену покупки 1,35640, а затем вычтем цену продажи 1,32626. После этого мы получим значение .00014. Трейдеры должны помнить, что значение пункта определяется на EURUSD как 4-я цифра после запятой, поэтому окончательный спред рассчитывается как 1,4 пункта.

Теперь мы знаем, как рассчитать спред в пунктах, давайте посмотрим на фактические затраты, которые несут трейдеры.



Расходы и расчеты спредов

Поскольку спред - это просто число, нам нужно знать, как перевести его в доллары и центы. Хорошая новость заключается в том, что если вы можете найти спред, то после определения стоимости пункта и количества лотов, которыми вы торгуете, найти эту цифру будет очень просто с математической точки зрения.

Используя приведенные выше котировки, мы знаем, что в настоящее время можем купить EURUSD по цене 1,3564 и закрыть сделку по цене продажи 1,35474. Это означает, что, как только наша сделка будет открыта, трейдер понесет 1,4 пункта спреда. Чтобы определить общую стоимость, нам нужно умножить это значение на стоимость пункта, учитывая при этом общее количество торгуемых лотов. При торговле лотом в 10 тысяч EURUSD со стоимостью пункта в 1 доллар, общая стоимость сделки составит 1,40 доллара.

Помните, что стоимость пункта является экспоненциальной. Это означает, что вам нужно умножить это значение на количество лотов, которыми вы торгуете. По мере увеличения размера ваших позиций будет расти и стоимость спреда.


Изменения в спреде

Важно помнить, что спреды являются переменными, то есть они не всегда остаются неизменными и меняются время от времени. Эти изменения зависят от ликвидности, которая может меняться в зависимости от рыночных условий и предстоящих экономических данных. Чтобы узнать текущие ставки спреда, всегда обращайтесь к своей торговой платформе.

 

Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

Скрипты: Новости VLine

newdigital, 2014.01.30 09:25

Форекс-спреды и новости (по материалам статьи на dailyfx)

  • Спреды основаны на цене покупки и продажи валютной пары.
  • Спреды являются переменными и могут меняться во время новостей.
  • Следите за нормализацией спредов вскоре после экономических событий.

Финансовые рынки могут быть подвержены резкому влиянию экономических новостей. Новостные события происходят в течение всей торговой недели, как указано в экономическом календаре, и могут повысить волатильность рынка, а также увеличить спреды, которые вы видите на ваших любимых валютных парах.

Начинающим трейдерам необходимо ознакомиться с тем, что может произойти во время этих событий. Поэтому, чтобы лучше подготовить вас к предстоящим новостям, мы рассмотрим, что происходит со спредами на Форекс во время волатильных рынков.


Спреды и новости

Новости - это печально известное время рыночной неопределенности. Эти релизы в экономическом календаре происходят спорадически и в зависимости от того, оправдаются ожидания или нет, могут вызвать резкие колебания цен. Как и розничные трейдеры, крупные поставщики ликвидности не знают результатов новостных событий до их выхода! Поэтому они пытаются компенсировать часть своего риска путем увеличения спредов.

Выше приведен пример спредов во время выхода январских данных по занятости NFP. Обратите внимание, как расширились спреды на основных парах Forex. Несмотря на то, что это было временное явление, пока рынок не нормализуется, трейдеры будут вынуждены терпеть более высокие издержки торговли.


Работа со спредом

Важно помнить, что спреды являются переменными, то есть они не всегда остаются неизменными и меняются по мере того, как поставщики ликвидности меняют свои цены. Выше мы видим, как быстро спреды нормализуются после выхода новостей. За 5 минут спреды по паре EURUSD изменились с 6,4 пункта до 1,4 пункта. Что же остается трейдерам, желающим исполнить ордера на новостях?

Трейдеры всегда должны учитывать риск при торговле на волатильных рынках. Один из вариантов торговли на новостях - немедленно исполнять ордера на рынке в надежде, что волатильность рынка покроет возросшую стоимость спреда. Или же трейдеры могут подождать, пока рынки нормализуются, а затем воспользоваться преимуществами дополнительной ликвидности, когда активность на рынке спадет.


 

Извините!

Бессмысленные переменные объявлены и не работают!

 

Можно ли вместо разности использовать отношение (символ1/символ2)?


Спасибо!