Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 561

 
Forexman77 :

Canım, yardımına ihtiyacım var.

EA'yı gösterge ile optimize ediyorum, gösterge kodu aşağıdadır.

Optimizasyon yavaş, EA'da bir kod yaptım, böylece gösterge pek uygun olmayan yeni bir çubukta yeniden hesaplanır.

Lütfen gösterge koduna bakın, yeniden hesaplamayı daha hızlı hale getirmek için içinde neler yapılabilir.


neden bu göstergenin suçlanacağına karar verdiniz?
 
Vladon :

karakter sayısı, + yazı tipi boyutu, bunun gibi bir şey mi?

Yazı tipi boyutu istenilen bilgiyi vermemektedir. Birkaç nesneyi üst üste çizmeniz gerekir. Yalnızca ilk nesnenin bir bağlantı noktası vardır. 2. ve sonraki nesnelerin bağlantı noktası nasıl alınır?
 
Vladon :


Kullanıcının kendisi Expert Advisor'ı boşaltması durumunda Expert Advisor'ın zorunlu olarak feshedilmesi.

verileri doğrudan başlangıçta yazmak daha iyidir.

Start ile çalışmıyor. Aynı resim.
-------------------------------------------------- --
25.03.2014 13:28

Deinit süresi 10 saniye ile sınırlıdır.

Test cihazında, normal tamamlamanın ardından durdurma bayrağı ayarlanmaz, bu nedenle deinit sessizce çıkar.

-------------------------------------------------- --

Belki herhangi bir işlevin çalışmasına 10 saniyelik bir sınır uygulanır?
 
Merhaba! MQL4 çalışırken küçük bir soru ortaya çıktı. Görev, bu sitedeki ders kitabında yayınlanmıştır. İşte koşul: Görev 25. Aşağıdaki koşulları uygulayan bir program yazın: oran belirli bir seviyenin üzerine çıktıysa, o zaman seviyenin üzerindeki fazlalığın (100 puana kadar) kelimelerle belirtildiği bir mesaj verin; diğer durumlarda, oranın belirtilen seviyeyi aşmadığını bildirin.
Ve işte önerilen çözüm:
 //--------------------------------------------------------------------
extern double Level = 1.3200 ;                     // Заданный уровень 
string Text [ 101 ] ;                               // Объявление массива
//--------------------------------------------------------------------
int init ()                                        // Спец. ф-ия init()
   {                                              // Присвоение значений
   Text [ 1 ] = " один " ;             Text [ 15 ] = " пятнадцать " ;
   Text [ 2 ] = " два " ;             Text [ 16 ] = " шестнадцать " ;
   Text [ 3 ] = " три " ;             Text [ 17 ] = " семнадцать " ;
   Text [ 4 ] = " четыре " ;           Text [ 18 ] = " восемнадцать " ;
   Text [ 5 ] = " пять " ;             Text [ 19 ] = " девятнадцать " ;
   Text [ 6 ] = " шесть " ;           Text [ 20 ] = " двадцать " ;
   Text [ 7 ] = " семь " ;             Text [ 30 ] = " тридцать " ;
   Text [ 8 ] = " восемь " ;           Text [ 40 ] = " сорок " ;
   Text [ 9 ] = " девять " ;           Text [ 50 ] = " пятьдесят " ;
   Text [ 10 ] = " десять " ;         Text [ 60 ] = " шестьдесят " ;
   Text [ 11 ] = " одиннадцать " ;     Text [ 70 ] = " семьдесят " ;
   Text [ 12 ] = " двенадцать " ;     Text [ 80 ] = " восемьдесят " ;
   Text [ 13 ] = " тринадцать " ;     Text [ 90 ] = " девяносто " ;
   Text [ 14 ] = " четырнадцать " ;   Text [ 100 ] = " сто " ;
   // Вычисление значений
   for ( int i = 20 ; i <= 90 ; i = i + 10 )                  // Цикл по десяткам
     {
       for ( int j = 1 ; j <= 9 ; j ++ )                    // Цикл по единицам
         Text [ i + j ] = Text [ i ] + Text [ j ] ;           // Вычисление значения   
     }
   return ;                                     // Выход из init()
   }
//--------------------------------------------------------------------
int start ()                                      // Спец. ф-ия start()
   {
   int Delta = NormalizeDouble (( Bid - Level ) / Point , 0 ) ; // Превышение 
//--------------------------------------------------------------------
   if ( Delta >= 0 )                                  // Цена не выше уровня
     {
       Alert ( " Цена ниже уровня " ) ;                 // Сообщение
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if ( Delta < 100 )                                // Цена более 100
     {
       Alert ( " Более ста пунктов " ) ;               // Сообщение
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert ( " Плюс " , Text [ Delta ] , " pt. " ) ;             // Вывод на экран
   return ;                                       // Выход из start()
   }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Vladon :

neden bu göstergenin suçlanacağına karar verdiniz?

Örneğin, AMA'yı optimize ettim, optimizasyon çok daha hızlı , gösterge karmaşık olmasına rağmen.

Kesinlikle göstergenin suçlanacağını söylemeyeceğim. Henüz çok tecrübem yok.

Ama nasıl hızlandırılır? Her şeyi burada mı yaptın yoksa bir şeyler değiştirilebilir mi?

Prensipte göstergenin son 100 çubuğa göre hesaplanması yeterlidir, ancak 500 yerine 100 sayısını koyarsam değerler kayboluyor.

 extern int Limit= 70 ;

if (counted_bars< 0 ) return (- 1 );
   if (counted_bars> 0 ) counted_bars--;
 
   limit1= Bars -counted_bars- 1 ;
   if (limit1>Limit && Limit> 0 ) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if (limit1> 0 ) 
     {
      limit1= 500 -Period_MA_1- 1 ;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
Optimizasyon böyle bir hızda yapılırsa, sonunda sakal yere kadar uzar ve kazanılan muliensler faydalı olmaz) Eh, yoksa piyasa tamamen farklı olacaktır.
 
alxm :
Tünaydın. Söyleyin bana, OBJ_TEXT grafik nesnesinin grafiğindeki genişliği / yüksekliği programlı olarak belirlemek veya hesaplamak mümkün mü?

Muhtemelen metin değil, etiket lütfen

docs.mql4.com/en/constants/objectconstants/enum_object_property

Özellik OBJPROP_XSIZE ve OBJPROP_YSIZE

 
Vladon :


Döngü deyimiyle ilgili yardım için teşekkürler, her şey yolunda gitti.
 
Forexman77 :



Ama nasıl hızlandırılır? Her şeyi burada mı yaptın yoksa bir şeyler değiştirilebilir mi?



Eh, burada yeniden hesaplarken saçmalığı hemen görebilirsiniz, örneğin bir çubuk eklendi.

limit1= Bars -counted_bars- 1 ;

limit1 ikiye eşit olacak... Ve sonra

 if (limit1> 0 ) 
     {
      limit1= 500 -Period_MA_1- 1 ;

Genel olarak, hesaplama tamamen yanlıştır ...

 
Vladon :



Çok teşekkürler, iyi günler :) >
 
splxgf :


Eh, burada yeniden hesaplarken saçmalığı hemen görebilirsiniz, örneğin bir çubuk eklendi.

limit1 ikiye eşit olacak... Ve sonra

Genel olarak, hesaplama tamamen yanlıştır ...

Nasıl doğru olacak? Bunun için soruyorum. Göstergeleri çok iyi saymayı bilmiyorum.

Sanırım:
limit1= Bars -counted_bars;

böyle mi olmalı

Ama burada bilmiyorum

 if (limit1> 0 ) 
     {
      limit1= 500 -Period_MA_1- 1 ;
Genel olarak, göstergenin son 100 bara göre hesaplanması benim için yeterlidir.