Merhaba,
Bu osilatör harika bir osilatör, ancak bununla ilgili sorunlarım var.
Son mum tarafından hesaplanan sinyal hattının sonu gösterilmez, bu nedenle şu anda her zaman kırmızı gösterir. Osilatörü sıfırladığımda, sinyal hattının sonu ile bir an için iyi değerler gösteriyor, ancak daha sonra kırmızıya geri dönüyor (yeşil göstermesi gerekse bile).
Bu sorunu ortadan kaldırmak için ne yapmalıyım?
Yeniden hata ayıklamayı denedim ama işe yaramadı.
Selamlar,
InfiniteDesign
Bu göstergenin parametreleri için en iyi değerler nelerdir?
Bu harika gösterge için çok çok teşekkürler.
Önceki sürümü yenisi kadar ilginç ve kullanışlı buldum, hatta daha da fazla.
Lütfen eskisini de mq5'e taşıyabilir misiniz? Yapılabilirse çok memnun olurum.
Şerefe ve şimdiden teşekkürler !!!
Merhaba,
Bu osilatör harika bir osilatör, ancak bununla ilgili sorunlarım var.
Son mum tarafından hesaplanan sinyal hattının sonu gösterilmez, bu nedenle şu anda her zaman kırmızı gösterir. Osilatörü sıfırladığımda, sinyal hattının sonu ile bir an için iyi değerler gösteriyor, ancak daha sonra kırmızıya geri dönüyor (yeşil göstermesi gerekse bile).
Bu sorunu ortadan kaldırmak için ne yapmalıyım?
Yeniden hata ayıklamayı denedim ama işe yaramadı.
Selamlar,
InfiniteDesign
Bu göstergeden bir Sinyal oluşturmaya çalıştım ama başaramadım ...
Herhangi bir yardım?
//+------------------------------------------------------------------+ //|COG.mqh | //|Bruno Pio | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Bruno Pio" #property link "http://www.mql5.com" #property version "1.00" #include "..\ExpertSignal.mqh" // CExpertSignal, ExpertSignal dosyasındadır #property tester_indicator "CenterOfGravity.ex5" // sihirbaz açıklaması başlangıç //+------------------------------------------------------------------+ //| Sınıfın açıklaması| //| Başlık=Ağırlık Merkezi Sinyalleri| //| Type=SignalAdvanced| //| Name=My_COG| //| ShortName=CG| //| Sınıf=COG| //| Sayfa=Gerekli değil| //| Parametre=Period_,int,10,Gösterge ortalama süresi | //| Parametre=SmoothPeriod,int,3,Sinyal hattı yumuşatma süresi | //| Parametre=MA_Method_,ENUM_MA_METHOD,MODE_EMA,Sinyal Yöntemi | //| Parametre=AppliedPrice,int,1,Fiyat sabiti | //+------------------------------------------------------------------+ // sihirbaz açıklaması end //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class COG : public CExpertSignal { private: CiCustom m_COG; // Bir nesne olarak gösterge //--- Yapılandırılabilir modül parametreleri int m_Period_; // Gösterge ortalama süresi int m_SmoothPeriod; // Sinyal hattı yumuşatma periyodu ENUM_MA_METHOD m_MA_Method_; // Sinyal hattı ortalama yöntemi int m_AppliedPrice; // Fiyat sabiti public: COG(void); ~COG(void); //--- Giriş verilerinin doğruluğunun kontrol edilmesi bool ValidationSettings(); //--- Sinyal modülü için göstergeler ve zaman serileri oluşturma bool InitIndicators(CIndicators *indicators); //--- Gösterge verilerine erişim double CG(const int index) const { return(m_COG.GetData(0,index)); } double Signal(const int index) const { return(m_COG.GetData(1,index)); } //--- Alış ve satış koşullarının kontrol edilmesi virtual int LongCondition(); virtual int ShortCondition(); //--- Ayarlama için yöntemler void Period_(int value) { m_Period_=value; } void SmoothPeriod(int value) { m_SmoothPeriod=value; } void MA_Method_(ENUM_MA_METHOD value) { m_MA_Method_=value; } void AppliedPrice(int value) { m_AppliedPrice=value; } protected: //--- Gösterge oluşturma bool CreateCOG(CIndicators *indicators); }; //+------------------------------------------------------------------+ //| Kurucu| //+------------------------------------------------------------------+ COG::COG(void) : m_Period_(10), // Gösterge ortalama süresi m_SmoothPeriod(3), // Sinyal hattı yumuşatma periyodu m_MA_Method_(MODE_EMA), // Sinyal hattı ortalama yöntemi m_AppliedPrice(1) // Fiyat sabiti { } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ COG::~COG() { } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Giriş parametrelerini kontrol eder ve her şey yolundaysa true döndürür | //+------------------------------------------------------------------+ bool COG:: ValidationSettings() { //--- Temel sınıf yöntemini çağırın if(!CExpertSignal::ValidationSettings()) return(false); //--- Dönemleri kontrol edin, MA'nın hesaplanması için çubuk sayısı >=1 if(m_Period_<1) { PrintFormat("Incorrect value set for one of the period! Period_=%d", m_Period_); return false; } //--- Dönemleri kontrol edin, MA'nın hesaplanması için çubuk sayısı >=1 if(m_SmoothPeriod<1) { PrintFormat("Incorrect value set for one of the period! m_SmoothPeriod=%d", m_SmoothPeriod); return false; } //--- Hızlı MA yumuşatma türü numaralandırmanın dört değerinden biri olmalıdır if(m_MA_Method_!=MODE_SMA && m_MA_Method_!=MODE_EMA && m_MA_Method_!=MODE_SMMA && m_MA_Method_!=MODE_LWMA) { PrintFormat("Invalid type of smoothing of the fast MA!"); return false; } //--- m_AppliedPrice geçerli olmalıdır if(m_AppliedPrice<1 || m_AppliedPrice>11) { PrintFormat("Invalid type of Price!"); return false; } //--- Tüm kontroller tamamlandı, her şey yolunda return true; } //+------------------------------------------------------------------+ //| Göstergeler oluşturur| //| Girdi: göstergeler koleksiyonuna bir işaretçi | //| Çıktı: başarılı ise true, aksi takdirde false | //+------------------------------------------------------------------+ bool COG::InitIndicators(CIndicators *indicators) { //--- NULL için gösterge koleksiyonunun standart kontrolü if(indicators==NULL) return(false); //--- Ek filtrelerde göstergeleri ve zaman serilerini başlatma if(!CExpertSignal::InitIndicators(indicators)) return(false); //--- Göstergelerimizi oluşturma if(!CreateCOG(indicators)) return(false); //--- Bu kısma ulaşıldı, yani işlev başarılı oldu, true döndür return(true); } //+------------------------------------------------------------------+ //| "COG" göstergesini oluşturur| //+------------------------------------------------------------------+ bool COG::CreateCOG(CIndicators *indicators) { //--- İşaretçinin kontrol edilmesi if(indicators==NULL) return(false); //--- Koleksiyona bir nesne ekleme if(!indicators.Add(GetPointer(m_COG))) { printf(__FUNCTION__+": Error adding an object of the COG"); return(false); } //--- COG parametrelerinin ayarlanması MqlParam parameters[5]; //--- parameters[0].type=TYPE_STRING; parameters[0].string_value="CenterOfGravity.ex5"; parameters[1].type=TYPE_INT; parameters[1].integer_value=m_Period_; // Dönem parameters[2].type=TYPE_INT; parameters[2].integer_value=m_SmoothPeriod; // Sinyal hattı yumuşatma periyodu parameters[3].type=TYPE_INT; parameters[3].integer_value=m_MA_Method_; // Sinyal hattı ortalama yöntemi parameters[4].type=TYPE_INT; parameters[4].integer_value=m_AppliedPrice; // Fiyat sabiti //--- Nesne başlatma if(!m_COG.Create(m_symbol.Name(),0,IND_CUSTOM,5,parameters)) { printf(__FUNCTION__+": Error initializing the object of the COG"); return(false); } //--- Tampon sayısı if(!m_COG.NumBuffers(2)) return(false); //--- Bu kısma ulaşıldı, yani işlev başarılı oldu, true döndür return(true); } //+------------------------------------------------------------------+ //| Satın alma sinyalinin gücünü döndürür| //+------------------------------------------------------------------+ int COG::LongCondition() { int signal=0; //--- Tiklerle işlem için idx=0, oluşan çubuklarla işlem için idx=1 int idx=StartIndex(); //--- Son oluşan çubuktaki COG'lerin değerleri double last_fast_value=CG(idx); double last_slow_value=Signal(idx); //--- Oluşan bir çubuk hariç son çubuktaki COG değerleri double prev_fast_value=CG(idx+1); double prev_slow_value=Signal(idx+1); //---Eğer CG > Sinyal && CG-1 < Sinyal-1 if((last_fast_value>last_slow_value) && (prev_fast_value<prev_slow_value)) { signal=100; // Satın almak için bir sinyal var } //--- Sinyal değerini döndür return(signal); } //+------------------------------------------------------------------+ //| Satış sinyalinin gücünü döndürür| //+------------------------------------------------------------------+ int COG::ShortCondition() { int signal=0; //--- Tiklerle işlem için idx=0, oluşan çubuklarla işlem için idx=1 int idx=StartIndex(); //--- Son oluşan çubuktaki COG'lerin değerleri double last_fast_value=CG(idx); double last_slow_value=Signal(idx); //--- Oluşan bir çubuk hariç son çubuktaki COG değerleri double prev_fast_value=CG(idx+1); double prev_slow_value=Signal(idx+1); //---Eğer CG < Sinyal && CG-1 > Sinyal-1 ise if((last_fast_value<last_slow_value) && (prev_fast_value>prev_slow_value)) { signal=100; // Satış için bir sinyal var } //--- Sinyal değerini döndür return(signal); }
Gösterge hiçbir hata olmadan derlendi:

ve işe yarıyor -
------------------
Sadece sabit smoothalgorithms.mqh dosyasını kullanmanız gerekir - 4 numaralı gönderiye bakın
Benim de aynı sorunum var...
Bu harika bir gösterge (eğer daha yüksek trendleri de dikkate alırsanız). Geliştirilmiş versiyonunu gönderiyorum; bu versiyonda son kısım artık sadece kırmızı değil ve canlı grafikte düzgün bir şekilde güncelleniyor.
Bu sefer bir moderatör biçimlendirmeyi düzeltti. Lütfen gelecekte kodu doğru şekilde biçimlendirin; kodu yanlış biçimlendirilmiş gönderiler silinebilir.
/* * SmoothAlgorithms.mqh dosyası, * terminal_data_folder\MQL5\Include klasörüne yerleştirilmelidir */ //+------------------------------------------------------------------+ //| Center of Gravity.mq4 | //| Telif Hakkı © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Telif Hakkı © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- gösterge sürümü #property version "1.00" //---- göstergeyi ayrı bir pencerede çizme #property indicator_separate_window //---- Göstergenin hesaplanması ve çizilmesi için üç tampon kullanılır #property indicator_buffers 3 //---- iki grafik kullanılır #property indicator_plots 2 //+----------------------------------------------+ //| Gösterge çizim parametreleri | //+----------------------------------------------+ //---- 1 numaralı göstergeyi üç renkli bir çizgi olarak çizme #property indicator_type1 DRAW_COLOR_LINE //---- üç renkli çizgi renkleri olarak kullanılır #property indicator_color1 Gray,Lime,Red //---- 1 numaralı göstergenin çizgisi kesintisiz bir eğridir #property indicator_style1 STYLE_SOLID //---- 1 numaralı göstergenin çizgi kalınlığı 1'e eşittir #property indicator_width1 1 //---- 1 numaralı gösterge etiketinin görüntülenmesi #property indicator_label1 "Center of Gravity" //+----------------------------------------------+ //| Gösterge çizim parametreleri | //+----------------------------------------------+ //---- 2 numaralı göstergeyi çizgi olarak çizme #property indicator_type2 DRAW_LINE //---- gösterge çizgisinin rengi olarak mavi renk kullanılır #property indicator_color2 Blue //---- 2 numaralı göstergenin çizgisi kesintisiz bir eğridir #property indicator_style2 STYLE_SOLID //---- 2 numaralı göstergenin çizgi kalınlığı 1'e eşittir #property indicator_width2 1 //---- gösterge çizgisinin etiket 2'sinin görüntülenmesi #property indicator_label2 "Signal Line" //---- çizgi stili nokta-çizgi şeklinde bir eğridir #property indicator_style2 STYLE_DASHDOTDOT //+-----------------------------------+ //| Göstergelerin giriş parametreleri | //+-----------------------------------+ enum Applied_price_ //Sabit türü { PRICE_CLOSE_ = 1, //PRICE_CLOSE PRICE_OPEN_, //AÇILIŞ FİYATI PRICE_HIGH_, //PRICE_HIGH PRICE_LOW_, //PRICE_LOW PRICE_MEDIAN_, //FİYAT_MEDIAN PRICE_TYPICAL_, //TİPİK FİYAT PRICE_WEIGHTED_, //FİYAT AĞIRLIKLI PRICE_SIMPLE_,//PRICE_SIMPLE_ PRICE_QUARTER_, //PRICE_QUARTER_ PRICE_TRENDFOLLOW0_, //PRICE_TRENDFOLLOW0_ PRICE_TRENDFOLLOW1_ //PRICE_TRENDFOLLOW1_ }; input int Period_=10; // Gösterge ortalamalama dönemi input int SmoothPeriod=3; // Sinyal hattı düzeltme süresi input ENUM_MA_METHOD MA_Method_=MODE_SMA; // Sinyal hattı ortalamalama yöntemi input Applied_price_ AppliedPrice=PRICE_CLOSE_;// Sabit fiyat /* , göstergenin hesaplanmasında kullanılır (1-KAPANIŞ, 2-AÇILIŞ, 3-EN YÜKSEK, 4-LOW, 5-MEDIAN, 6-TYPICAL, 7-WEIGHTED, 8-SIMPLE, 9-QUARTER, 10-TRENDFOLLOW, 11-0.5 * TRENDFOLLOW.) */ //+-----------------------------------+ //---- daha sonra kullanılacak dinamik dizilerin tanımlanması //---- gösterge tamponları olarak kullanılacak double Ext1Buffer[]; double Ext2Buffer[]; double ColorExt2Buffer[]; //---- Veri hesaplamasına başlamak için tamsayı değişkenlerinin tanımlanması int StartBar; //+------------------------------------------------------------------+ //| iPriceSeries işlevi açıklaması | //| Moving_Average sınıf açıklaması | //+------------------------------------------------------------------+ #include <SmoothAlgorithms.mqh> //+------------------------------------------------------------------+ //| Özel gösterge başlatma işlevi | //+------------------------------------------------------------------+ void OnInit() { //---- sabitlerin başlatılması StartBar=Period_; //---- MAMABuffer dinamik dizisini gösterge tamponu olarak ayarla SetIndexBuffer(0,Ext1Buffer,INDICATOR_DATA); //---- DataWindow’da görüntülenecek etiket oluşturuluyor PlotIndexSetString(0,PLOT_LABEL,"Center of Gravity"); //---- göstergenin çizilme başlangıcını kaydırma PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBar); //---- dinamik bir diziyi renk indeks tamponuna dönüştürme SetIndexBuffer(1,ColorExt2Buffer,INDICATOR_COLOR_INDEX); //---- göstergenin çizilme başlangıcını kaydırma PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBar+1); //---- FAMABuffer dinamik dizisini gösterge dizisi olarak ayarla SetIndexBuffer(2,Ext2Buffer,INDICATOR_DATA); //---- DataWindow’da görüntülenecek etiket oluşturuluyor PlotIndexSetString(2,PLOT_LABEL,"Signal Line"); //---- göstergenin çizilme başlangıcını kaydırma PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,StartBar+1); //---- göstergenin kısa adı için değişkenlerin başlatılması string shortname; StringConcatenate(shortname,"Center of Gravity(",Period_,")"); //---- ayrı bir alt pencerede ve araç ipucunda görüntülenmek üzere bir ad oluşturma IndicatorSetString(INDICATOR_SHORTNAME,shortname); //---- gösterge değerlerinin görüntülenme hassasiyetini ayarla IndicatorSetInteger(INDICATOR_DIGITS,0); //---- } //+------------------------------------------------------------------+ //| Özel gösterge yineleme işlevi | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // mevcut zaman diliminde geçmiş verilerde bulunan çubuk sayısı const int prev_calculated,// önceki çağrıda hesaplanan çubuk sayısı 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[]) { //---- Hesaplama için yeterli sayıda çubuk olup olmadığını kontrol etme if(rates_total<StartBar) return(0); //---- Kayan noktalı değişkenlerin tanımlanması double price_,sma,lwma; //---- Tamsayı değişkenlerin tanımlanması int first1,first2,first3,bar; //---- OnCalculate() bloğunda göstergenin başlatılması if(prev_calculated>rates_total || prev_calculated<=0)// Bir göstergenin hesaplamasının ilk başlangıcını kontrol etme { first1=0; // İlk döngüdeki tüm ölçülerin hesaplanması için başlangıç sayısı first2=Period_+1; // tüm sinyal hattı çubuklarının hesaplanması için başlangıç sayısı first3=Period_+SmoothPeriod+3; // Tüm renkli döngü çubuklarının hesaplanması için başlangıç sayısı } else // yeni çubukların hesaplanması için başlangıç numarası { first1=prev_calculated-1; first3=first1; } //---- DÜZELTME (ekleme): Bir jelvonal (Sinyal Hattı) MASeries çağrısında "begin" parametresi her zaman //---- aynı SABİT güvenilirlik eşiği (Period_+1) olmalıdır - orijinal haliyle //---- ticknĂ©l yanlışlıkla her zaman değişen "first1" değerine (yani o anki buji indeksine) ayarlanmıştı //---- Her canlı tikte işlenmiş mumla eşleşen değerler, şunu karıştırarak: //---- belső simit sınıfının "veriye ne kadar güvenilebilir" mantığı - bu yüzden kararsız/hatalıydı //---- Bir jelvonalın canlı değeri; bu nedenle, yalnızca TF değişimi (tamamen yeniden hesaplama) sonrasında "düzeldi". first2=Period_+1; //---- Moving_Average sınıfındaki değişkenlerin tanımlanması static CMoving_Average MA,LWMA,SIGN; //---- Kanal merkez hattının hesaplanmasına ilişkin ana döngü for(bar=first1; bar<rates_total; bar++) { //---- Giriş fiyatı 'Series' değerini almak için PriceSeries işlevini çağırın price_=PriceSeries(AppliedPrice,bar,open,low,high,close); sma=MA.MASeries(0,prev_calculated,rates_total,Period_,MODE_SMA,price_,bar,false); lwma=LWMA.MASeries(0,prev_calculated,rates_total,Period_,MODE_LWMA,price_,bar,false); Ext1Buffer[bar]=sma*lwma/_Point; Ext2Buffer[bar]=SIGN.MASeries(first2,prev_calculated,rates_total,SmoothPeriod,MA_Method_,Ext1Buffer[bar],bar,false); } //---- Sinyal hattının renklendirilmesine ilişkin ana döngü for(bar=first3; bar<rates_total; bar++) { ColorExt2Buffer[bar]=0; if(Ext1Buffer[bar]<Ext2Buffer[bar]) ColorExt2Buffer[bar]=2; else ColorExt2Buffer[bar]=1; } //---- return(rates_total); } //+------------------------------------------------------------------+
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Web sitesi politikasını ve kullanım şartlarını kabul edersiniz

Ehlers Ağırlık Merkezi - Ağırlık Merkezi J. F. Ehlers:
Ağırlık Merkezi, John Ehlers tarafından geliştirilen ve Stocks & Commodities'in Mayıs 2002 sayısında yer alan bir osilatördür.
Author: Nikolay Kositsin