MetaTrader 4 Build 529 Beta, Yeni Derleyici ile Yayınlandı - sayfa 18

 
mr_Johns :
ve (editörde olan) MQL4 referansı da buna göre güncellendi mi?


evet bir güncelleme isteği ile. MQL4 için referans kitabı neredeyse 5'ten yırtılmış ve şu anda derleyicinin gerçeklerine pek uymuyor.
 
ALXIMIKS :

Yanlış anladıysam düzeltin.

Göstergede bir kitaplık işlevi kullanıyorum, bu işlevde gösterge dizisinin hesaplanmasında yer alan bazı statik değişkenler bildiriliyor.

Gösterge parametrelerini değiştirmek istersem, göstergenin doğru hesaplanması için (statik değişkenlere bağımlılık açısından),

kütüphane işlevine yeniden başlatmadan sorumlu bir bayrak iletmelidir (statik değişkenleri olan her işlevin giriş parametrelerini genişletmeniz gerekir),

gövdede, statik değişkenlerin değerlerini sıfırlayın ve tüm hesaplamayı tamamlamadan önce bayrağı kaldırmayı unutmayın.

Statik değişkenler bildirildiğinde, bu değişkenlerin değerinin yeniden başlatma sırasında sıfırlanıp sıfırlanmamasından sorumlu olan bazı parametre setlerine sahip olsaydı çok daha kolay olurdu.

Yerel statikler yerine global değişkenler (dış fonksiyonlar) yapın ve ilk çağrıda bunları başlatın.
 
ALXIMIKS :

Statik değişkenler bildirildiğinde, bu değişkenlerin değerinin yeniden başlatma sırasında sıfırlanıp sıfırlanmamasından sorumlu olan bazı parametre setlerine sahip olsaydı çok daha kolay olurdu.

Geliştiricilerin ResetStaticVars() gibi özel bir işlev yapması daha da kolay olacaktır.

// Bu arada, bunu yapmak o kadar kolay değil. yapmazdım. Tüm veri segmentini aptalca sıfırlamak bir şeydir, tüm kullanıcı başlangıç değerlerini doğru şekilde atamak başka bir şeydir. Ancak mücevher.

Vapche (paradigma olarak) programın ömrü boyunca değerlerin korunması çok uygundur. Sadece geriye dönük uyumluluk sorunu ortaya çıktı, peki ..

 

Bunun forumun Rusça konuşan bir parçası olduğunu biliyorum, ama Rusça konuşmakta kötü olduğum için (okuyabiliyor olmama rağmen) kimsenin bunu buraya göndermeyi umursamayacağını umuyorum (çünkü İngilizce kısım bu konular olduğu sürece tamamen aktif görünmüyor). endişeliyim ve birinin bu konuyla ilgili bir gönderi paylaştığını görmediğim için)

Yeni metatrader ile ilgili harici dize parametreleriyle ilgili ciddi bir sorun var. Başlangıçta doğru bir değere sahiptirler, ancak zaman çerçevesi veya sembol değiştirilir değiştirilmez bir dize parametresinin içeriği kaybolur. İşte tam olarak ne olduğunu gösterecek basit bir örnek. Bu sorun, bu tür göstergeler iCustom() çağrısı aracılığıyla kullanıldığında da meydana gelir ve bu, herhangi bir göstergeyi herhangi bir EA veya diğer koddan kullanılamaz hale getirir.

 #property indicator_chart_window

extern string TestString = " whatever value that we want initially set " ;

int OnInit () { return ( 0 ); }
int deinit() { return ( 0 ); }
int start()
{
   Comment (TestString);
   return ( 0 );
}
 
ALXIMIKS :

evet bir güncelleme isteği ile. MQL4 için referans kitabı
neredeyse 5'ten yırtılmış ve şu anda derleyicinin gerçeklerine pek uymuyor .

belki de en yakın planlarda olan bir şey bıraktılar? Ben buna güveniyorum.
 
mr_Johns :
ve (editörde olan) MQL4 referansı da buna göre güncellendi mi?

Evet, uzun süredir güncelleniyor ve günlük olarak aktif olarak destekleniyor.
 

Neden böyle bir tasarıma ihtiyacımız olduğunu anlayamadığım bir şey

 #property icon "\\Files\\button.ico"
 
VOLDEMAR :

Neden böyle bir tasarıma ihtiyacımız olduğunu anlayamadığım bir şey

Expert Advisor'ı başlatırken, "Genel" sekmesinde bir resim olacaktır.
 
hiçbir resmi
 
mladen :

Bunun forumun Rusça konuşan bir parçası olduğunu biliyorum, ama Rusça konuşmakta kötü olduğum için (okuyabiliyor olmama rağmen) kimsenin bunu buraya göndermeyi umursamayacağını umuyorum (çünkü İngilizce kısım bu konular olduğu sürece tamamen aktif görünmüyor). endişeliyim ve birinin bu konuyla ilgili bir gönderi paylaştığını görmediğim için)

Yeni metatrader ile ilgili harici dize parametreleriyle ilgili ciddi bir sorun var. Başlangıçta doğru bir değere sahiptirler, ancak zaman çerçevesi veya sembol değiştirilir değiştirilmez bir dize parametresinin içeriği kaybolur. İşte tam olarak ne olduğunu gösterecek basit bir örnek. Bu sorun, bu tür göstergeler iCustom() çağrısı aracılığıyla kullanıldığında da meydana gelir ve bu, herhangi bir göstergeyi herhangi bir EA veya diğer koddan kullanılamaz hale getirir.

Mladen, Rusça cevap vermek benim için daha kolay, özellikle de özgürce okuduğun için.

İşte bu soruna benim çözümüm. init() kodunda, zaman çerçevesini veya sembolü değiştirirken değerleri geri yüklenmesi gereken global değişkenleri yeniden başlatan ReInit() işlevini ekliyorum:

 //-----------------------------------------------------------------------------
int init(){
   int Error;
   if ( МинНаклонТренда<Zero ) МинНаклонТренда= 0 ;
   if ( МинНаклонТренда-МаксНаклонТренда>Zero ) МаксНаклонТренда=МинНаклонТренда;
   if ( БарОкончания< 1 ) БарОкончания= 1 ;
   if ( МинБазовыйПериод< 1 ) МинБазовыйПериод= 1 ;
   if ( МаксБазовыйПериод<МинБазовыйПериод ) МаксБазовыйПериод=МинБазовыйПериод;
   if ( БарНачала<МинБазовыйПериод+БарОкончания ) БарНачала=МинБазовыйПериод+БарОкончания;
   if ( БарНачала> Bars - 1 ){
       if ( Bars >МинБазовыйПериод+БарОкончания ) БарНачала= Bars - 1 ;
       else Alert ( "Неразрешимая ошибка: история(" + Bars + ")<=активация(" +МинБазовыйПериод
                + ")+окончание(" +БарОкончания+ ")" );
   }
   if ( ТолщинаТрендовой< 1 ) ТолщинаТрендовой= 1 ;
   if ( ТолщинаТрендовой> 5 ) ТолщинаТрендовой= 5 ;
   if ( РазмерИндикатораТиков< 1 ) РазмерИндикатораТиков= 1 ;
   if ( РазмерИндикатораТиков> 5 ) РазмерИндикатораТиков= 5 ;
   if ( СдвигИндикатораТиков< 3 ) СдвигИндикатораТиков= 3 ;
   if ( СдвигИндикатораТиков> 100 ) СдвигИндикатораТиков= 100 ;
   if ( ПоказыватьВсе ) Visibility= 0 ; else Visibility=EMPTY;
   LastBar     =БарОкончания;
   ЦветЛиний[ 0 ]=ЦветПоддержки;
   ЦветЛиний[ 1 ]=ЦветСопротивления;
   ЦветХорды[ 0 ]=ЦветВосходящейХорды;
   ЦветХорды[ 1 ]=ЦветНисходящейХорды;
   Цвет 123 [ 0 ]  =Цвет 123 ВТ;
   Цвет 123 [ 1 ]  =Цвет 123 НТ;
   NewTime     = 0 ;
   ReInit();                                       // Повторная инициализация
   ClearScreen();                                   // Очистить экран
   Error=fVLine( "StartLine" , "Старт" , 0 ,БарНачала, 0 , 0 , 0 , 0 , 0 ,ЦветВертикалей);
   Error=fVLine( "DeadLine" , "Пуск" , 0 ,БарОкончания, 0 , 0 , 0 , 0 , 0 ,ЦветВертикалей);
   DeadLine= TimeCurrent ();
   if ( СтатическийРежим ){
       if ( РежимОтладки ) РежимРаботы= " Отладка " ; else РежимРаботы= " " ;
      РежимРаботы=РежимРаботы+ "Статический режим Пауза " +ПериодИмитацииТиков+ " мс" ;
      МоделироватьДинамику= false ;
       //РежимОтладки=false;
       while ( true ){                               // Бесконечный цикл
         ReInit();                                 // Повторная инициализация
         start();                                   // Имитация тика
         Sleep (ПериодИмитацииТиков);               // Не работает в индикаторах
   }  }
   else {
       if ( МоделироватьДинамику ){
         РежимРаботы= " Режим имитации динамики Размерность " +DoubleToStr( 0.5 *БарНачала*БарНачала, 0 );
         Print ( "      " +Version+РежимРаботы+ " История: " +(БарНачала)+ " баров с " +TimeToStr(Time[БарНачала]));
         LastBar=БарНачала;
         while ( LastBar>БарОкончания ){             // Перебор всех баров истории
            LastBar--;
            start();                               // Имитация тика
         }
         МоделироватьДинамику= false ;
         Print ( "      Режим имитации динамики отключен!" );
   }  }
   if ( РежимОтладки ) РежимРаботы= " Отладка " ; else РежимРаботы= " " ;
   РежимРаботы=РежимРаботы+ "Динамический режим" ;
   Print ( "      " +Version+РежимРаботы+ " История: " +(БарНачала)+ " баров с " +TimeToStr(Time[БарНачала]));
   if ( !ПечататьПредупреждения ) Print ( "Печать предупреждений запрещена!" );
   if ( РежимОтладки ) start();                     // Имитация тика
   return ( 0 );
}
//-----------------------------------------------------------------------------
// Повторная инициализация глобальных переменных и массивов
void ReInit(){
   StartTime[ 0 ]   =Time[БарНачала];
   StartTime[ 1 ]   =Time[БарНачала];
   Groups[ 0 ]      = 0 ;
   Groups[ 1 ]      = 0 ;
   OldMG[ 0 ]       = 0 ;
   OldMG[ 1 ]       = 0 ;
   MainGroup[ 0 ]   = 0 ;
   MainGroup[ 1 ]   = 0 ;
   QualityMax[ 0 ]  = 0 ;
   QualityMax[ 1 ]  = 0 ;
   OldStopLine    = 0 ;
   return ;
}
//-----------------------------------------------------------------------------