Kimin stratejiye ihtiyacı var? Çok ve ücretsiz - sayfa 59

 
Stellarator >> :

Ancak orijinal değerlerde ve "sonradan konuşlandırılan" tutarsızlıklar oldu mu? hala çift...)

henüz değil .... tüm sorunlar sadece yanlışlıktan kaynaklanıyor :)

vazgeçirmek zorunda kaldı! Anahtar nüans, "Uzman Danışmanın bir yinelemesinin sınırı" dır. Yani - bu sınırlar dahilinde, gösterge BİR KEZ hesaplanır (ilk çağrıda)! %100 kesinlik ile beyan ederim. Diğer tüm aramalar onu hiç başlatmaz, ancak gerekli tamponlardan gerekli değerleri almanız yeterlidir. Değişmeyen giriş parametreleriyle %100 koşul (arabellek ve ofset hariç). Kural, bir sembol içindeki hesaplamalar için geçerlidir. Ancak, iCustom diğer TF'lere ve araçlara döndüğünde bile ilkenin devam ettiğini düşünüyorum.

Zaten hemen "zorla" ..... herkes caydırırdı. Belgelenmemiş başka bir özellik için teşekkürler :)


 

FSB__Bar_Opening_Bar_Closing.mql4 v0.0.2 Beta


Bar Açılışında Pazara Giriş;

Bar Kapanışında Çıkış (kapanışa kadar 10 sn. veya bir sonraki açılışta)


** Bu sadece Giriş/Çıkış noktalarını test etmek için demodur. **


kod parçaları:


 bool bIsFirstTick ; // It is used to catch the Bar Opening.
datetime dtCurrentBarOpeningTime ;

int init ( )
{
   bIsFirstTick = false ;
   dtCurrentBarOpeningTime = Time [ 0 ] ;
   return ( 0 ) ;
}

int start ( )
{
   // Is this the first tick for the bar
   bIsFirstTick = ( dtCurrentBarOpeningTime ! = Time [ 0 ] ) ;
   if ( bIsFirstTick )
   {
      dtCurrentBarOpeningTime = Time [ 0 ] ;
   }

. . .
. . .



///
/// Exit at a Bar Closing price (almost).
///
/// MetaTrader does not provide an onBarClose event so we are not able to close a position
/// exactly at Bar Closing. We workaround the problem by closing the position within a time span
/// near to the bar closing time. In the cases when there is no any ticks within this period,
/// we close the position att he next bar opening price.
///
int ClosePositionsAtBarClosing ( bool bCloseLong , bool bCloseShort , datetime dtClosingTimeSpan )
{
   int   iOrders = OrdersTotal ( ) ;
   bool bIsOpen = false ;

   for ( int iOrder = 0 ; iOrder < iOrders ; iOrder + + )
   {
       OrderSelect ( iOrder , SELECT_BY_POS , MODE_TRADES ) ;
      
       if ( ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) & & OrderSymbol ( ) = = Symbol ( ) )
       {    // There is an open position for this symbol.

         datetime dtOpeningTime     = Time [ 0 ] - TimeSeconds ( Time [ 0 ] ) ; // The opening time of current bar
         datetime dtClosingTime     = dtOpeningTime + Period ( ) * 60 ;    // The closing time of current bars
         datetime dtCurrentTickTime = TimeCurrent ( ) ;                  // The time of current tick
         
         if ( dtCurrentTickTime > dtClosingTime - dtClosingTimeSpan | |   bIsFirstTick )
         {    // The current tick is within the closing time span or this is the first tick of the bar.

             // Code

         }
       }
     }
}
 

1. Performansla ilgili olarak:

Çoğunlukla her tik için bir göstergeyi yeniden hesaplamamız gerekmez. (Referans -"Önceki bar değerini kullan".) "Bar Açılışında" veya "Bar Kapanış"ta bir gösterge hesaplanmalıdır.


2. Mikron:

Alım satım kararı için fiyatları karşılaştırırken fMicron = Point/2 kullanıyorum. Ancak bu göstergeler için geçerli değildir. Örneğin. USD/JPY puanı için = 0,01; fMikron = 0,005.

0.000075, yıllar boyunca yapılan birçok testin bir sonucudur. 2001'de FSB'de çalışmaya başladım :) Tabii bunun bir anlamı yok. Bu konuda birçok kez fikrimi değiştirdim.

**düzenleme: MT bunu kullanıcıların eline verir. Muhtemelen EA guruları EA'larında ne kullandıklarını söyleyebilirler.

**edit2: Bu parametreyi deneyler için yapılandırma dosyasına koyacağım.


3. Her FSB sürümü için indirilmek üzere orijinal gösterge kaynak kodunu sağlamaya başlayacağım. Böyle bir durumda her küçük değişiklik için web sitesini güncellemem gerekmeyecek.


Float değerini double olarak değiştirmeye başladım . Bu sürümü yakında bugün akşam veya yarın yayınlayacağım. Ondan sonra iyice test etmemiz gerekiyor. MQL'de yazmadan önce bazı sorunları / özellikleri düzeltmek için her bir göstergeyi geçmemiz gerekiyor.

 

1. Evet, çoğu durumda (pozisyonların açılmasına/kapanmasına yönelik genel FSB yaklaşımı dikkate alındığında (Bar Açılışında/Barın Kapanışında)) - bu gerekli değildir. Ama diyelim ki - iyi formun kuralları - zorunlu. Göstergenin her seferinde "sıfırdan" hesaplanması (hatta Bar başına bir kez) - genel olarak (katılıyorum) büyük periyotlar içinde kritik bir ek yük değil... Ve eğer periyot dakika ise? Ama ya gösterge hala her çubuğu hesaplamaya ihtiyaç duyuyorsa (veya istiyorsa)? (Açılış fiyatı stop seviyesinden daha düşük olduğu için artık mümkün olmayan Pozisyonun karmaşık bir Noktası mı?)

Dönüşüm çok daha karmaşık değil, aslında, evet, bazı kodlar "bir pakette" ortaya çıktı ve çubuklar arasında yürüme ilkesi tersine çevrildi. Aslında, genel olarak - her şey. Ana şey, FSB ile parametrik uyumluluğu korumak için algoritmayı bırakmaktır (böylece kaynak içinde okunması ve tanımlanması kolaydır). Sinyalleri çıkarmak için uygun bir mekanizma oluşturun. Ve göstergenin saf görseller için kullanımını kolaylaştırın (EA'yı umursamayanlar). Bana göre öyle.


2. (eşit) gösterge değerlerini karşılaştırmak için Point/2 değişkenini kullanmanızı önermedim :) - Sadece bir sabit önerdim. Soru, değeri ve boyutudur (0.000075 - fena değil, bunu söylemedim - neden burada 75 olduğunu anlamıyorum ve "her zamanki gibi" 50 değil :)?! "2001'den beri" deneyimi çok belirleyicidir (tartışma!) ve bu değere katılmaya oldukça hazırım. Ancak son bir not olarak - 0.12345 boyutundaki alıntılar için bu yeterli olmayacaktır (bir anlamda - çok :))). Sayı en az bir bit sağa kaydırılmalıdır (0.0000075). Örneğin DC'mde bu tür alıntılar zaten yaygın bir uygulamadır... Yine de enstrümana uyum sağlamanızı ve 75 yerine "10" kullanmanızı öneririm :):

fMicron = Nokta * 0.1f

Kısacası, evet - parametrik olarak yapmayı öneriyorum - set (Sanırım, dostane deneylerden sonra, her şey yerine oturacak (ancak ... bakış açısı birçok kez değiştiyse;) ...). Ve daha fazla kişinin fikrini bekleyin...


3. Yüklenen kaynakları indirmeyi başardım :-P. Yani "ne karşılaştırılacak" olacak (sonuçtaki kod açısından). Pekala, artık ne kadar dikkatinizi dağıtmak isteseniz de - şamandırayı ikiye dönüştürmede başarı!


(RSI ile test nasıl? ;) eller ulaşmayı başardıysa?)

 

En iyinin 100 > Mikron > 50 olduğunu öğrendim. Bu yüzden 75 aldım. Brokerim içindi: Puan = 0.0001.

Ama komisyoncuların 0,00001'den teklif vermeye başladığı konusunda haklısın.

Hadi yapalım: Mikron = Math.Min(Nokta * 0.75, 0.000075)

Umarım 3 saat sonra dönüşümle bitiririm. Test için programı buraya koyacağım.

Dönüştürülen göstergelerin kaynak kodlarını da yükleyeceğim.

 

Tüm göstergeler ve parametreler çift sayılardır.

Mikron = 0.000075


Exe dosyasını son FSB v2.8.3.3 Beta ile birlikte klasöre koyun. Her iki program da aynı verileri ve stratejileri paylaşacaktır. Karşılaştırmak için uygundur. Gösterge değerleri konusunda dikkatli olun. Pratik olarak tüm göstergeler ve diğer dosyaların yarısı değiştirildi.

Tam hassasiyeti görmek için grafikte F12'ye basın veya Komut Konsolu'nu kullanın (ind ###).


Lütfen sorunları bildirin. Şimdi göstergelerle ilgili değişiklik talep etme zamanı. MT entegrasyonu üzerinde çalışmaya devam etmek için onları daha önce düzeltmemiz gerekiyor.

 

Günaydın!

Miroslav, şu anda çok kısıtlı bir zaman... çok çabuk:

1. Hızlı transfer için teşekkür ederiz (iki katına çıkın)! harika !

2. Şimdiye kadar, her şey çalışıyor gibi görünüyor (kontrol etmeyi başardığım kadarıyla), hem göstergelerin değerlerinde hem de stratejilerin sonuçlarında farklılıklar (hareket halindeyken) görülebilir :)

3. AMA - farklılıklar önceden beklediğimiz gibi değildi! (Dün gece bir iç deney yaptım ve "korkularım" doğrulandı - dönüşüm hesaplamaların doğruluğunu artıracak - ANCAK sonucu feci şekilde değiştirmeyecek! rakam ... ancak ikincisinde zaten tutarsızlıklar var (örneğin, hepsi aynı RSI))


NEDENİ BAŞKA BİR ŞEY!!!


Kontrol ettiklerim:

1. İlk başta Digits temasında sert bağlamalar olup olmadığını düşündüm (5 karakterli araçlarım var, hatırlatayım) ... araç özelliklerinde 4 karakteri zorlamak yardımcı olmadı (bu arada - ama bu İşler!)

2. Göstergelerin kodu... hmm... Neyse, şikayet edilecek bir şey yok! Şimdi iki katı her yerde, kodun kendisi (gördüğüm gibi) değişmedi... Kod oldukça basittir (çoğu zaman sadece toplama ve çıkarmalarla çalışır) - böyle bir hata orada birikemez !!! (Daha az kendime güveniyorum... ama... ;))

3. Son düşünce (kontrol edemeyeceğim) - BU NEDİR :)?! :



Bar Kapanış/Açılış Değerleri (???) (ve potansiyel olarak diğer?)


Bu rakamlar nereden geliyor??? :))) (bu "postscript" nedir :D?)

Anladığım kadarıyla, burada bir yerden (Bar Closing.cs):

             // Saving the components
            component = new IndicatorComp [ 1 ] ;

            component [ 0 ] = new IndicatorComp ( ) ;
            component [ 0 ] . CompName   = "Closing price of the bar" ;
            component [ 0 ] . DataType   = ( parameters . SlotType = = SlotTypes . Open ) ? IndComponentType . OpenPrice : IndComponentType . ClosePrice ;
            component [ 0 ] . ChartType = IndChartType . NoChart ;
            component [ 0 ] . FirstBar   = 2 ;
             component [ 0 ] . Value     = Data . Close ;

Sonuç olarak, ilk çalışma varsayımım (belki) durum böyle mi? ("yanlış" (veya "doğru", ancak neden tam olarak böyle?) fonksiyonda alıntı değerlerinin döndürülmesi?)

Kısmen, görünüşe göre, aynı zamanda istenen fonksiyondan elde edilen değerler (göstergeyi hesaplarken tamponları doldurmak için) sorusuna korumalı statik şamandıra [ ] Fiyat ( BasePrice fiyat )


Genel olarak, Miroslav - "top senin tarafında" :). Şu ana kadar tarafımdan aktardığım SİZİN göstergelerinizin kodunun MT göstergeleri ile değerler açısından mükemmel uyumlu olduğunu not edebilirim (İnatçıyım :D ve sonuçta RSI ile konuyu bitireceğim):



Aynı çubuk, ilk gösterge dönüşümdür, ikincisi MT'ye özgüdür.


Düşünceler, öneriler??? (6 saat sonra orada olacağım)

 

Частично, видимо, заодно к вопросу получаемых значений (для заполнения оперируемых буферов при расчете индикатора) из искомой функции protected static float [ ] Price ( BasePrice price )

Tüm temel sınıflar, yöntemler ve özellikler, tüm ticaret işlevlerinin yanı sıra artık çift değerler döndürüyor (son 6 ay önce değiştirdim).

RSI formülünde bir fark olduğu anlaşılıyor. İkinci burçta olamaz "ama zaten ikinci burçta farklılıklarımız var!". :) Mevcut MT RSI formülünü FSB'de benimsemeye çalışacağım.



**Düzenlemek:

Zaten düzeltildi:

Varsayılan parametreler: RSI(kapat, 14, düzleştirilmiş) == MT RSI

             for ( int iBar = 1 ; iBar < Bars ; iBar + + )
             {
                 if ( adBasePrice [ iBar ] > adBasePrice [ iBar - 1 ] ) adPos [ iBar ] = adBasePrice [ iBar ] - adBasePrice [ iBar - 1 ] ;
                 if ( adBasePrice [ iBar ] < adBasePrice [ iBar - 1 ] ) adNeg [ iBar ] = adBasePrice [ iBar - 1 ] - adBasePrice [ iBar ] ;
             }

             double [ ] adPosMA = MovingAverage ( iPeriod , 0 , maMethod , adPos ) ;
             double [ ] adNegMA = MovingAverage ( iPeriod , 0 , maMethod , adNeg ) ;

             for ( int iBar = iFirstBar ; iBar < Bars ; iBar + + )
             {
                 if ( adNegMA [ iBar ] = = 0 )
                    adRSI [ iBar ] = 100 ;
                 else
                    adRSI [ iBar ] = 100 - ( 100 / ( 1 + adPosMA [ iBar ] / adNegMA [ iBar ] ) ) ;
             }


Yakında indirmek için program.


 

Miroslav - evet, formüllerde fark yok. RSI tartışmalarının en başında zaten söylediğim gibi, ilk değer için (MovingAverage'ın yürütülmesinden kalan) HARİÇ bir EKSTRA ortalama döngüsü kullanırsınız (bu, düzgün çalışan MovingAverage işlevlerinin herhangi bir sonucundan Smoothed'ı çıkarmaya zorlar) :) :).

Genel olarak, son verilen koda bakılırsa, her şey yerine oturdu (ve şimdi RSI normalde diğer ortalama modlarını hesaplayacaktır) :)! Yahoo!


(daha önce kaydettiğim gösterge kodu bu değişikliği zaten içeriyor ;) - bundan emin olmak için aşağıdaki parametrelerle fsbRSI'yi aramanız yeterlidir:

indLogic = umursama

maMethod = 2 (! MT açısından önemli MODE_SMMA)

basePrice = 0 (MT cinsinden PRICE_CLOSE)

iPeriyot = 14

fLevel = önemli değil

iPrvs = önemli değil

Ve yerel Göreceli Güç Endeksi (MT ile birlikte gelir) ile sonuçların TAM eşleşmesini elde edin

Ancak fsbRSI ve iRSI, FSB ile aynı DEĞİLDİR :(


O halde asıl soruna dönelim :


"Tüm temel sınıflar, yöntemler ve özellikler, tüm ticaret işlevlerinin yanı sıra artık çift değerler döndürüyor (son 6 ay önce değiştirdim)."


Çok iyi! Bu tezin nasıl etkilemesi gerektiğini anlamadım

Barın Açılış Fiyatı ve Barın Kapanış Fiyatı ? Yukarıdaki örnekte.


Soruyu tekrarlıyorum: İstenen fiyatlar neden tekliflerden FARKLI??? (6,7,8, ... rakamlardan bahsediyorum)


double bununla kesinlikle ilgisi yok! Tırnak içindeki değerler normalleştirilir ve değişkenler arasında basit kopyalama olması durumunda korunmalıdır (birbiriyle tamamen aynı olmalıdır).

Göstergeler hesaplanırken bu tür değerler ortaya çıkmaya başlarsa ( korumalı statik şamandıra [ ] Fiyat ( BasePrice fiyat ) kotasyon değerlerine dayalı hesaplama için tamponlar dolduğunda ), HEDEFE YAKLAŞIYORUZ (garip gelse de), yani başka bir kaynak gibi (önceki kayan noktanın yanı sıra), "biraz" denormalize veri :)

 

MT'nin standart göstergelerine benzemek için bazı göstergeleri biraz değiştirdim.


Değiştirilen FSB göstergeleri:

RSI

RSI osilatörü

RSI MA Osilatörü

Bollinger bantları

standart sapma

stokastik


Aşağıdaki göstergelerde farklılıklar vardır:

itme

Pazar Kolaylaştırma Endeksi


Diğer:

MT Hareketli Ortalama Osilatör == FSB MACD Histogramı

MT Momentum == FSB Değişim Oranı

Göreceli Güç Endeksi – FSB'ye dahil değildir


Şimdi FSB ve MT göstergeleri aşağı yukarı eşit olmalıdır.


YAPMAK:

Stokastik – sinyallerin revizyonu;

Piyasa Kolaylaştırma Endeksi - formül revizyonu;

MT'ninki gibi bir Momentum, FSB'ye dahil edilecek - “Momentum MT” olarak adlandırılacak

FSB'de “Göreceli Güç Endeksi” dahil.