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

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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.
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.
Autor: Mohamed Abdelmaaboud