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

 
TarasBY :

Bu hat hakkında:

Son zamanlarda, DC'ler genellikle sembolün adına farklı önekler ekler (örneğin EURUSDm - örneğin) - sembolün piyasa ortamına atıfta bulunurken bunlar dikkate alınmalıdır.

Not ...ve standart "EURUSD" için StringSubstr ("EURUSD", 6) sıfır değil "" olacaktır.

Çok teşekkür ederim İgor! DC'den ve mektuptan haberim yoktu. Bu muhtemelen bir mini hesaptır - "m" harfi için

Ve bilmiyorsunuz - JPY katsayısı 82 nereden geliyor? diğer para birimleri GBP - 0.625 , EUR - 0.7751937984 idi

Teoride, döviz kurlarını dönüştürürken, döviz kurları değiştiğinde katsayı dalgalı olacaktır. O zaman neden sabitleri alalım?
 
Chiripaha :

Nikolai, programlamayı ve program oluşturmayı öğreniyor olman çok güzel. Ama gerçek şu ki, programdaki ayrı bir anlaşılmaz durumda tam olarak yardım istemediniz, ancak aslında TOR'u programı yazmak için belirlediniz.

Bana göre sergilediğiniz şey, robotlarla ilgili olarak mecazi olarak konuşursak, bir yığın heterojen yedek parçadır. Her şey tamamen yanlış.

Bu nedenle, burada belirli bir hatayı belirtmek imkansızdır, çünkü. her şeyin tamamen farklı şekilde yeniden yapılması gerekiyor. - IMHO, daha fazlası gibi davranmıyorum.

Ama bu üzülmek için bir sebep değil. Daha fazla yazmayı öğrenin. Burada, dedikleri gibi, elbette, sizin yerine "yiyebilirsiniz" (iş yapabilirsiniz), ancak kendiniz bundan doymayacaksınız (yani öğrenmeyeceksiniz). Öyleyse devam et. Yol, yürüyen tarafından yönetilecektir.

Bu soruna farklı bir yaklaşımla tekrar yazmayı deneyin. - Bana yardımcı oldu.


Eleştiri için teşekkürler. Söyle bana, bunu uygulamak gerçekten mümkün mü?
 
NICK_R :
Eleştiri için teşekkürler. Söyle bana, bunu uygulamak gerçekten mümkün mü?

Tabii ki gerçek. Ama bu tam olarak kolay bir iş değil. Çok zor olduğu söylenemez ama kolay da değil. - Çalışmak için doğru.
 
Chiripaha :

Çok teşekkür ederim İgor! DC'den ve mektuptan haberim yoktu. Bu muhtemelen bir mini hesaptır - "m" harfi için

Ve bilmiyorsunuz - JPY katsayısı 82 nereden geliyor? diğer para birimleri GBP - 0.625 , EUR - 0.7751937984 idi

Teoride, döviz kurlarını dönüştürürken, döviz kurları değiştiğinde katsayı dalgalı olacaktır. O zaman neden sabitleri alalım?

Sergey, bu rakamlar bana hiçbir şey söylemiyor, bu yüzden bu soruya bir cevabım yok.

Ve bir karakterin yazılmasındaki öneklerin bir anlamı olabilir veya olmayabilir.

 
TarasBY :

Sergey, bu rakamlar bana hiçbir şey söylemiyor, bu yüzden bu soruya bir cevabım yok.

Ve bir karakterin yazılmasındaki öneklerin bir anlamı olabilir veya olmayabilir.

TAMAM. Teşekkür ederim!
 

İyi günler meslektaşlarım!

Lütfen döngüdeki döngüden nasıl kurtulabileceğinizi söyleyin (kodda kırmızı ile vurgulanmıştır)? Gösterge çok yavaşlıyor.

 #property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  DarkGray
#property  indicator_color2  PowderBlue
#property  indicator_width1   2

//---- basic fan indicator parameters

extern bool Show_AOLine_2= true ;
extern int SlowEMA3= 34 ;
extern int EMA= 3 ;
extern bool Show_Volume= true ;
extern double coaf= 0.5 ;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];

     double   price_up_start, price_up_end, AO_up;
     double   price_dn_start, price_dn_end, AO_dn;
     datetime time_up, time_dn, AO_time_up, AO_time_dn;
     double Vol_AO_up, Vol_AO_dn;
     int shift_up, shift_dn, dn_koaf, up_koaf, dn_koaf_round, up_koaf_round;
    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
   string name_ind = "Awesome_super_volumes" ;
   IndicatorShortName( "Awesome_super_volumes" );
   
   
//---- AO_fan line 2 (basic)
   if (Show_AOLine_2 == true ){Show_AOLine_2= DRAW_LINE ; }
   else 
    {Show_AOLine_2= DRAW_NONE ; }
   SetIndexBuffer ( 0 ,AOBuffer3);
   SetIndexStyle( 0 ,Show_AOLine_2);
   SetIndexLabel( 0 , "basic line" );   

   SetIndexBuffer ( 1 ,ExtMapBuffer1);
   SetIndexStyle( 1 , DRAW_HISTOGRAM );
   SetIndexLabel( 1 , "Volume" );
   
   //---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int     limit;
   int     counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;

    for ( int i= 0 ; i<limit; i++)   // -------------------------------------------- Основной цикл
   {
     
 //---- Awesom + Volumes
     
AOBuffer3[i]= iMA ( NULL , 0 ,EMA, 0 , MODE_SMA , PRICE_MEDIAN ,i)- iMA ( NULL , 0 ,SlowEMA3, 0 , MODE_SMA , PRICE_MEDIAN ,i);
if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
   if (AOBuffer3[i]<= 0 )Vol_Arr[i]=Volume[i]* Point *coaf;
   if (AOBuffer3[i]> 0 )Vol_Arr[i] = -Volume[i]* Point *coaf;
}

//----------------------------- Блок поиска значений -----------------------------------------//
 
 //-- Поиск Low & Time & Min_AO 
   if (AOBuffer3[i] < 0 )
  {
 price_up_end = 0 ; AO_up = 0 ;  
 price_dn_start = Low[i]; if (price_dn_end == 0 ) price_dn_end = Low[i]; 
 if (price_dn_start <= price_dn_end) {price_dn_end = price_dn_start; time_dn = Time[i]; shift_dn = iBarShift( NULL , 0 , time_dn);}
 if (AOBuffer3[i] <= AO_dn) {AO_dn = AOBuffer3[i]* 0.2 +AOBuffer3[i]; AO_time_dn = Time[i];}
 dn_koaf=dn_koaf_round;
 up_koaf_round++;
  }   
  
   //-- Поиск High & Time & Max_AO  
   if (AOBuffer3[i] > 0 )
   {
  price_dn_end = 0 ; AO_dn = 0 ;  
  price_up_start = High[i];
   if (price_up_start >= price_up_end) {price_up_end = price_up_start; time_up = Time[i]; shift_up = iBarShift( NULL , 0 , time_up);}
   if (AOBuffer3[i] >= AO_up) {AO_up = AOBuffer3[i]* 0.2 +AOBuffer3[i]; AO_time_up = Time[i];}
  up_koaf=up_koaf_round;
  dn_koaf_round++;
   }   
 //--------------------------------- Выставляем значения --------------------------------------------//
    
   Vol_AO_up = 0 ; Vol_AO_dn = 0 ;
   if (shift_up > shift_dn)
    {
 for ( int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
    Vol_AO_up += Volume[dn_br]; 
    SetText( "Awesome_super_volumes" +up_koaf, DoubleToStr(Vol_AO_up, 0 ), AO_time_dn, AO_dn, Blue);
          }   
  }
 
 if (shift_dn > shift_up)
    {
 for ( int up_br = shift_up; up_br <= shift_dn; up_br++)            //-------------- Еще один п еребор значений внутри основного цикла
          {
    Vol_AO_dn += Volume[up_br]; 
    SetText( "Awesome_super_volumes" +dn_koaf, DoubleToStr(Vol_AO_dn, 0 ), AO_time_up, AO_up, Red);
          }   
    }
 } 
           
//---- done

   return ( 0 );
  }
//+------------------------------------------------------------------+
void SetText( string name, string Vl, datetime t1, double p1, color c)
 {
   ObjectCreate (name, OBJ_TEXT ,WindowFind( "Awesome_super_volumes" ), 0 , 0 , 0 , 0 );
  ObjectSetText(name, Vl, 6 , "Arial Black" , c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR , c); 
  }

Teşekkür ederim!


 
Fox_RM :

İyi günler meslektaşlarım!

Lütfen bana döngüdeki döngüden nasıl kurtulacağınızı söyler misiniz (kodda kırmızı ile vurgulanmıştır)? Gösterge çok yavaşlıyor.

Teşekkür ederim!

Yine de, bu, belki de aptalca bir fikri ifade edeceğim. Ama belki daha mantıklı bir şey ortaya çıkar.

Göreve bağlı olarak, son yineleme için bazı çubuklarda verilere ihtiyacınız olduğundan, ardından ilk yinelemede veri değerlerini bir k-thread dizisine (veya arabelleğe - burada özel bir uzman değilim) yazın.

Ve ilk yineleme tamamlandıktan sonra 2. yineleme için veri elde etmek için bu diziden (tampondan) gerekli değerleri alın.

Sadece hız için yardımcı olacağından özellikle emin değilim. Ama frenlerin nedenleri hakkında da pek bir şey bilmiyorum. Bu konuda daha nitelikli bir şey söylemek benim için zor.

Artıları ve eksileri neler olabilir. Dezavantajı, bu durumda, durumu çevrimiçi olarak değil, veriye artık ihtiyaç duyulmadığında, bar tarafından değerlendirmenizdir. Ama!... Bu, aslında, eski verileri yeniden hesaplarken, zaten çevrimiçi olmanız ve bunlara ihtiyacınız olmaması gerçeğiyle dengelenir. Ve gerçek güncel veriler geldiğinde hemen 2. numaralandırma olacak ve işlenecektir. Bu nedenle, bu durumda alaka kaybı olmamalıdır. Ve artı - sizin tarafınızdan belirlenen görevi çözecektir: numaralandırmada numaralandırmadan kurtulmak. :))

Belki de bir şey öğrenmedim. Fikrimi eleştirel olarak alın. En iyi eleştirmen pratiktir. Sadece neyin işe yarayacağını ve nasıl çalışacağını yazmanız ve iki kez kontrol etmeniz gerekiyor. Bence de.

 

Pratikte hiçbir fark yoktur, sadece A ve B kontrol noktalarını elde etmek için biraz farklı bir süreç olacaktır. Dizilerle zaten denedim.

Ardından, A ve B arasında, çubukları numaralandırarak bir döngü düzenlemeniz gerekecektir. Başka bir yol göremiyorum, bu yüzden soruyu sordum.

Belki birisi sana söyler. Belki de kod yazma mantığı topal nerede?

 
Fox_RM :

Pratikte hiçbir fark yoktur, sadece A ve B kontrol noktalarını elde etmek için biraz farklı bir süreç olacaktır. Dizilerle zaten denedim.

Ardından, A ve B arasında, çubukları numaralandırarak bir döngü düzenlemeniz gerekecektir. Başka bir yol göremiyorum, bu yüzden soruyu sordum.

Belki birisi sana söyler. Belki de kod yazma mantığı topal nerede?

Evet, kesinlikle - numaralandırma ile bir döngü yapmak hala gerekli olacak. Dolayısıyla bundan kaçınmanın bir yolu yok. Ve büyük olasılıkla soruyu farklı bir şekilde koymak gerekiyor - Frenlerin neden oluştuğu ve ondan nasıl kurtulacağı nedeniyle?
 
Fox_RM :

İyi günler meslektaşlarım!

Lütfen bana döngüdeki döngüden nasıl kurtulabileceğinizi söyleyin (kodda kırmızı ile vurgulanmıştır)? Gösterge çok yavaşlıyor.

Teşekkür ederim!

Burada gruplayabilirsiniz - türkiye'nin küçük bir optimizasyonu zaten olacak:

 if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
   if (AOBuffer3[i]<= 0 )Vol_Arr[i]=Volume[i]* Point *coaf;
   if (AOBuffer3[i]> 0 )Vol_Arr[i] = -Volume[i]* Point *coaf;
}

buna:

 if (Show_Volume== true )
{
 double nSum = Volume[i]* Point *coaf; double Vol_Arr[];  // Не знаю в этом случае можно через запятую переменные прописывать? - double nSum = Volume[i]* Point *coaf, Vol_Arr[];

  if (AOBuffer3[i]<= 0 ) {ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]* Point *coaf;}
 if (AOBuffer3[i]> 0 )  {ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]* Point *coaf;}
}

Tam burada:

AO_dn = AOBuffer3[i]* 0.2 +AOBuffer3[i];
// и тут
AO_up = AOBuffer3[i]* 0.2 +AOBuffer3[i];

Şu şekilde değiştirilebilir:

AO_dn = AOBuffer3[i]* 1.2 ;
     // и
AO_up = AOBuffer3[i]* 1.2 ;

Ardından, göstergenizde "Metinler" birikir. Yeni metin yerleştirmeden önce eskileri silinmelidir. Bu, hindiyi büyük ölçüde yavaşlatabilir - belki de nedeni budur. Çünkü Bu metinlerden, seçilen parametrelerdeki işaretler kadar çok alırsınız .

Birisi bana bunu kodda en iyi nasıl uygulayacağımı söylerse - aksi takdirde kendim bu tür kodlama yardımına yönelirim.