[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 323

 

İşte olanlar:

 //+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType( int directionMA)
{
   int cntUp,                                                                           // Счётчик идущих друг за другом свечей с..
       cntDn,                                                                           // .. требуемыми признаками
       t;                                                                               // Счётчик всех просчитанных баров
       
   for ( int i=i_AnyBarsToHistory; i>= 1 ; i--, t++)
   {
       if (directionMA == CROSS_UP)                                                       // Если машки направлены вверх
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntDn++;                                                                   // .. прибавим 1 к счётчику
         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0 ;                                                                 // .. счётчик обнуляем
                                                                                        
         if (i == 1 )
             Print ( " directionMA " , directionMA, "; i = " , i, "; Open[i] - Close[i] = " , Open[i] - Close[i], "; cntDn = " , cntDn);

         if (t == i_AnyBarsToHistory)
         {
             if (cntDn == i_sequentBarsСount)                                                 // Если cnt баров в подряд медвежьи..
                 return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                     // .. Выходим из функции
         }
      }

       if (directionMA == CROSS_DN)                                                       // Если машки направлены вниз
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntUp++;                                                                   // .. прибавим 1 к счётчику
         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0 ;                                                                 // .. счётчик обнуляем
         if (i == 1 )
             Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);

         if (t == i_AnyBarsToHistory)
         {
             if (cntUp == i_sequentBarsСount)                                                 // Если cnt баров в подряд бычьи..
                 return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                     // .. Выходим из функции
         }
      }
       return (REQUIRED_SEQUENTIAL_MISS);
   }
}

Aslında, satır bile yazdırılmaz:

 Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);

Yani yukarı yönde bir tür pervaz var.

En ilginç şey, buraya varsayılan bir dönüş eklediğimde, nedense her zaman işe yarıyor. hattan bahsediyorum:

 return (REQUIRED_SEQUENTIAL_MISS);

Kodun temel olduğu açık olsa da ve orada hata olamaz gibi görünüyor.

 

Herkese iyi! Sevgili gurular, mevduat para biriminde artan ve azalan kar ile v_s'nin neden arttığını ve azaldığını söyleyin bana?

value_profit(), mevduat para birimindeki kar hesaplamasıdır.

çift değer_durdur, değer_adım;
değer_durdur=((HesapBalance()/100)*1);
değer_adım=((HesapBalance()/100)*4);
çift v_s;
if (değer_kâr()>=(değer_adım+değer_durdur))
için (int v=1;v<=100;v++)
{
if (değer_kâr()>=(değer_adım+(değer_durdur*v)))
{
v_s=değer_durdur*v;
}
başka
{
if (değer_kâr()<=v_s)
hepsini kapat();
}
}
 
hoz :

Aslında, satır bile yazdırılmaz:

1. Modülerleştirme neden hemen yapılır? Elbette herkesin kendine has bir tarzı vardır ama önce kompakt versiyonu cilalardım, sonra saat gibi çalıştığında modülerliğe çevirirdim. Kompakt sürüm (Trade, LastCandlesType, GetStateOfMA, GetGeneralSignal harici işlevleri olmadan), son sayfada start() dahili öğelerinin bir varyantı olarak verildi. Senin için nasıl çalışıyor? Çalışırsa, modüllere bölün.

2. Bana öyle geliyor ki, kod bir öncekiyle tamamen aynı, çünkü t sayacı kesinlikle i sayacına paralel olarak değişir. O zaman i ile karşılaştırabiliyorsanız, neden t ile karşılaştırın? Ve daha mantıklı bir şekilde, kodumuz işe yaramadıysa neden i ile karşılaştıralım?

3. Önemsizlik için özür dilerim, ancak bu seçenek, döngüden çıkışın kaldırılmasıyla hala sizin için nasıl çalışacak:

 int LastCandlesType( int directionMA){
         int cntUp, cntDn;
         for ( int i=i_AnyBarsToHistory; i>= 1 ; i--){
                 if (directionMA == CROSS_UP){
                         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntDn++; else cntDn= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Open[i] - Close[i] = " , Open[i] - Close[i], "; cntDn = " , cntDn);
                }
                 if (directionMA == CROSS_DN){
                         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntUp++; else cntUp= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);
                }
        }
         if ((directionMA==CROSS_UP)&&(cntUp>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BEARS_GOT);
         if ((directionMA==CROSS_DN)&&(cntDn>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BULLS_GOT);
         return (REQUIRED_SEQUENTIAL_MISS);
}

Bunun da işe yaramayacağını anlıyorum, asla bilemezsiniz, ancak daha fazlasını anlamak için bundan emin olmam gerekiyor.

4. Tamamen benim kişisel uyarlamam: Kodu meta düzenleyiciye değil, satır numaralandırmalı başka bir düzenleyiciye yazın ve herhangi bir değişkenin her değişikliğine ve her birine, herhangi bir if veya anahtar kontrolüne, aynı satıra (sonradan) yazdırın. son noktalı virgül). Satır numarası biçiminde yazdırın - kontrol edilen değer(ler). if'den sonra şu şekilde yazdırırım: if(tracing) {Print( StringConcatenate ("satır_numarası: değişken_adı=", değişken_adı));} ve değişkeni başlıkta şöyle bildiririm: bool tracing=false;//izlemeyi etkinleştir . O zaman tam teşekküllü bir ize ve buna bağlı olarak tam teşekküllü hata ayıklamaya sahip olacaksınız. Ancak gerçek şu ki, günlükleri daha sık temizlemeniz gerekiyor. Hemen meta düzenleyicideyse, ilk başta aşağıdaki gibi boş bir şablon oluşturabilirsiniz.

/*001*/

...

/*999*/

satırların başında (ve bu işe yarar) ve ardından kodu bu şablonun bir kopyasına yazın. Ama sadece öyle düşünüyorum, pratikte bunu denemeye çalıştım ama tutarsız bir şekilde denedim.

 
rajak :

Herkese iyi! Sevgili gurular, mevduat para biriminde artan ve azalan kar ile v_s'nin neden arttığını ve azaldığını söyleyin?

value_profit(), mevduat para birimindeki kar hesaplamasıdır.

çift değer_durdur, değer_adım;
değer_durdur=((HesapBalance()/100)*1);
değer_adım=((HesapBalance()/100)*4);
çift v_s;
if (değer_kâr()>=(değer_adım+değer_durdur))
için (int v=1;v<=100;v++)
{
if (değer_kâr()>=(değer_adım+(değer_durdur*v)))
{
v_s=değer_durdur*v;
}
başka
{
if (değer_kâr()<=v_s)
hepsini kapat();
}
}
Kısaca baktıktan sonra, hemen tırnak işaretli bir pervaz gördüm. if ifadesini nasıl kullanacağınızı öğrenin.
 
gyfto :

3. Önemsizlik için özür dilerim, ancak bu seçenek, döngüden çıkışın kaldırılmasıyla hala sizin için nasıl çalışacak:

 int LastCandlesType( int directionMA){
         int cntUp, cntDn;
         for ( int i=i_AnyBarsToHistory; i>= 1 ; i--){
                 if (directionMA == CROSS_UP){
                         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntDn++; else cntDn= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Open[i] - Close[i] = " , Open[i] - Close[i], "; cntDn = " , cntDn);
                }
                 if (directionMA == CROSS_DN){
                         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntUp++; else cntUp= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);
                }
        }
         if ((directionMA==CROSS_UP)&&(cntUp>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BEARS_GOT);
         if ((directionMA==CROSS_DN)&&(cntDn>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BULLS_GOT);
         return (REQUIRED_SEQUENTIAL_MISS);
}

hm. kazanıldı. Görselde birkaç "ekran" çalıştırdım, bu aralıkta her şey açık. Son seferin neden çalışmadığını anlamak için kalır. Bu, gelecekte tökezlememek için yardımcı olacaktır.
 
hoz :

hm. kazanıldı.


Memnun))))

saat :

Son seferin neden çalışmadığını anlamak için kalır. Bu, gelecekte tökezlememek için yardımcı olacaktır.

Çünkü gelecekte, Kapat[0]'a veya başka herhangi bir algoritmada pencere sınırı olarak kabul edilecek herhangi bir şeye ulaşmadan çıkmak iyi değil. Zaman değil.

 
gyfto :

1. Modülerleştirme neden hemen yapılır? Elbette herkesin kendine has bir tarzı var ama önce kompakt versiyonu cilalardım, sonra saat gibi çalıştığında modülerliğe çevirirdim. Kompakt sürüm (Trade, LastCandlesType, GetStateOfMA, GetGeneralSignal harici işlevleri olmadan), son sayfada start() dahili öğelerinin bir varyantı olarak verildi. Senin için nasıl çalışıyor? Çalışırsa, modüllere bölün.

Aslında ben böyle yazmaya alışığım. Ve hataları bulmak daha kolaydır. Sonuçta, şu anda cant'ın LastCandlesType () işlevinde olduğunu hemen anladım. Ancak, seçeneğiniz kazanmış olmasına rağmen, nedeni henüz açıklığa kavuşturulmamıştır.

hediye :

2. Bana öyle geliyor ki, kod bir öncekiyle tamamen aynı, çünkü t sayacı kesinlikle i sayacına paralel olarak değişir. O zaman i ile karşılaştırabiliyorsanız, neden t ile karşılaştırın? Ve mantıksal olarak daha da ileri giderek, kodumuz işe yaramadıysa neden i ile karşılaştıralım?

Geç yazdı, .. ahlaki aşırı yük görmek.

hediye :

Bunun da işe yaramayacağını anlıyorum, asla bilemezsiniz, ancak daha fazlasını anlamak için bundan emin olmam gerekiyor.

İşler! Bu kodun neden çalışmadığını anlamak için kalır. Gözüme ilk çarpan an, sayaç değeri i_sequentBarsCount değerine ulaştığında fonksiyondan çıkış oluyor. Ama yine yazdırdım ve sayaç değeri sadece 1'i gösteriyordu, işlev dönüşünden varsayılan çıkışı koyduğumda (REQUIRED_SEQUENTIAL_MISS);

Yerleştirmeden önce her şey doğru hesaplandı ama baykuş doğru ticaret yapmıyordu. Orada bir şeyler oluyordu. Teoride, yukarıdaki varsayılan çıkışlarından hiçbiri işe yaramadıysa da, koşulların hiçbiri işe yaramadı ve varsayılan çıkışı koşula koysanız bile çalışmamalıdır. Tersine, bir koşul karşılanıyorsa, yerine getirilmesi gerekir.


hediye :

4. Tamamen benim kişisel uyarlamam: Kodu meta düzenleyiciye değil, satır numaralandırmalı başka bir düzenleyiciye yazın ve herhangi bir değişkenin her değişikliğine ve her birine, herhangi bir if veya anahtar kontrolüne, aynı satıra (sonradan) yazdırın. son noktalı virgül). Satır numarası biçiminde yazdırın - kontrol edilen değer(ler). if'den sonra şu şekilde yazdırırım: if(tracing) {Print(StringConcatenate("satır_numarası: değişken_adı=", değişken_adı));} ve değişkeni başlıkta şöyle bildiririm: bool tracing=false;//izlemeyi etkinleştir . O zaman tam teşekküllü bir ize ve buna bağlı olarak tam teşekküllü hata ayıklamaya sahip olacaksınız. Ancak gerçek şu ki, günlükleri daha sık temizlemeniz gerekiyor. Hemen meta düzenleyicideyse, ilk başta aşağıdaki gibi boş bir şablon oluşturabilirsiniz.

/*001*/

...

/*999*/

satırların başında (ve bu işe yarar) ve ardından kodu bu şablonun bir kopyasına yazın. Ama sadece öyle düşünüyorum, pratikte bunu denemeye çalıştım ama tutarsız bir şekilde denedim.


Satır numaralarına değil, uzmanın verilerine göre yazdırıyoruz. Neden satır numaralarına ihtiyacınız var? Ben şahsen kod analizi için kullanıyorum çünkü gerçekten güzel zamanlar var. Ve satır numaralarına göre kod yazmak ve hata ayıklamak benim için saçma.
 
hoz :

Bu kodun neden çalışmadığını anlamak için kalır.


Kendimi anladığım gibi. Arabaların kavşaklarını okuyoruz. Daha doğrusu, herhangi bir zamanda kesişmeden sonra üç ardışık yükseliş veya düşüş mumu. Koşul sağlandığında piyasaya giriyoruz . Ancak sözlü açıklamaya göre, bu üç veya daha fazla ardışık mum, pencerenin sağ kenarına atıfta bulunur. Kodunuza göre, pencerenin ortasına da başvurabilirler. Bu nedenle, son mumun son mum olamayacağı gerçeğine rağmen, koşul (üç mum) gerçekleştiğinde danışman piyasaya girdi.
 
gyfto :

Kendimi anladığım gibi. Arabaların kavşaklarını okuyoruz. Daha doğrusu, herhangi bir zamanda kesişmeden sonra üç ardışık yükseliş veya düşüş mumu. Koşul sağlandığında pazara giriyoruz. Ancak sözlü açıklamaya göre, bu üç veya daha fazla ardışık mum, pencerenin sağ kenarına atıfta bulunur. Kodunuza göre, pencerenin ortasına da başvurabilirler. Bu nedenle, son mumun son mum olamayacağı gerçeğine rağmen, koşul (üç mum) gerçekleştiğinde danışman piyasaya girdi.


Evet. Buradaki sonuç şudur: sözdizimini bilerek, yine de mantığı izlemeniz gerekir. Sonuçta, bu çok önemli. Orada mantık hatası yaptım.

Basit görünüyor, ama benim de kafama takılan ve hemen hakim olamadığım bir şey. Mla. Olur .. :(

 

Tünaydın!

Sorum biraz konu dışı olacak.

Lütfen bana söyler misiniz, bir yerde CSV dosyaları biçiminde TA rakamlarını bulmak mümkün mü? txt, xls veya programlı olarak işlenebilen herhangi bir başka formatta kabul edilebilir seçenek.

Çeşitli makalelerde, TA ile ilgili ders kitaplarında TA figürlerinin örnekleri var, ancak elbette sıradan resimler şeklinde. Ancak, H1-H4 periyotlarında bazı döviz çiftlerinin tarihinin bir parçası olarak kaydedilen, az ya da çok büyük TA rakamlarına rastlayan var mı?

Googled, bulamadı. Elbette, geçmişi manuel olarak yineleyebilir, şekilleri işaretleyebilir, bu tarih parçasını .csv olarak dışa aktarabilirsiniz; gerekli sayıda tekrarlayın, sonuç olarak rakamların tabanını toplayın. Ama eğer biri bunu zaten yaptıysa, zaman kazanmak isterim.

Şimdiden teşekkürler :)