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

 
Ctmcn :

Expert Advisor'ı derlerken hatanın ne anlama geldiğini söyleyin:

'\end_of_program' - dengesiz sol parantez


Dengesiz sol parantez.
 
Roll :

Dengesiz sol parantez.

Hata... Buldum. TEŞEKKÜR ETMEK.
 

Bir soru vardı -

Emirler AL/SAT DUR olarak açılır. Bazıları pazarlanabilir hale gelir, diğerleri kaldırılır.

Son N-piyasa emirleri için (açık ve kapalı), Alış mı Satış mı olduklarını öğrenmeniz gerekir.

İlk düşünce, OrdersHistoryTotal() ve OrdersTotal() öğelerinden gelen tüm siparişleri yinelemek, bunları sıralamaktır.

kapanış saati ve ardından OP_BUY ve OP_SELL. Ancak bu uzun ve işlemciyi çılgınca yavaşlatacak.

- Belki başka, daha basit bir seçenek vardır?

Teşekkür ederim!

 

Tünaydın.

Biri yardım edebilir mi?

İlk basit göstergemi yazdım - son 2, 3,4 ve 5 gün için ortalama oynaklığı hesaplamalı.

Göstergenin altı tamponu vardır,

 SetIndexStyle ( 0 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 0 ,VolatBuffer0);
   SetIndexStyle ( 1 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 1 ,VolatBuffer1);
   SetIndexStyle ( 2 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 2 ,VolatBuffer2);
   SetIndexStyle ( 3 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 3 ,VolatBuffer3);
   SetIndexStyle ( 4 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 4 ,VolatBuffer4);
   SetIndexStyle ( 5 , DRAW_LINE );
   SetIndexBuffer ( 5 ,VolatBuffer5);

grafikteki penceresinde, 0 gün, 1 gün, ortalama için volatilite değerine göre normalde sadece beş dikey çizgi çizer. 2 gün, 3 gün ve 4 gün.

Önceki 5 günün toplamı için ortalama oynaklık, 50 günlük mum için kesik bir çizgi olarak çizilir - çoğu ayarlandı.

arabelleklerin içeriği şu şekilde hesaplanır: beş günün ortalaması - bir döngü içinde (50 gün için bir çizgi çizin), ortalama verilerin geri kalanı - döngünün dışında.

 while (i>= 0 )
   {
    
   int day0= (High[i] - Low[i])/ Point ;
   int day1= (High[i+ 1 ] - Low[i+ 1 ])/ Point ;
   int day2= (High[i+ 2 ] - Low[i+ 2 ])/ Point ;
   int day3= (High[i+ 3 ] - Low[i+ 3 ])/ Point ;
   int day4= (High[i+ 4 ] - Low[i+ 4 ])/ Point ;
   int day5= (High[i+ 5 ] - Low[i+ 5 ])/ Point ;

         int D5_av = (day1+ day2+ day3+ day4+ day5) / 5 ;
       VolatBuffer5[i]=D5_av;
      i--;
        }
        day0= (High[ 0 ] - Low[ 0 ])/ Point ;
   day1= (High[ 1 ] - Low[ 1 ])/ Point ;
   day2= (High[ 2 ] - Low[ 2 ])/ Point ;
   day3= (High[ 3 ] - Low[ 3 ])/ Point ;
   day4= (High[ 4 ] - Low[ 4 ])/ Point ;
        
         int D4_av = (day1+ day2+ day3+ day4)/ 4 ;
         int D3_av = (day1+ day2+ day3)/ 3 ;
         int D2_av = (day1+ day2)/ 2 ;
         int D1_av = day1/ 1 ;
         int D0_av = day0/ 1 ;
        
        VolatBuffer0[ 0 ]=D0_av;
      VolatBuffer1[ 1 ]=D1_av;
      VolatBuffer2[ 2 ]=D2_av;
      VolatBuffer3[ 3 ]=D3_av;
      VolatBuffer4[ 4 ]=D4_av;
Comment ( "Волатильность. За 5 дн.= " +VolatBuffer5[ 5 ]+ " За 4 дн.= " +VolatBuffer4[ 4 ]+ " За 3 дн.= " +VolatBuffer3[ 3 ]+ " За 2 дн.= " +VolatBuffer2[ 2 ]+ " Вчера= " +VolatBuffer1[ 1 ]+ " Сегодня= " +VolatBuffer0[ 0 ]);

Tamponların içeriğini içeren göstergedeki Coment satırı, ekranda bir saçmalık gösteriyor:

5 günün ortalaması - bu günler için 194 puandan fazla oynaklık yoktu ve geri kalan günlerin doğru sonuçları.

Coment = " Volatilite. 5 gün = 219.000000 4 gün = 171.0000000 3 gün = 189.00000 2 gün = 187.00000 Dün = 194.00000 Bugün = 5 "

Sıfır gün "Bugün", mevcut günün volatilitesiyle açıkça artıyor

Bir EA'da bu arabellekleri çağırırken

 int Volat0= iCustom ( Symbol (), 1440 , "Volat_Average_Gist" , 0 , 0 );
       int Volat1= iCustom ( Symbol (), 1440 , "Volat_Average_Gist" , 1 , 0 );
       int Volat2= iCustom ( Symbol (), 1440 , "Volat_Average_Gist" , 2 , 0 );
       int Volat3= iCustom ( Symbol (), 1440 , "Volat_Average_Gist" , 3 , 0 );
       int Volat4= iCustom ( Symbol (), 1440 , "Volat_Average_Gist" , 4 , 0 );
       int Volat5= iCustom ( Symbol (), 1440 , "Volat_Average_Gist" , 5 , 0 );

testçinin Yazdır satırı başka bir saçmalık verir - doğru değil, Coment satırından farklı, ancak gerçeğe benzer, 5 günlük ortalama sonuç ve bugünün "Sıfır" gününün doğru oynaklığı.

Gerisi sabit bir saçma sayı verir.

Baskı test cihazı Volatilite verir 5 gün= 181 4 gün= 2147483647 3 gün= 2147483647 2 gün= 2147483647 Dün= 2147483647 Bugün= 5

Birkaç gün boyunca Expert Advisor'ın neden "Sıfır" günlük arabellek dışında beş gösterge arabelleğinde bulunan aynı verileri almadığını anlayamıyorum?

 

değiştirmeyi dene

VolatBuffer1[1]=D1_av;

üzerinde

VolatBuffer1[0]=D1_av;

iyi ve diğer tüm tamponlar da.

 
Roger :

değiştirmeyi dene

VolatBuffer1[1]=D1_av;

üzerinde

VolatBuffer1[0]=D1_av;

iyi ve diğer tüm tamponlar da.

Teşekkür ederim!

İşe yaradı. Danışmana normal veriler gelmeye başladı.

Ek olarak, ilginç bir etki ortaya çıktı - göstergenin kendisinin "Yorum" satırında

EA'nın Print satırındaki saçmalık tescil edilmeye başlandı, sadece 219 5 gün olduğu gibi kaldı.

Aynı zamanda 219 yerine 181 olması gerektiği gibi danışmana gelir.

Yorum", Volatilite döndürür 5 gün= 219.000000 4 gün= 2147483647 3 gün= 2147483647 2 gün= 2147483647 Dün= 2147483647 Bugün= 5

 
Roger :

değiştirmeyi dene

VolatBuffer1[1]=D1_av;

üzerinde

VolatBuffer1[0]=D1_av;

iyi ve diğer tüm tamponlar da.

Başka bir etki buldum. Gösterge penceresinde artık tüm dikey çizgiler birbirinin üzerine çizilir.

ve en büyük değer tüm diğerlerini kapsar. Bir danışman için bu şart değildir.

 
Vekker :

Tünaydın.

Biri yardım edebilir mi?

İlk basit göstergemi yazdım - son 2, 3,4 ve 5 gün için ortalama oynaklığı hesaplamalı.

ATR'yi kullanarak işleri çok basitleştirebilirsiniz:

 iATR ( NULL , PERIOD_D1 , Number_Of_Days, 1 )
 
Roll :
İki komut dosyası:

Soru artık nasıl kod yazılacağı değil, fikir düzeyinde - çoklu döngülerden kaçınmak mümkün mü?

bu işlemciyi yükler. Örneğin, açık STOP emirlerinin sayısını izlemek için bir fikir vardı - eğer bir azaldıysa, ancak emir silinmediyse => bir piyasa açıldı =>

açılış saatini yerleştirin ve bir dizi yazın. Bunun gibi bir şey.

Herhangi bir fikir açığız.

Teşekkür ederim!

 
chief2000 :

ATR'yi kullanarak işleri çok basitleştirebilirsiniz:



Teşekkür ederim! Deneyeceğim