Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1461

 
Aleksandr Slavskii #:

Uzman Danışman'da emirlerin silinmesi ve Uzman Danışman silindiğinde pozisyonların kapatılması öngörülmüşse,

sonra her şey silinecek ve kapatılacak

Küçük bir ekleme: 2,5 saniye sürerse.

Выполнение функции OnDeinit() ограничивается 2.5 секундами. Если за это время функция не закончила свою работу, то ее выполнение завершается принудительно.
 

Nasıl yapacağımı bulamıyorum.

Fare tekerleği kaydırma olayı gerçekleştiğinde kod yürütülür.

Fare tekerleği bir seferde birkaç tıklama için kaydırılabilir ve dparam = tıklama sayısı ile bir olay değil, dparam = +/-120 ile birkaç olay alırız.

Kod, fare tekerleğini kaydırırken tıklamalar arasında geçen süreden çok daha uzun olan bir süre boyunca yürütülür.

Sonuç olarak, artık kimsenin fare tekerleğini kaydırmadığı ve programın bir süre daha yeniden hesaplamaya devam ettiği ortaya çıkıyor.

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      Print(delta);
     }
  }
//+------------------------------------------------------------------+
15:12:22.820    test (EURUSD,H1)        0.0
15:12:23.821    test (EURUSD,H1)        1.0
15:12:24.811    test (EURUSD,H1)        2.0
15:12:25.823    test (EURUSD,H1)        3.0
15:12:26.817    test (EURUSD,H1)        4.0
15:12:27.814    test (EURUSD,H1)        5.0
Fare tekerleği 15:12:22.820'de kaydırıldı ve ardından program 5 tam saniye boyunca 5 kez daha çalıştırıldı.


Soru: Program kodunun birkaç kez yerine bir kez nasıl çalıştırılacağı.

Yani, tekerlek 5 tıklama için kaydırıldı, delta = dparam / 120 * 5.

 
Aleksandr Slavskii #:

Nasıl yapacağımı bulamıyorum.

Fare tekerleği kaydırma olayı gerçekleştiğinde kod yürütülür.

Fare tekerleği bir seferde birkaç tıklama için kaydırılabilir ve dparam = tıklama sayısı ile bir olay değil, dparam = +/-120 ile birkaç olay alırız.

Kod, fare tekerleğini kaydırırken tıklamalar arasında geçen süreden çok daha uzun olan bir süre boyunca yürütülür.

Sonuç olarak, artık kimsenin fare tekerleğini kaydırmadığı ve programın bir süre daha yeniden hesaplamaya devam ettiği ortaya çıktı.

Fare tekerleği 15:12:22.820'de kaydırıldı ve ardından program 5 saniye boyunca 5 kez daha çalıştırıldı.


Soru: Program kodunun birkaç kez yerine bir kez nasıl çalıştırılacağı.

Yani, tekerlek 5 tıklama için kaydırıldı, delta = dparam / 120 * 5.

Bunu dene.

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   bool flag = true;
   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      if(flag)
       {
        Print(delta);
        flag = false;
       }
     }
  }
//+------------------------------------------------------------------+

Kontrol etmedim, eğer bir şey varsa, bu benim hatam değil...)))))) Bayrakla bir şeyler yapmam gerekecek... ve belki de kodu özel bir fonksiyona koymam ve orada bayrakla uğraşmam gerekecek.

 
Çok teşekkür ederim!
 

03 Haziran'da MT5(https://www.mql5.com/ru/code/44732).... için betiğimi yayınladım. Hala " moderatör tarafından kontrol ediliyor" durumunda. Kontrol için ne kadar bekleyeceğini kim bilebilir?

Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
  • www.mql5.com
Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
 
Alexey Viktorov #:

Bunu dene.

Kontrol etmedim, eğer benim hatam değilse...)))))) Bayrakla bir şekilde oynamam gerekecek... ve belki de kodu özel bir fonksiyona koymam ve bayrakla orada oynamam gerekecek.

Sorun şu ki, özel işlevler yalnızca olay işlevlerinin içinde çalıştırılır ve EA'mda yalnızca iki tane OnInit ve OnChartEvent işlevim var.

Genel olarak, bunu yapmayı başardım, ancak tam olarak as olmasa da, yine de olduğundan daha iyi.

//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   static ulong timeWheel = 0;
   static bool mouse_wheel = false;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      delta += dparam / 120;
      mouse_wheel = true;
      timeWheel = GetMicrosecondCount();
     }

   if(mouse_wheel && GetMicrosecondCount() - timeWheel > 0)
     {
      Print(delta);
      //--- какой то код
      Sleep(1000);
      //---
      delta = 0;
      mouse_wheel = false;
     }
  }
//+------------------------------------------------------------------+
23:48:28.853    test (EURUSD,H1)        1.0
23:48:29.857    test (EURUSD,H1)        1.0
23:48:30.856    test (EURUSD,H1)        4.0
23:48:31.881    test (EURUSD,H1)        2.0
23:48:32.880    test (EURUSD,H1)        4.0
23:48:33.887    test (EURUSD,H1)        11.0
23:48:34.914    test (EURUSD,H1)        15.0
23:48:35.926    test (EURUSD,H1)        7.0
23:48:36.936    test (EURUSD,H1)        9.0
23:48:46.477    test (EURUSD,H1)        6.0
23:48:47.479    test (EURUSD,H1)        -1.0
 
Aleksandr Slavskii #:

Sorun şu ki, özel işlevler yalnızca olay işlevlerinin içinde çalıştırılır ve EA'mda bu türden yalnızca iki işlev OnInit ve OnChartEvent var.

Genel olarak, çok iyi bir fikir olmasa da, yine de olduğundan daha iyi yapmayı başardım.

OnChartEvent'ten özel fonksiyonları da sorunsuz bir şekilde çağırabilirsiniz.

Bayrak global düzeyde bildirilir. OnTick'i yalnızca bayrağı sıfırlamak için eklemek bir sorun değildir ve kodun yürütülmesini geciktirmez.

Bayrak açıksa, özel bir işlev çağrılır. Dahili olarak bayrak kapatılmıştır. OnTick'te bayrak tekrar açılır ve kullanıcı işlevinin bir sonraki yürütülmesini bekler.

Bence bu, yürütme zamanına takılıp kalmaktan daha kolay.

 
Alexey Viktorov #:

OnChartEvent'ten özel işlevleri de çağırabilirsiniz, sorun değil.

Bayrak global düzeyde bildirilir. OnTick'in yalnızca bayrağı sıfırlamak için eklenmesi bir sorun teşkil etmez ve kodun yürütülmesini geciktirmez.

Bayrak açıksa, özel bir işlev çağrılır. Dahili olarak bayrak kapatılmıştır. OnTick'te bayrak tekrar açılır ve kullanıcı işlevinin bir sonraki yürütülmesini bekler.

Bence bu, infaz süresine bağlı kalmaktan daha kolay.

Tam olarak anlamadım, daha doğrusu hiç anlamadım :)

Ve eğer tikler yoksa, OnTick tikler olmadan çalışmaz, ne yapmalıyım ?


Aslında ben zaten OnChartEvent'ten özel fonksiyonları çağırıyorum. Tekerleği kaydırırken son fare tıklamasını izlemek sadece bir sorundu.

Görev, kaydırma sırasında tıklama sayısını sayarken, özel işlevin yürütülmesini tekerlek kaydırmayı durdurma anına kadar geciktirmekti.

Prensip olarak işe yaradı.

 
NotBuffett #:

03 Haziran'da MT5(https://www.mql5.com/ru/code/44732).... için betiğimi yayınladım. Hala " moderatör tarafından kontrol ediliyor" durumunda. Kontrol için ne kadar bekleyeceğini kim bilebilir?

Kodu yeni yayınladım. Doğrulama bir dakikadan az sürdü.

Büyük olasılıkla yayınlarken bir hata yaptınız.

 
Aleksandr Slavskii #:

Kodu az önce yayınladım. Kontrol etmek bir dakikadan az sürdü.

Büyük olasılıkla yayınlarken bir hata yaptınız.

Tekrar yayınlamayı denedim... ve aynı şey:

"5. Test" altında şöyle yazıyor"Test hatasız olarak tamamlandı" diyor ve yayınlamayı teklif ediyor, ancak "Yayınla" düğmesine tıkladığınızda bir hata alıyorsunuz

404. Bu sayfa mevcut değil

"Kodlarım" alt bölümünde artık iki kod var ve her ikisinde de "moderatör tarafından kontrol edildi".

Genel olarak, genel başlıkta bir soru soracağım, belki moderatörler yine de fark eder.