Init() ve DeInit() yürütme sırası - sayfa 25

 
Alexey Viktorov :

Dmitry, bence sen eğitimli bir programcısın. Programlamada size görgü kuralları öğretilmedi mi?

Aksi takdirde, örneğin dizinin ötesine geçme yeteneği ve diğer varsayımlar ile eski mql4'teki gibi yazabilirsiniz. Yanıt olarak, bir hata aldık ... peki, bayrak ona geri döndü ... hadi devam edelim, zamanımız yok ... Ve sonra, daha katı bir şekilde, umurumda olmayan bir sorunla karşılaşıyoruz. dil ve geliştiricilere hak iddia etmeye başlar ...

Mesih yükseldi.


Varolan bir nesneyi yaratırken, korkunç bir şey olmaz, korkunç bir şey de olmaz, sadece nesne yaratılmaz ve bu kadar.
 
Nikolai Semko :

Sanırım biraz sonra bir çözüm de ekleyeceğim, ancak global terminal ve dosya değişkenlerini kullanmadan ve bir pencerede birkaç aynı göstergeyi kullanma yeteneği ile .

Bu arada, ilginç bir görev, her farklı gösterge girdi parametresi için diğerlerinden farklı olarak kendi değerini veren bir fonksiyon yazmaktır.

Akla gelen ilk şey ChartSaveTemplate aracılığıyla oldu.


Küresel reddet - görünüşe göre, kaynaklar.

 
fxsaber :

Bu arada, ilginç bir görev, her farklı gösterge girdi parametresi için diğerlerinden farklı olarak kendi değerini veren bir fonksiyon yazmaktır.

Akla gelen ilk şey ChartSaveTemplate aracılığıyla oldu.


Küresel reddet - görünüşe göre, kaynaklar.


Tabii ki, kaynaklar - bana en iyi çözüm gibi görünüyor çünkü. küresellerin aksine görünmez. terminal değişkenleri ve dosyaları ve hızlıdır. Ayrıca onlar aracılığıyla dizileri ve ayrıca dosyalar aracılığıyla aktarabilirsiniz, ancak yalnızca daha hızlı, çünkü. her şey RAM'de olur. Ayrıca, küresel olanlarda olduğu gibi, terminale değil, pencereye aittirler. Ayrıca, penceredeki tüm aynı göstergeler için tek bir kaynak oluşturabilirsiniz.

Hayır, ChartSaveTemplate kullanmak bana zahmetli görünüyor. Global değişiklikler, şablonlar ve dosyalar kullanmadan tek bir göstergenin tüm örnekleri için ortak bir kaynakla idare etmeye çalışacağım.

 
Nikolai Semko :

Örneğim, yeni TF'nin Biriminin ve eski TF'nin DeUnit'inin belirsiz yürütme dizisi sorununu göstermek için oluşturuldu ve buna bir çözüm olarak değil.

Sadece sorunu çözdün, çözmedin.
Örneğimde, eski TF'nin Deunit'inde, TF değiştirilirken de dahil olmak üzere her durumda nesnenin silinmesi ve yeni nesnenin Biriminde yeniden oluşturulması önemlidir.

Sıra, mantıksal olarak olması gerektiği gibi, önce eski TF'nin Deunit'i, ardından yeni TF'nin Birimi ise. Ardından nesne silinir ve ardından yeniden oluşturulur.

Sıra önce yeni TF'nin Birimi, ardından eski TF'nin De-Unit'i ise, o zaman nesne, onu Birim'de oluşturmaya çalışırken basitçe değiştirilir, çünkü. henüz kaldırılmadı. Ve sonra eski TF'nin Deunit'i tarafından kaldırılır. Hata burada yatıyor.

Bu örneğin amacı buydu - bu dalı okumamış ve bu "özelliği" bilmeyen herhangi bir programcının karşılaşabileceğini göstermek.
Bu örnek bir çözüm olarak görülmedi. Çözümler burada ve burada sunulmaktadır olarak. Sanırım biraz sonra bir çözüm de ekleyeceğim, ancak terminalin ve dosyaların global değişkenlerini kullanmadan ve ayrıca bu çözümün çalışması için, bir pencerede birkaç özdeş gösterge kurulu olsa bile. Böyle bir sorunu çözmeyi denemek ister misiniz? Veya yalnızca, özellikle orada olmadıklarında, başka birinin kodundaki hataları arayabilirsiniz.


Bugün küfür etmek günah, ama gerçekten istiyorum ...

Senin saçmalıklarını sonuna kadar okuyamadım bile.

Bir kez daha tekrarlıyorum SORUNU OLMADIĞI YERDEN BİTMEYİN.

Kodunuzdaki tüm soruların cevabı buradaydı

Alexey Viktorov :

İlkel bir kaybeden örneği kullanmanın amacı nedir?

NEREDEYSE doğru kodun daha iyi bir örneğini kullanın

Mutlaklık beklemiyordum.

İşte bu... Şeytan'dan çık, günaha sürükleme.

 
Alexey Viktorov :

Bugün küfür etmek günah, ama gerçekten istiyorum ...

Senin saçmalıklarını sonuna kadar okuyamadım bile.

Bir kez daha tekrarlıyorum PROBLEMİN OLMADIĞI YERDEN BİTİRMEYİN.

Kodunuzdaki tüm soruların cevabı buradaydı

Mutlaklık beklemiyordum.

İşte bu... Şeytan'dan çık, günaha sürükleme.


Oooh ... Kardeşim, başka bir foruma gitmelisin. Psikoterapistler nerede tavsiye verir? anlıyorum, anlıyorum. Çocuklukta sevgi eksikliği, ilgi ve sevgi istiyorum. anlayışla karşılıyorum. Eğer yaparsan, yardım edeceğim. Kişisel olarak yazın . şaka yapmıyorum

Ama burada yapmamak daha iyi, yoksa zaten insanları çok fazla “eğlendirdik”.

GERÇEKTEN YÜKSELDİ!

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Init() ve DeInit() yürütme sırası

fxsaber , 2017.04.14 13:52

Neredeyse konuyla ilgili küçük bir hayat kesmek
Geliştiricilere herhangi bir iddiada bulunmadan.
Harika bir hile! fırlatıyoruz
 #property indicator_chart_window
#property indicator_plots    0

void OnInit ()
{
   Print ( __FUNCTION__ + ( string ) ChartIndicatorGet ( 0 , 0 , MQLInfoString ( MQL_PROGRAM_NAME )));
}

void OnDeinit ( const int Reason )
{
   Print ( __FUNCTION__ );
}

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double & price[])
{
   return (rates_total);
}

Ve TF'yi değiştir. Deinit olmayacak! Tüm göstergeler fark edilmeden yürütülecek ve kaynakları tüketecektir. Ve sadece istedim

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2016.09.22 16:14

Göstergedeki grafikteki tutamacınızı nasıl bulabilirim? ChartIndicatorName aracılığıyla uygun değildir, çünkü kısa adı döndürür. Ve aynı adla, farklı giriş parametrelerine sahip aynı gösterge zaten çalışıyor olabilir.

Sapınızı bilmek istiyorsanız, ChartIndicatorGet'i kullanmanız gerektiği ortaya çıktı, ancak yukarıdaki örnekte gösterildiği gibi korkunç bir serseri olacak - gösterge kaldırılamaz hale gelecek.

Bir çeşit sığınak.


Bu bile olamaz

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2016.09.23 10:20

INDICATOR_SHORTNAME numaranızı nasıl öğrenebilirsiniz? Hiçbir göstergeGet* işlevi yoktur!

Hangi alt pencerede olduğunu indikatörden bulmak mümkün değildir. Bazı sağlam serseriler.

 
fxsaber :

Hangi alt pencerede olduğunu indikatörden bulmak mümkün değildir. Bazı sağlam serseriler.

https://www.mql5.com/ru/docs/chart_operations/chartwindowfind
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
Операции с графиками / ChartWindowFind - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber :
Harika bir hile! fırlatıyoruz

Ve TF'yi değiştir. Deinit olmayacak! Tüm göstergeler fark edilmeden yürütülecek ve kaynakları tüketecektir. Ve sadece istedim

Sapınızı bilmek istiyorsanız, ChartIndicatorGet'i kullanmanız gerektiği ortaya çıktı, ancak yukarıdaki örnekte gösterildiği gibi korkunç bir serseri olacak - gösterge kaldırılamaz hale gelecek.

Bir çeşit sığınak.

Karşı karşıya benzer. Geliştiriciler, yardımı daha dikkatli okumanızı tavsiye etti, çünkü. bir örnek var:

 //+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart () 
  { 
   //--- количество окон на графике (всегда есть хотя бы одно главное окно) 
   int windows=( int ) ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL ); 
   //--- про ходим по окнам 
   for ( int w= 0 ;w<windows;w++) 
     { 
       //--- сколько индикаторов в данном окне/подокне 
       int total= ChartIndicatorsTotal ( 0 ,w); 
       //--- переберем все индикаторы в окне 

       for ( int i= 0 ;i<total;i++) 
        { 
         //--- получим короткое имя индикатора 
         string name= ChartIndicatorName ( 0 ,w,i); 
         //--- получим хэндл индикатора 
         int handle= ChartIndicatorGet ( 0 ,w,name); 
         //--- выведем в журнал 
         PrintFormat ( "Window=%d,  index=%d,  Name=%s,  handle=%d" ,w,i,name,handle); 
         //--- обязательно освобождаем хендл индикатора, как только он становится ненужным 
         IndicatorRelease (handle); 
        } 
     } 
  }
Ancak daha sonra davranışın "ayarlanacağını" eklediler. Ama görünüşe göre hala düzeltiyorlar.
 
Alexey Kozitsyn :
https://www.mql5.com/ru/docs/chart_operations/chartwindowfind

Teşekkürler, ancak aynı sınırlama var - herhangi bir şekilde bir kısa ad olmadan (onu nasıl bulabilirsiniz?).

 
Alexey Kozitsyn :

Karşı karşıya benzer. Geliştiriciler, yardımı daha dikkatli okumanızı tavsiye etti, çünkü. bir örnek var:

Ancak daha sonra davranışın "ayarlanacağını" eklediler. Ama görünüşe göre hala düzeltiyorlar.

Bu gerçekten yardımcı oldu, teşekkürler!

Ana şey, Deinit'te IndicatorRelease yapmak değil.