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

 
hamsteruser :

*dönüş tiki de yok edilmez. Sadece ticaret terminalinin egzozu ile kafam karıştı. Temizlenmemiş bellek hakkında yazar.


İşlev tarafından döndürülen işaretçiyi kullandığınız tüm kodu ve işaretçiyi yok ettiğiniz anı verin. Sana yardım etmek çok zor.

 
Anatolij Povoroznyj :

Merhaba. Lütfen kodu düzeltmeme yardım edin. Danışmanın bir dizi sipariş açmaması, ancak ilk etkinlik için yalnızca bir sipariş açması gerekir.

Şimdi şu şekilde çalışır : CCI 200 satırını yukarıdan aşağıya geçtiğinde, bir BY açılır, o zaman CCI yukarıdan aşağıya 200'ü geçerse, başka bir BY açılır, vb., CCI -200 satırını aşağıdan aşağıya geçene kadar vb. üstte, ardından tüm BAI'ler kapatılır ve HÜCRE açılır.

Sormak istediğim: CCİ yukarıdan aşağıya 200 çizgisini geçtiğinde - BUY açılır (ilk ve tek), CCİ alttan üste -200 çizgisini geçene kadar diğer BAIS açılmamalı, BUY kapanırken ve HÜCRE açılır . (Ayna HÜCRE ve satır -200)


Karşılık gelen türdeki açık siparişleri kontrol etmek için bir işlev ekleyin. Yani emir varsa fonksiyon size doğru dönecek ve bir sonraki emir açılmayacaktır.

 

muhtemelen konu dışı.

MT4'te dilekler

Çok sayıda uyarı kullanıyorum ve bunlar belirli parametrelere göre ayarlanmış.

Her şeyi yeniden yazmak zorunda kalmamak için, uyarının ömrünün uzun olmasını ayarlıyorum ve gerektiğinde, onu yeni bir hedef fiyata "canlandırıyorum".

Uyarı günlüğündeki terminalde sembole veya olaya göre sıralama olmaması nedeniyle, her seferinde doğru uyarıyı aramak tam bir güçlüktür.

"Ticaret" sekmesindeki sıralamanın aynısını yapabilmek güzel olurdu

 
hamsteruser :

İşaretçili bir işlev var:


Ayrıca başka bir işlevi de çağırıyorum:


Ve arkasındaki hafıza nasıl temizlenir?

Silmede(TickReturn); İşlenen istisna hatası aldım.

TickReturn* rt = returntick( period, 1 );

int timeis = rt.curtime;

delete rt;
 
MMM1972 :

muhtemelen konu dışı.

MT4'te dilekler

Çok sayıda uyarı kullanıyorum ve belirli parametrelere göre ayarladım.

Her şeyi yeniden yazmak zorunda kalmamak için, uyarının ömrünün uzun olmasını ayarlıyorum ve gerektiğinde, onu yeni bir hedef fiyata "canlandırıyorum".

Uyarı günlüğündeki terminalde sembole veya olaya göre sıralama olmaması nedeniyle, her seferinde doğru uyarıyı aramak tam bir güçlüktür.

"Ticaret" sekmesindeki sıralamanın aynısını yapabilmek güzel olurdu

MT4 terminali artık geliştirilmemektedir. Sadece bulunan hatalar düzeltildi.

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

İşlev tarafından döndürülen işaretçiyi kullandığınız tüm kodu ve işaretçiyi yok ettiğiniz anı verin. Sana yardım etmek çok zor.

Hafıza gerçekten akıyor.

   class TickReturn

   {

   public :

       int curtime;

       double open;

       double close;

       double high;

       double low;

       double priceask;

       double pricebid;

      

   };



  TickReturn *returntick( int period, int timeposition)

   {

      TickReturn *returntick = new TickReturn();

       MqlRates rates[];

       MqlTick last_tick;

      

       if ( SymbolInfoTick (symbol,last_tick)){}

       else Print ( "SymbolInfoTick() failed, error = " , GetLastError ());

      

       //int timeposition=0;

       ArraySetAsSeries (rates, true );

       ArrayResize (rates, 1 );

       int copied= CopyRates (symbol,period,timeposition, 1 ,rates);

      

      returntick.curtime = rates[ 0 ].time;

      returntick.open = rates[ 0 ].open;

      returntick.close = rates[ 0 ].close;

      returntick.high = rates[ 0 ].high;

      returntick.low = rates[ 0 ].low;

      returntick.priceask = last_tick.ask;

      returntick.pricebid = last_tick.bid;

      

       return (returntick);

}

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Вот здесь пытаюсь уничтожить указатель. }

 
hamsteruser :

Hafıza gerçekten akıyor.


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 hafızanın her yeni tik işaretiyle, daha fazlası 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.

 

1. mql4 araçlarını kullanarak diğer Uzman Danışmanları devre dışı bırakmak mümkün müdür?

2. Verilen ChartId üzerinde çalışan bir Uzman Danışman olup olmadığını kontrol etmek ?

 
Sergey Likho :

1. mql4 araçlarını kullanarak diğer Uzman Danışmanları devre dışı bırakmak mümkün müdür?

2. Verilen ChartId'de çalışan bir Uzman Danışman olup olmadığını kontrol etmek?


Danışman kodu içinde alım satımı yasaklayabilir ve harici bir dosyada geçiş yapabilirsiniz, ardından başka bir danışman herhangi bir danışmanı artık alım satım yapmanın gerekli olmadığı konusunda bilgilendirebilir.

 
Aleksey Vyazmikin :

Danışman kodu içinde alım satımı yasaklayabilir ve harici bir dosyada geçiş yapabilirsiniz, ardından başka bir danışman herhangi bir danışmanı artık alım satım yapmanın gerekli olmadığı konusunda bilgilendirebilir.


Buradaki fikir, duruma göre danışman A'nın danışman B'yi kapatması gerektiğidir.

Neden: