MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 282

 
Алексей Барбашин :

geçersiz OnTick() { int nokta = 15; int zaman = geri dönüş(dönem, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Burada işaretçiyi yok etmeye çalışıyorum. }


Her nasılsa burada tam olarak neyin yok edilebileceği belli değil. Hafıza sızıntılarına şaşmamalı. işaretçi nedir? İşaretçi, oluşturulan dinamik değişkenin depolandığı bellek adresine bir başvurudur. Aslında, bir sınıf değişkenine bir işaretçi elde etme prosedürünü çağırırsınız, prosedürde sınıfın bir nesnesi oluşturulur, belleğe yerleştirilir, ardından işaretçi keneler elde etmek için işleve döndürülür ve .... işlev ne zaman çıkar, yok edilir. İşaretçinin yok edildiği, ancak hafızanın temizlenmediği gerçeğine dikkatinizi çekiyorum! Ve her yeni bellek tik işaretiyle birlikte, daha fazla tüketilir! Kod revizyonunuzda bunu aşmak için, önce stenografiyi kaldırmanız ve işaretçiyi başka bir değişkene koymanız gerekir: TickReturn* temptick = returntick(period, 1);// İşaretçiyi alın ve int timeis = temptick değişkenine koyun . kurtime; // Nesneden istenen değeri işaretçi ile alın ...... delete temptick; // İşaretçiyi yok et ve belleği temizle

İşaretçiyi yok etmeden önce, silme hatasından kaçınmak için doğruluğunu kontrol etmek doğru olacaktır.

Genel olarak, sorunuzda, işaretçilerle ve özellikle sınıfla uğraşmayacağım, çünkü aslında görev çok daha basit ve sınıfın kendisini kullanmaya gerek yok. Gerekli alanlar ile bir yapı oluşturun, bu yapının türü ile bir global değişken bildirin, bu yapıdaki bilgileri her tikte güncellemek için bir fonksiyon yapın ve ondan istenenleri toplayın, çünkü değişken global olacağı için, yapmazsınız. onu işlevler aracılığıyla sürmeniz gerekir ve işaretçiler gerekli olmayacaktır.


Teşekkürler, neden indirgemeye geçtiğimi hatırladım, değişken döngülerde güncellenmiyor (peki, fonksiyonun çağrılmadığı açık) ve her hapşırma için yeni bir tane yapmanız ve sonra onu öldürmeniz gerekiyor. Genel olarak, geri dönüş işaretini anahtara çevirmek daha kolaydır.

 
Vitaly Muzichenko :

Hesap numarasıyla sunucuya bir istek sonrası gönderin

Sunucuda, CSV dosyasındaki tüm satırlarla gelen numarayı kontrol edin ve bir eşleşme varsa, terminale yanıt olarak dosyanın bu satırından bir mesaj gönderin. Terminaldeki sunucudan gelen yanıtı okumak ve grafikte görüntülemek için kalır.

Genel olarak, bu tür şeyleri MySQL'de uygulamak bir dosyadan daha kolaydır.


Cevabın için teşekkürler, Vitaly!

Üç gündür çözmeye çalışıyorum ama şu ana kadar hiçbir şey çıkmadı (hala acemiyim - yolculuğun başında) ...

Biraz daha detaylandırabilir misin? Biraz örnekle...

Cahilliğim için özür dilerim...

 

Ve bir soru daha..

Ray'in seviyenin sonuna kadar (23:59) (beyaz2) mevcut fiyattan gün sonuna kadar bir çizgi çekmesini istedim, ancak günün sonuna kadar (olması gerektiği gibi) zaman çiziyor. ), ancak düzeyde değil (beyaz2), ancak grafiğin sınırına kadar derinlere iner.

Ayrıca, seviyelerin herhangi birini (red1, red2, vb.) içine kaydırıyorum, ama yine de Işın ya sonsuza kadar gidiyor ya da aşağı iniyor. Ve Işın başlangıcının her zaman Yüksek [ 0 ] ile başladığını, yani . yeni bir mumda başlangıç yeni muma geçer (yani fiyatı takip eder) yoksa Işını yalnızca bir kez mi çeker? Seviyeler CSV'den elde edilir. yardım edin lütfen...

 if (уровни==Daily)
        {
         double red1 = d_input[ 0 ];
         double red2 = d_input[ 1 ];
         double blue1 = d_input[ 2 ];
         double blue2 = d_input[ 3 ];
         double white = d_input[ 4 ];
         double signal= d_input[ 5 ];
         double z_1 = d_input[ 6 ];
         double z_2 = d_input[ 7 ];
         double white2 = d_input[ 8 ];
                 
         t0 = дата_уровней + 1 * PeriodSeconds ( PERIOD_M1 );
         t1 = дата_уровней + 24 * PeriodSeconds ( PERIOD_H1 );

         Draw_Level( "red1" , red1, c_day_1, STYLE_SOLID , 2 );  
         Draw_Level( "red2" , red2, c_day_1, STYLE_SOLID , 2 );  
         Draw_Level( "blue1" , blue1, c_day_2, STYLE_SOLID , 2 );  
         Draw_Level( "blue2" , blue2, c_day_2, STYLE_SOLID , 2 );  
         Draw_Level( "white" , white,c_day_3, STYLE_SOLID , 2 );
         Draw_Level( "white2" , white2,c_day_3, STYLE_DOT , 0 );
        
         Draw_Level( "green1" ,z_1, c_day_4, STYLE_SOLID , 2 );
         Draw_Level( "green2" ,z_2,c_day_3, STYLE_DOT , 2 );
               
         string name = "Ray" ;
         int window = 0 , time1 = ( int ) Time [ 0 ], time2 = ( int ) StrToTime (txt_data+ " 23:59" );
           double price1 = High [ 0 ], price2= white2 ;
         
           ObjectCreate (name, OBJ_TREND , window, time1, price1, time2, price2);
           ObjectSet (name, OBJPROP_COLOR , clrAqua );
           ObjectSet (name, OBJPROP_RAY_RIGHT , false );
           ObjectSet (name, OBJPROP_WIDTH , 1 );
           ObjectSet (name, OBJPROP_STYLE , 2 );
              
        
         if (показ_не отработанных)
             if (!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else (Draw_Level( "white" , white,c_day_3, STYLE_SOLID , 1 )); // меняет толщину белой при достижении ценой
                
        }
 
MosheDayan :

Ve bir soru daha..

Ray'in seviyenin sonuna kadar (23:59) (beyaz2) mevcut fiyattan gün sonuna kadar bir çizgi çekmesini istedim, ancak günün sonuna kadar (olması gerektiği gibi) zaman çiziyor. ), ancak düzeyde değil (beyaz2), ancak grafiğin sınırına kadar derinlerde bırakır.

Ayrıca, seviyelerin herhangi birini (red1, red2, vb.) içine kaydırıyorum, ama yine de Işın ya sonsuza kadar gidiyor ya da aşağı iniyor. Seviyeler CSV'den elde edilir. yardım edin lütfen...

Alert veya Print ile white2'nin değerini bulun (kontrol belirtin).
 
STARIJ :
Uyarı veya Yazdır'ı kullanarak beyaz2'nin değerini bulun (kontrol belirtin).
Alert yardımı ile hemen "EURUSD Error FileOpen() yazmak için" yazdığını ve mevcut günün tüm seviyeleri kaybolduğunu... dünün ve tüm geçmişlerin kaldığını... nasıl. ama günün sonunda değil. , ancak bugün, dikey olarak aşağı, dünün beyaz2 seviyesinde durduğu görsel olarak açıktır.
 
MosheDayan :
Alert yardımı ile hemen "EURUSD Error FileOpen() yazmak için" yazdığını ve mevcut günün tüm seviyeleri kaybolduğunu... dünün ve tüm geçmişlerin kaldığını... nasıl. ama günün sonunda değil. , ancak bugün, dikey olarak aşağı, dünün beyaz2 seviyesinde durduğu görsel olarak açıktır.

Dosyaya neden erişmek istiyorsunuz? white2 değerine sahipsiniz ve kullanmadan önce bunu Uyarı ("beyaz2 = ", beyaz2) ile görüntüleyin;

 
STARIJ :

Dosyaya neden erişmek istiyorsunuz? White2 değerine sahipsiniz ve kullanmadan önce Alert("white2 = ", white2); ile görüntüleyin.

Açıklama için teşekkürler.... öyle diyor: white2 = 0.0

ps Ben aptalım... white2 = 0.0, diğer döviz çiftleri için yazıyor, CSV'de bunlar üzerinde seviye yok. Ve CSV'deki EURUSD için seviyeler vardır ve Uyarı onları dün için gösterir (beyaz2 1.1720) bugün için (beyaz2 1.1810)

Işın gerekli olduğu yerden başlar, ancak dünün beyaz2 seviyesine yani 1.1720'ye gider, ancak bugün 1.1810'da olması gerekir ve günün sonunda 23:59'da bırakmaz, ancak bugün görsel olarak görülebilir ki dünün beyaz2 seviyesinde durur, yani 1.1720.

 

chto-anlaşılmaz

işlevi açıkladı

int Aşağıdadır

//>>>>>>>>>>>>>>>>>>>>

{

Uyarı ("Below IsBelow");

Alert("NextTick=",NextTick);

//--------------------


//--------------------

Alert("NextTick=",NextTick);

Alert("Bitti Bitti");

}

//>>>>>>>>>>>>>>>>>>>>>>

işlev gövdesi noktalı virgülden önce bir mesaj aldı {

Soru şu noktalı virgül bekleniyor?

açıkla lütfen...

 
buyanov :

chto-anlaşılmaz

işlevi açıkladı

int Aşağıdadır

//>>>>>>>>>>>>>>>>>>>>

{

Alert("Below IsBelow");

Alert("NextTick=",NextTick);

//--------------------


//--------------------

Alert("NextTick=",NextTick);

Alert("Bitti Bitti");

}

//>>>>>>>>>>>>>>>>>>>>>>

işlev gövdesi noktalı virgülden önce bir mesaj aldı {

Soru şu noktalı virgül bekleniyor?

açıkla lütfen...


geçersiz IsBelow()

 
buyanov :

chto-anlaşılmaz

işlevi açıkladı

int Aşağıdadır

//>>>>>>>>>>>>>>>>>>>>

{

Alert("Below IsBelow");

Alert("NextTick=",NextTick);

//--------------------


//--------------------

Alert("NextTick=",NextTick);

Alert("Bitti Bitti");

}

//>>>>>>>>>>>>>>>>>>>>>>

işlev gövdesi noktalı virgülden önce bir mesaj aldı {

Soru, noktalı virgülün ne beklendiğidir?

açıkla lütfen...

cevap burada
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4