Nikolay! En az gecikmeye ve en az sayıda yanlış sinyale sahip beyin çocuklarınızdan hangisi (tabii ki bu belirlenebilirse)
Nikolay! Hangi beyin çocuğunuz en az gecikmeye ve en az sayıda yanlış sinyale sahip (tabii ki bu belirlenebilirse).
Yani bu kesinlikle benim programlama tarzım değil.
Ağaçlar için odunu göremezsiniz = tüm yorumlar için kodu göremezsiniz.
Ayrıca, 'shift' giriş parametresi hiç kullanılmıyor.
Bunu benim tarzımda yeniden programladım, belki 'süper programcılar' kitabımdan bir yaprak alabilir.
//+------------------------------------------------------------------+ //|Süper trend.mq5 | //| Orijinal kod https://www.mql5.com/tr/code/527 adresinde bulundu | //| Orijinal kod Jason Robinson'dan, Nikolay Kositsin tarafından yeniden yazıldı | //| Ing. Otto Pauser takma adıyla Kronenchakra tarafından geliştirilmiştir | //+------------------------------------------------------------------+ //--- inckudes #include <Utils.mqh> //--- genel özellikler #property copyright COPY #property link LINK #property version "1.00" //--- gösterge özellikleri #property indicator_chart_window #property indicator_buffers 4 #property indicator_plots 4 //--- giriş parametreleri input int CCIPeriod = 50; // CCI gösterge dönemi input int ATRPeriod = 5; // ATR gösterge periyodu input int Level = 0; // CCI aktivasyon seviyesi //---- gösterge tamponları double ATR[], CCI[]; double TrendUp[], TrendDn[]; double SignUp[], SignDn[]; //---- küresel değişkenler int min_rates_total; int ATR_Handle, CCI_Handle; //+------------------------------------------------------------------+ //| Özel gösterge başlatma işlevi | //+------------------------------------------------------------------+ int OnInit() { min_rates_total=MathMax(CCIPeriod,ATRPeriod); CCI_Handle=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL); if(InvalidHandle(CCI_Handle,"iCCI")) return(INIT_FAILED); ATR_Handle=iATR(NULL,0,ATRPeriod); if(InvalidHandle(ATR_Handle,"iATR")) return(INIT_FAILED); string shortname=IndiShortName("Supertrend",CCIPeriod,ATRPeriod); IndicatorSetString(INDICATOR_SHORTNAME,shortname); IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); InitBuffer(TrendUp,DRAW_LINE ,"Supertrend Up" ,clrLime,min_rates_total,0 ,2,true); InitBuffer(TrendDn,DRAW_LINE ,"Supertrend Down" ,clrRed ,min_rates_total,0 ,2,true); InitBuffer(SignUp ,DRAW_ARROW,"Supertrend signal Buy" ,clrLime,min_rates_total,108,1,true); InitBuffer(SignDn ,DRAW_ARROW,"Supertrend signal Sell",clrRed ,min_rates_total,108,1,true); ArraySetAsSeries(ATR,true); ArraySetAsSeries(CCI,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Özel gösterge yineleme işlevi | //+------------------------------------------------------------------+ 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[]) { if // kontrol et ( BarsCalculated(CCI_Handle)<rates_total || // CCI göstergesini kontrol edin BarsCalculated(ATR_Handle)<rates_total || // ATR göstergesini kontrol edin rates_total<min_rates_total // yeterli çubuk olup olmadığını kontrol edin ) return(0); // sonraki tıklamayı dene int limit,to_copy,bar; ArraySetAsSeries(high,true); // her tikte AsSeries olarak ayarlanmalıdır ArraySetAsSeries(low ,true); if(prev_calculated>rates_total || prev_calculated<=0) // gösterge hesaplamasının ilk başlangıcı için kontrol limit=rates_total-min_rates_total; // tüm çubukların hesaplanması için başlangıç indeksi else limit=rates_total-prev_calculated; // yeni çubukların hesaplanması için başlangıç indeksi to_copy=limit+1; // ATR-Verilerini tampona kopyala if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(0); to_copy++; // CCI-Verilerini tampona kopyala if(CopyBuffer(CCI_Handle,0,0,to_copy,CCI)<=0) return(0); for(bar=limit; bar>=0; bar--) // hesaplama ana döngüsü { TrendUp[bar]=NULL; // tüm tamponları temizle TrendDn[bar]=NULL; SignUp [bar]=NULL; SignDn [bar]=NULL; // çizgileri hesaplayın if(CCI[bar]>=Level && CCI[bar+1]<Level) TrendUp[bar]=TrendDn[bar+1]; if(CCI[bar]<=Level && CCI[bar+1]>Level) TrendDn[bar]=TrendUp[bar+1]; if(CCI[bar]>Level) { TrendUp[bar]=low[bar]-ATR[bar]; if(TrendUp[bar]<TrendUp[bar+1] && CCI[bar+1]>=Level) TrendUp[bar]=TrendUp[bar+1]; } if(CCI[bar]<Level) { TrendDn[bar]=high[bar]+ATR[bar]; if(TrendDn[bar]>TrendDn[bar+1] && CCI[bar+1]<=Level) TrendDn[bar]=TrendDn[bar+1]; } if(TrendDn[bar+1]!=0.0 && TrendUp[bar]!=0.0) SignUp[bar]=TrendUp[bar]; // sinyali kontrol et YUKARI if(TrendUp[bar+1]!=0.0 && TrendDn[bar]!=0.0) SignDn[bar]=TrendDn[bar]; // DOWN sinyalini kontrol edin } return(rates_total); }
//+------------------------------------------------------------------+ //|Yardımcı programlar.mqh | //| Telif Hakkı © 2018, Ing. Otto Pauser | //| https://www.mql5.com/tr/users/kronenchakra | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| tanımlar| //+------------------------------------------------------------------+ #define COPY "Telif Hakkı © 2018, Ing. Otto Pauser" #define LINK "https://www.mql5.com/tr/users/kronenchakra" #define SPACER "---------------------" //+------------------------------------------------------------------+ //| kısaltmalar| //+------------------------------------------------------------------+ #define PRICE ENUM_APPLIED_PRICE #define TIMEF ENUM_TIMEFRAMES //+------------------------------------------------------------------+ //| Yardımcı fonksiyonlar| //+------------------------------------------------------------------+ void InitBuffer(double &_buffer[], ENUM_DRAW_TYPE _type, string _label, color _color, int _begin, int _arrow=159, int _width=1, bool _series=false) { static int idx=0; // bufferindex'i 0 olarak başlat SetIndexBuffer (idx,_buffer); // tamponu başlat ArrayInitialize (_buffer ,NULL); // tamponu başlat ArraySetAsSeries (_buffer ,_series); // set AsSeries // özellikleri ayarla PlotIndexSetInteger(idx,PLOT_DRAW_TYPE ,_type ); PlotIndexSetInteger(idx,PLOT_LINE_COLOR ,_color); PlotIndexSetInteger(idx,PLOT_LINE_WIDTH ,_width); PlotIndexSetInteger(idx,PLOT_DRAW_BEGIN ,_begin); PlotIndexSetInteger(idx,PLOT_ARROW ,_arrow); PlotIndexSetString (idx,PLOT_LABEL ,_label); PlotIndexSetDouble (idx,PLOT_EMPTY_VALUE,NULL ); idx++; // sonraki çağrı için bufferindex'i artır } bool InvalidHandle(int _handle, string _msg) { if(_handle==INVALID_HANDLE) // kontrol kolu Alert("*ERROR* creating "+_msg+" handle."); // bilgi return(_handle==INVALID_HANDLE); // geçersizse true döndür } string IndiShortName(string _name, int val_1, int val_2=NULL, int val_3=NULL) { string result=_name+"("+IntegerToString(val_1); if(val_2!=NULL) result=result+","+IntegerToString(val_2); if(val_3!=NULL) result=result+","+IntegerToString(val_3); return(result+")"); } //+------------------------------------------------------------------+ //| Hesaplama fonksiyonları| //+------------------------------------------------------------------+ double StdDeviation(int position,const double &price[],const double &MAprice[],int period) { int i; double StdDev_dTmp=0.0; if(position<period) return(StdDev_dTmp); // pozisyonu kontrol et for(i=0;i<period;i++) // StdDev'i hesaplayın StdDev_dTmp+=MathPow(price[position-i]-MAprice[position],2); StdDev_dTmp=MathSqrt(StdDev_dTmp/period); return(StdDev_dTmp); // hesaplanan değeri döndür }
Hemen oldukça açık görünüyor.
Belki MetaQutes de bir şeyler öğrenebilir, örneğin çizim tamponlarının tek bir satırda nasıl tanımlanacağı gibi.
Otto,
Bu:
TrendUp[bar]=NULL; // tüm tamponları temizle TrendDn[bar]=NULL; SignUp [bar]=NULL; SignDn [bar]=NULL;
tehlikelidir. NULL'void' tipindedir. Bir süre sonra, MT5'i daha da hızlı hale getirmek için, belki de aslında hiçbir şey atanmayabilir (o zaman eski kalır) veya bellek konumu değiştiğinde rastgele bir değer oluşturulur.
Bence sembol için _symbol ve değerler için doğrudan EMPTY_VALUE ya da 0 kullanmak daha iyi olacaktır. Bu şekilde hiçliğe bir varlık vermiş olursunuz ;)
Nasıl alabilirim
Adım 1: 
Adım 2: 
mt4 için bu var mı
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
SuperTrend:
SuperTrend trend göstergesi.
Author: Nikolay Kositsin