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

 
Fox_RM :

NewBar() işlevini kullanarak siparişleri yeni bir çubukta açmaya çalıştım. Bunun için kullanılmalı mı?

Örneğin if (NewBar())i++; Bunun gibi bir şey.

NewBar fark etmedi, üzgünüm

Ardından, aşağıdakileri değiştirin: İşlemleri yalnızca yeni bir çubukta açarsanız, her işarette tüm göstergeyi saymanız gerekmez.

Bu nedenle, bir anlaşma açma koşullarını kontrol etmeden önce göstergenin tüm hesaplamasını hareket ettirin ve limit çubuklarını değil, ihtiyacınız olduğu kadarını sayın (yanılmıyorsam 20)


Yani strateji:

1) yeni çubuk? hayır - yürümek

2) evet - gerekli olan her şeyi dikkate alıyoruz (MA, gösterge, koşullar için diğer her şey)

3) koşulları kontrol edin - hayır - yürüyün

4) evet - _geçerli fiyattan_ açın (sırasıyla Talep veya Teklif Edin)

 
ilunga :

NewBar fark etmedi, üzgünüm

Ardından, aşağıdakileri değiştirin: İşlemleri yalnızca yeni bir çubukta açarsanız, her işarette tüm göstergeyi saymanız gerekmez.

Bu nedenle, bir anlaşma açma koşullarını kontrol etmeden önce göstergenin tüm hesaplamasını hareket ettirin ve limit çubuklarını değil, ihtiyacınız olduğu kadar (yanılmıyorsam 20) sayın.

Bu doğru 20. Bunu nasıl yapacağımı kabaca anladım. Lütfen bir uzman için SADECE 20 barlık hesaplamam ile hesaplamam arasındaki farkın tam olarak NE olduğunu açıklayın.

Sadece hatanın özünü anlamak istiyorum.

 
Fox_RM :
Herkese iyi günler!
İzlemek için bir uzman için göstergemin kodunu yeniden oluşturmaya karar verdim.
sinyallerini işliyor.
Hataları derlerken, 0. Test cihazında da hatasız çalışır, ancak hiçbiri

bir işlem, sorun ne?

ZY Eminim çok ve aptalca hatalar vardır, lütfen boşlukları vurun.

Kodu kendi yönteminizle yeniden yazmak, "burada ne dans ediyorsun" örneğini burada bulmaktan daha kolaydır:

   ArrayResize (MA1, Bars ); ArrayResize (MA2, Bars );

Expert Advisor'daki göstergelerde kullanılan fonksiyonun nasıl çalışacağına rastlamadım:

   int counted_bars= IndicatorCounted ();  

Ancak, "fark yok" ise, düzenlediğiniz döngü:

   for (i= 0 ; i<=limit; i++) 

Limit = Bars - counted_bars olduğunda, 2. tikte 0'a eşit bir değer alacaktır, daha sonra değer ona koda göre atanacaktır ... OPA - ancak bu genellikle programlamada YENİ BİR KELİMEDİR:

   if (limit> 0 ) limit= 0 ;

...BÜTÜN stratejiyi bozmazsa, bu koşulu şu şekilde yazmaya çalışın:

   if (limit<= 0 ) limit= 1 ;
 
Fox_RM :

Onlar. çubukları yeniden hesaplamak için bu koşulu kullan?

Ama benim göstergemde TP_UP ve TP_DN dizileri her tik için hesaplanır. Buna göre, önce hesaplanmaları gerekir.


Tekrar ediyorum , pozisyon açılış fiyatı OP_BUY==Sor,, OP_SELL==Bid.

Ve Close[i]'niz var.

 
Fox_RM :

Bu doğru 20. Bunu nasıl yapacağımı kabaca anladım. Lütfen bir uzman için SADECE 20 barlık hesaplamam ile hesaplamam arasındaki farkın tam olarak NE olduğunu açıklayın.

Sadece hatanın özünü anlamak istiyorum.

Tüm göstergenin hesaplanmasında böyle bir hata yoktur. Sadece hangisinin daha hızlı olduğunu düşünün:

1) her tikte Çubuk (yaklaşık 10000) çubuk sayın

2) dakikada 1 defa (hatta birkaç) 20 bar sayın

 
Fox_RM :
Herkese iyi günler!
İzlemek için bir uzman için göstergemin kodunu yeniden oluşturmaya karar verdim.
sinyallerini işliyor.
Hataları derlerken, 0. Test cihazında da hatasız çalışır, ancak hiçbiri

bir işlem, sorun ne?

ZY Eminim çok ve aptalca hatalar vardır, lütfen boşlukları vurun.

ANA DEĞİL, ancak kodu basitleştirmek için bu yapı:

   ArrayResize (TP_UP, 20 ); ArrayResize (TP_DN, 20 ); 
   ArrayResize (TP_UPMin, 20 ); ArrayResize (TP_DNPl, 20 );

ZATEN boyuta sahip basit bir dizi bildirimi ile değiştirilmelidir:

 double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM :

Bu doğru 20. Bunu nasıl yapacağımı kabaca anladım. Lütfen bir uzman için SADECE 20 barlık hesaplamam ile hesaplamam arasındaki farkın tam olarak NE olduğunu açıklayın.

Sadece hatanın özünü anlamak istiyorum.

Bunlar programlamanın İLK\TEMEL ilkeleridir - mantıklı olmayan hiçbir şey yapmayın! :)))
 
Fox_RM :
Ve kütüphanenin çalışmasıyla ilgili başka bir soru.
Kütüphane dosyasını oluşturdum, derledim, her şey hatasız gitti.
Fonksiyonu gösterge koduna aktardım, derledim, her şey yolunda.
Gösterge başlatıldığında, kullanılırken içe aktarılan işlev yürütülmedi.

her şey bu işlev için göstergenin kodundan çalışır. İşte kütüphane kodu.

Bu, gösterge kodundaki çağrıdır:

 //+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link       "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn( double & ArrSr[])
{
double a= 1 ,c,step= 1 / 20 ;
for ( int i= 0 ;i<= 20 ;i++)
{ if (ArrSr[i]== 0 ){a*= 1 ;} else {a*= MathAbs (ArrSr[i]);}}
c= MathPow (a, step);
   return (c);
}
//+------------------------------------------------------------------+
 
Zhunko :

Vadim, o kadar küçük bir dalgalı çizgi (&) koymuşsun ki hemen göremiyorsun!.. :)))

Yazarın (yazarın performansında) bu işlevi bir yerde nasıl gerçekleştirdiğini merak ediyorum, ama başka bir yerde değil mi? ;)

 
Fox_RM :

Bu doğru 20. Bunu nasıl yapacağımı kabaca anladım. Lütfen bir uzman için SADECE 20 barlık hesaplamam ile hesaplamam arasındaki farkın tam olarak NE olduğunu açıklayın.

Sadece hatanın özünü anlamak istiyorum.

Bu arada şunu fark ettim: 20 boyutunda çalışan diziler bildiriyorsunuz:

   ArrayResize (TP_UP, 20 ); ArrayResize (TP_DN, 20 ); 
   ArrayResize (TP_UPMin, 20 ); ArrayResize (TP_DNPl, 20 );

Ve kitaplığınız 21 öğeyi hesaplar:

 for ( int i= 0 ;i<= 20 ;i++)

Döngünün 1'den başlaması gerektiğini varsayabilirim:

 for ( int i=1;i<= 20 ;i++)