Discussão do artigo "Desenvolvimento de um sistema de negociação baseado no indicador Ichimoku"

 

Novo artigo Desenvolvimento de um sistema de negociação baseado no indicador Ichimoku foi publicado:

Neste artigo continuamos a série em que aprendemos a construir sistemas de negociação com base nos indicadores mais populares. Desta vez vamos falar sobre o indicador Ichimoku e criar um sistema de negociação baseado nos seus valores.

Nesta parte, desenvolveremos um plano para escrever código de acordo com as estratégias consideradas. Considero este um dos passos mais importantes no estudo das estratégias de negociação, pois o plano/esquema permite desenvolver passo a passo o sistema de negociação.

  • Primeira estratégia: identificador de tendência baseado no Ichimoku

De acordo com a descrição dessa estratégia, precisamos criar um sistema de negociação que verifique constantemente os preços de fechamento, os valores Senkou Span A e Senkou span. O sistema então tem que comparar esses valores e determinar qual é maior e qual é menor. Com base nisso, ele deve decidir se o mercado está em tendência de alta ou de baixa. E o valor deve ser exibido como um comentário no gráfico. Além disso, os valores para o preço de fechamento e para as linhas Ichimoku no gráfico devem ser exibidos adicionalmente. Se o preço de fechamento for maior que o Span B e maior que o Span A, então a tendência é de alta. Se o preço de fechamento for inferior ao Span B e inferior ao Span A, a tendência é de baixa.

Diagrama de estratégia para identificação de tendências usando Ichimoku

Autor: Mohamed Abdelmaaboud

 
Essa é uma boa apresentação, eu gostei
 
ApostleT #:
Essa é uma boa apresentação, gostei muito
Obrigado por seu comentário
 
Aula muito boa e útil.
Muito obrigado
 
Acho que é melhor combinar as estratégias descritas acima em uma só para fortalecer os sinais de negociação.
 

Excelente artigo - o único pequeno problema é que tive vazamentos de memória com o código de exemplo


Descobri que a exclusão do objeto em DeInit() resolveu o problema

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete Ichimoku;
  }
 
Olá a todos, ajudem-me a resolver o problema do mql5:
Arquivos anexados:
trendtang.mq5  3 kb
 

minha mente :

draw spanB limegreen when close > past clouds and close > past tenkansen, close > past kijunsen and close > Present clouds, spanA > spanB :


#include <Indicators/Trend.mqh>

CiIchimoku*Ichimoku;

//--- configurações do indicador

#property indicator_chart_window

#property indicator_buffers 9

#Propriedade 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(2,sp2tl,INDICATOR_DATA);

SetIndexBuffer(3,tenqk,INDICATOR_DATA); SetIndexBuffer(3,tenqk,INDICATOR_DATA);

SetIndexBuffer(4,kijqk,INDICATOR_DATA); SetIndexBuffer(4,kijqk,INDICATOR_DATA);

SetIndexBuffer(5,sp1ht,INDICATOR_DATA);

SetIndexBuffer(6,sp2ht,INDICATOR_DATA); SetIndexBuffer(6,sp2ht,INDICATOR_DATA);

SetIndexBuffer(7,sp1qk,INDICATOR_DATA); SetIndexBuffer(7,sp1qk,INDICATOR_DATA);

SetIndexBuffer(8,sp2qk,INDICATOR_DATA);

IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);

//--- define a primeira barra a partir da qual o índice será desenhado

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,51);

//--- as linhas se deslocam ao desenhar

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;

//---

se(prev_calculated==0)

start=0;

else

start=prev_calculated-1;

//--- loop principal

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 spanAtl= 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;

se(

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];

}

senão

{

trendtang[i]=EMPTY_VALUE;

}

}

//---

return(rates_total);

}