0 bar yeniden hesaplanmıyor - aynı nedenle - başladınız - 0'dan başlamıyor
0 barım var formülle hesaplanmıyor
Buffer[ 0 ]=price[ 0 ];
Ardından, fiyat hareketine bağlı olarak gösterge trendi yakalayacaktır.
Örneğin, fiyatın göstergeyi terk etmesi ve hareket etmemesi koşuluyla, " dönem " mumlarında gösterge fiyatı yakalayacaktır, bu benim için MA'ya bir çeşit alternatiftir.
İlk göstergem. Bir karakteri 0'dan 100'e ölçeklendirmek istiyorum. Doğru mu yapıyorum? Ve mevcut çubuğun yeniden hesaplanmaması nasıl yapılır (test cihazında seğirir, ancak grafikte değil)
#property indicator_separate_window#property indicator_minimum 0#property indicator_maximum 100#property indicator_buffers 1#property indicator_plots 1//--- plot Label1#property indicator_label1 "Main"#property indicator_type1 DRAW_LINE#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- indicator buffersdouble MainBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//--- indicator buffers mappingSetIndexBuffer ( 0 ,MainBuffer, INDICATOR_DATA );
IndicatorSetString ( INDICATOR_SHORTNAME , "NormSymbol" );
IndicatorSetInteger ( INDICATOR_DIGITS , 2 );
ArrayInitialize (MainBuffer, EMPTY_VALUE );
//---return ( 0 );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int first,bar,nLowBar= 0 ,nHighBar= 0 ;
int nVizCount = ( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS );
if (prev_calculated== 0 ) // проверка на первый старт расчёта индикатора
{
first= 0 ; // стартовый номер для расчёта всех баров
}
else
{
first=prev_calculated- 1 ; // стартовый номер для расчёта новых баров
}
//---- основной цикл расчёта индикатораfor (bar=first; bar<rates_total; bar++)
{
nLowBar = ArrayMinimum (low, bar, nVizCount);
nHighBar= ArrayMaximum (high, bar, nVizCount);
if (nLowBar> 0 && nHighBar> 0 && high[nHighBar]-low[nLowBar]!= 0 )
{
MainBuffer[bar]=((close[bar] -low[nLowBar])/(high[nHighBar]-low[nLowBar]))* 100 ;
}
else
{
MainBuffer[bar]= EMPTY_VALUE ;
}
}
//--- return value of prev_calculated for next callreturn (rates_total);
}
Konstantin83 : mevcut çubuğun yeniden hesaplanmaması nasıl yapılır
Mevcut çubuğun açılış saatini hatırlayın ve gelen tik ile karşılaştırın. Geçerli çubuğun değerlerini yalnızca değerler eşleşmediğinde yeniden hesaplayın.
Mevcut çubuğun açılış saatini hatırlayın ve gelen tik ile karşılaştırın. Geçerli çubuğun değerlerini yalnızca değerler eşleşmediğinde yeniden hesaplayın.
Evet, başka bir şey fark etmedim. Makaleler benzer bir yapı önermektedir. Sıfıra bölme testi var.
Evet, yeniden hesaplamamak için hala hatırladığım kadarıyla prev_calculated ve Rate_total'ı karşılaştırabilirsiniz.
Gösterge ile terminali kapattıktan ve ardından terminali başlattıktan sonra gösterge neden bir çizgi çekmiyor biliyor musunuz? Başka bir zaman dilimine geçerseniz, o zaman çizilir.
Konstantin83 : Gösterge ile terminali kapattıktan ve ardından terminali çalıştırdıktan sonra göstergenin neden çizgi çekmediğini biliyor musunuz? Başka bir zaman dilimine geçerseniz, o zaman çizilir.
Başlangıçta, terminalin “yükselmesi”, veritabanlarını sunucuyla senkronize etmesi vb. için biraz zamana ihtiyacı vardır. Gösterge aynı anda başlatılırsa, göstergeyi hesaplamak için henüz veri olmayabilir. En aptal çözümü deneyin: OnInit()'e birkaç saniyelik bir gecikme ekleyin.
İyi bir şekilde, sorunlu bir alan ararken tüm önemli bilgilerin yazdırılması arzu edilir. Tip
Buna değiştirildi
çalışıyor gibi görünüyordizileriniz seri değil.
işte burada -
Buffer[i+ 1 ]=Buffer[i]+delta;geleceğe göz atmak
0 bar yeniden hesaplanmıyor - aynı nedenle - başladınız - 0'dan başlamıyor
dizileriniz seri değil.
işte burada -
geleceğe göz atmak
0 bar yeniden hesaplanmıyor - aynı nedenle - başladınız - 0'dan başlamıyor
0 barım var formülle hesaplanmıyor
Ardından, fiyat hareketine bağlı olarak gösterge trendi yakalayacaktır.
Örneğin, fiyatın göstergeyi terk etmesi ve hareket etmemesi koşuluyla, " dönem " mumlarında gösterge fiyatı yakalayacaktır, bu benim için MA'ya bir çeşit alternatiftir.
lazarev-d-m :
benim için MA'ya bir çeşit alternatif
İlk göstergem. Bir karakteri 0'dan 100'e ölçeklendirmek istiyorum. Doğru mu yapıyorum? Ve mevcut çubuğun yeniden hesaplanmaması nasıl yapılır (test cihazında seğirir, ancak grafikte değil)
Mevcut çubuğun açılış saatini hatırlayın ve gelen tik ile karşılaştırın. Geçerli çubuğun değerlerini yalnızca değerler eşleşmediğinde yeniden hesaplayın.
Başlatma bloğuna koyacağım şey bu:
ve değişkenler programın global düzeyinde bildirilecektir:
Mevcut çubuğun açılış saatini hatırlayın ve gelen tik ile karşılaştırın. Geçerli çubuğun değerlerini yalnızca değerler eşleşmediğinde yeniden hesaplayın.
Başlatma bloğuna koyacağım şey bu:
Evet, başka bir şey fark etmedim. Makaleler benzer bir yapı önermektedir. Sıfıra bölme testi var.
Evet, yeniden hesaplamamak için hala hatırladığım kadarıyla prev_calculated ve Rate_total'ı karşılaştırabilirsiniz.
Evet, başka bir şey fark etmedim. Makaleler benzer bir yapı önermektedir. Sıfıra bölme testi var.
Evet, yeniden hesaplamamak için hala hatırladığım kadarıyla prev_calculated ve Rate_total'ı karşılaştırabilirsiniz.
Başlangıçta, terminalin “yükselmesi”, veritabanlarını sunucuyla senkronize etmesi vb. için biraz zamana ihtiyacı vardır. Gösterge aynı anda başlatılırsa, göstergeyi hesaplamak için henüz veri olmayabilir. En aptal çözümü deneyin: OnInit()'e birkaç saniyelik bir gecikme ekleyin.
İyi bir şekilde, sorunlu bir alan ararken tüm önemli bilgilerin yazdırılması arzu edilir. Tip
Yedelkin :
Şu anki zaman modunda alım satım yapmak için henüz herhangi bir yardım bulamadım - sadece bir demo hesabında bir pozisyon açıp kapatmayı deneyin.
İşte buldum: https://www.mql5.com/en/forum/6343/page96#comment_419028