Обсуждение статьи "Разработка торговой системы на основе индикатора Ишимоку"

 

Опубликована статья Разработка торговой системы на основе индикатора Ишимоку:

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

  • Стратегия первая: идентификатор тренда по Ишимоку

Согласно описанию этой стратегии нам нужно создать торговую систему, которая будет постоянно проверять цены закрытия, значения Senkou Span A и Senkou span. Затем система должна сравнивать эти значения и определять, какое из них больше, а какое меньше. На основе этого она должна решить, на рынке восходящий тренд или нисходящий. Соответствующее значение нужно вывести в виде комментария на график. Дополнительно на график нужно вывести значения цены закрытия и линий Ишимоку. Если цена закрытия одновременно больше, чем Span B и больше, чем Span A, то тренд восходящий. Если цена закрытия одновременно ниже, чем Span B и ниже, чем Span A, то тренд нисходящий.

Схема стратегии для идентификации тренда по Ишимоку

Автор: Mohamed Abdelmaaboud

 
Хорошая презентация, мне понравилось
 
ApostleT #:
Хорошая презентация, мне понравилось.
Спасибо за ваш комментарий
 
Очень хороший и полезный урок.
Спасибо
 
Я думаю, что лучше объединить описанные стратегии в одну, чтобы сделать торговые сигналы сильнее.
 

Отличная статья - только одна небольшая проблема заключается в том, что я получил утечку памяти в коде примера.


Я обнаружил, что удаление объекта в DeInit() устраняет эту проблему

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete Ichimoku;
  }
 
Привет всем, помогите разобраться с ошибкой в mql5:
Файлы:
trendtang.mq5  3 kb
 

мой ум :

Нарисовать spanB limegreen, когда близко > прошлые облака и близко > прошлые tenkansen, близко > прошлые kijunsen и близко > Настоящие облака, spanA > spanB :


#include <Indicators/Trend.mqh

CiIchimoku*Ichimoku;

//--- настройки индикатора

#property indicator_chart_window

#property indicator_buffers 9

#property indicator_plots 1

#property indicator_type1 DRAW_LINE

#property indicator_color1 LimeGreen

#property indicator_width1 2


double sp1tl[];

double sp2tl[];

double trendtang[];

double tenqk[];

double kijqk[];

double sp1ht[];

double sp2ht[];

double sp1qk[];

double sp2qk[];


void OnInit()

{

Ichimoku = new CiIchimoku();

Ichimoku.Create(_Symbol,PERIOD_CURRENT,9,26,52);

SetIndexBuffer(0,trendtang,INDICATOR_DATA);

SetIndexBuffer(1,sp1tl,INDICATOR_DATA);

SetIndexBuffer(2,sp2tl,INDICATOR_DATA);

SetIndexBuffer(3,tenqk,INDICATOR_DATA);

SetIndexBuffer(4,kijqk,INDICATOR_DATA);

SetIndexBuffer(5,sp1ht,INDICATOR_DATA);

SetIndexBuffer(6,sp2ht,INDICATOR_DATA);

SetIndexBuffer(7,sp1qk,INDICATOR_DATA);

SetIndexBuffer(8,sp2qk,INDICATOR_DATA);

IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);

//--- устанавливает первый бар, от которого будет отрисовываться индекс

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,51);

//--- смещение линий при рисовании

PlotIndexSetInteger(0,PLOT_SHIFT,25);

}

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[])

{

int start;

//---

if(prev_calculated==0)

start=0;

else

start=prev_calculated-1;

//--- основной цикл

for(int i=start; i<rates_total && !IsStopped(); i++)

{

MqlRates PArray[];

int Data=CopyRates(_Symbol,_Period,0,1,PArray);


Ichimoku.Refresh(-1);

double spanAtl= Ichimoku.SenkouSpanA(0);

double spanBtl= Ichimoku.SenkouSpanB(0);

double spanAht= Ichimoku.SenkouSpanA(-25);

double spanBht= Ichimoku.SenkouSpanB(-25);

double spanAqk= Ichimoku.SenkouSpanA(-51);

double spanBqk= Ichimoku.SenkouSpanB(-51);

double tenkanqk= Ichimoku.TenkanSen(-25);

double kijunqk= Ichimoku.KijunSen(-25);

sp1tl[i]=spanAtl;

sp2tl[i]=spanBtl;

tenqk[i]=tenkanqk;

kijqk[i]=kijunqk;

sp1ht[i]=spanAht;

sp2ht[i]=spanBht;

sp1qk[i]=spanAqk;

sp2qk[i]=spanBqk;

if(

sp1tl[i]>=sp2tl[i]

&& close[i]>tenqk[i]

&& close[i]>kijqk[i]

&& close[i]>sp1ht[i]

&& close[i]>sp2ht[i]

&& close[i]>sp1qk[i]

&& close[i]>sp2qk[i]

)

{

trendtang[i]=sp2tl[i];

}

else

{

trendtang[i]=EMPTY_VALUE;

}

}

//---

return(rates_total);

}