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

 
Vladimir Karputov :

Fare koordinatlarını döndürecek bir MQL5 işlevi yoktur. Ancak bu çözümü kullanabilirsiniz: ekli dosya temelinde, son fare koordinatlarını OnChartEvent'e kaydetmeyi ekleyin ve ardından düğmeye tıkladığınızda bu koordinatları görüntüleyin.

Anladım teşekkürler

 

Olaylarla ilgili bir başka garip sorun.

Girdi parametrelerine göre bir etiket ve bir dikdörtgen oluşturan bir sınıf var.

Dikdörtgenin rengine göre açık / kapalı bir durum vardır.

 //+------------------------------------------------------------------+
//|                                                CreateLabels.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
class CreateKeyStateLabel{
private :
   string label_text;
   int x;
   int y;
   bool _state;
public :
   CreateKeyStateLabel( string label_text, int x, int y){
       this .label_text = label_text;
       this .x = x;
       this .y = y;
      _state = false ;
       ObjectCreate ( 0 ,label_text+ "_icon" , OBJ_RECTANGLE_LABEL , 0 , 1 , 1 );
       ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_XDISTANCE , x);
       ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_YDISTANCE , y);
       ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_XSIZE , 15 );
       ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_YSIZE , 15 );
       ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_BGCOLOR , clrDarkGray );
      
       ObjectCreate ( 0 ,label_text+ "_label" , OBJ_LABEL , 0 , 1 , 1 );
       ObjectSetInteger ( 0 ,label_text+ "_label" , OBJPROP_XDISTANCE , x+ 17 );
       ObjectSetInteger ( 0 ,label_text+ "_label" , OBJPROP_YDISTANCE , y);
       ObjectSetInteger ( 0 ,label_text+ "_label" , OBJPROP_COLOR , clrBlack );
       ObjectSetString ( 0 ,label_text+ "_label" , OBJPROP_TEXT , label_text);
   }
   
   ~CreateKeyStateLabel(){
       ObjectDelete ( 0 ,label_text+ "_icon" );
       ObjectDelete ( 0 ,label_text+ "_label" );
   }
   
   void invert(){
       if (_state){
         _state = false ;
         ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_BGCOLOR , clrDarkGray );
      } else {
         _state = true ;
         ObjectSetInteger ( 0 ,label_text+ "_icon" , OBJPROP_BGCOLOR , clrDarkGreen );
      }
   }
   
   bool state(){
       return _state;
   }
   
};

Sonra bu nesneleri oluşturuyorum, durumu değiştirecek bir tuşa basıldığında bir olay yapıyorum.
İlk birkaç kez çalışıyor - ve sonra sadece tuş vuruşlarını görmezden geliyor, neyi yanlış yapıyorum?


 //+------------------------------------------------------------------+
//|                                                       Events.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#include <CreateLabels.mqh>
#define X_DIST 10
#define Y_DIST 20

CreateKeyStateLabel *tilda = new CreateKeyStateLabel( "Tilda" ,X_DIST,Y_DIST);


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   delete tilda;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long    &lparam, const double &dparam, const string &sparam){
   switch (id){
       case CHARTEVENT_KEYDOWN :{
         if (lparam == "38" ) tilda.invert();
         break ;
      }
   }
}

Her seferinde çalıştığını gördüm, düğmeye her basışta bunu nasıl netleştirebilirim?

 
Vladimir Karputov :

Fare koordinatlarını döndürecek bir MQL5 işlevi yoktur. Ancak bu çözümü kullanabilirsiniz: ekli dosyaya dayanarak, son fare koordinatlarını OnChartEvent'e kaydetmeyi ekleyin ve ardından düğmeye tıkladığınızda bu koordinatları görüntüleyin.

Ve bu yüzden

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

   if (id== CHARTEVENT_MOUSE_MOVE )
     {
       ChartXYToTimePrice ( 0 , int (lparam), int (dparam),window,time,price);
       Comment ( "price = " , DoubleToString (price, 5 ), "   time = " , TimeToString (time, TIME_DATE | TIME_MINUTES ));
     }

//---------------------------------------
 
Kene geçmişi, MT-5'teki test cihazı için zaten mevcuttur ve yüksek mumlar hala teklif fiyatında değerlendirilir. Satış fiyatından yüksek saymak ve böyle mumlar çekmek MT-4'e göre iyi bir avantaj olurdu. 5 dakikada bile, yayılma yaklaşık 1. ATP, hatta 1.5'in tamamı! Ve danışmanlar kodundaki tüm yükseklere bir yayılma eklemek ne acı! Bu bir iyileştirme önerisidir, ancak soru şu: MqlRates yapısında yüksek bir değişken var. Hangi fiyata doldurulur? Bana öyle geliyor ki, kılavuzda yazıldığı gibi, hiç de maksimum değil. Belki biri biliyordur, yoksa araştırma danışmanı yazamayacak kadar tembelim.
 

Sevgili, nedir ve nerede bir hata aranır?

 2019.05 . 12 11 : 01 : 09.743 Core 6   genetic pass ( 52 , 487 ) tested with error "some error after pass finished" in 0 : 00 : 00.005
TesterStop() ile ilgili olabilir mi? Hayır olmasına rağmen, hata geçişten sonra...
 

Merhaba.
Söyleyin lütfen, MQL5'te Telegram'da (bot'a) bir bildirimle üçüncü taraf hizmetleri kullanmadan, ancak yalnızca MQL5+Telegram API'sini kullanarak bir gösterge yazmak mümkün müdür?

Yoksa bunun için bir Uzman Danışman yazmanız mı gerekiyor? Soruyorum çünkü bir şekilde MT4 için benzer bir şey yazmaya çalıştım, bir şekilde sadece bir danışmanla çıktı.


Ve ikinci soru.
İhtiyacım olan belirli bir modeli işaret edecek bir gösterge/EA yazmak ne kadar zor?
Örneğin, iki düşüş mumu ve ardından üç yükseliş mumu?

Ben şöyle anlıyorum (kabaca):
Kapanış fiyatı <açılış fiyatı = düşüş mumu
Kapanış fiyatı > açılış fiyatları = yükseliş mumu

Kendi başıma işe yaramazsa, muhtemelen para için sipariş edeceğim))

İlginiz için teşekkür ederim!

 

Kodu eski bir üçüncü taraf programından bir şekilde derlemek mümkün mü?

Java'da robot yapıcısı gibi bir şey yaratıyorum ve kullanıcının kaynak koduna erişmesini değil, derlenmiş dosyayı hemen almasını istiyorum.

 
Roman Sharanov :

Kodu eski bir üçüncü taraf programından bir şekilde derlemek mümkün mü?

Java'da robot yapıcısı gibi bir şey yaratıyorum ve kullanıcının kaynak koduna erişmesini değil, derlenmiş dosyayı hemen almasını istiyorum.

Evet, MetaEditor yardımına bakın: Algoritmik ticarete hoş geldiniz / Diğer IDE'lerle entegrasyon / MQL programlarını diğer geliştirme ortamlarında derlemek
 

Belki biri bilir? Excel tablolarından MQL5 komut dosyalarına veri aktarımı üzerinde çalışıyorum. Her şey yolunda görünüyor, ancak EXcel'de nokta yerine virgül içeren ondalık verilerde.

Soru: MQL betiğinde, Excel'den virgülle birlikte veri alıp bir noktaya dönüştürmek için bir mekanizma var mı, yoksa Excel'in kendisinde bir noktaya değiştirmek daha mı iyi?

İhtiyacım olan hücrelerden Excel'den noktasal veri almak için bir komut dosyasını nasıl kullanabilirim, aksi takdirde bunları bir sütunda hizalamam, makro yazmam vb. gerekir? Veriler arasında hem tarihler hem de tam sayılar ve ondalık sayılar vardır. Bu Excel ne kadar rahatsız edici, yoksa henüz alışamadım mı ...

Herhangi bir tavsiye için minnettar olurum...

 
Vladimir M. :

Belki biri bilir? Excel tablolarından MQL5 komut dosyalarına veri aktarımı üzerinde çalışıyorum. Her şey yolunda görünüyor, ancak EXcel'de nokta yerine virgül içeren ondalık verilerde.

Soru: MQL betiğinde, Excel'den virgülle birlikte veri alıp bir noktaya dönüştürmek için bir mekanizma var mı, yoksa Excel'in kendisinde bir noktaya değiştirmek daha mı iyi?

İhtiyacım olan hücrelerden Excel'den noktasal veri almak için bir komut dosyasını nasıl kullanabilirim, aksi takdirde bunları bir sütunda hizalamam, makro yazmam vb. gerekir? Veriler arasında hem tarihler hem de tam sayılar ve ondalık sayılar vardır. Bu Excel ne kadar rahatsız edici, yoksa henüz alışamadım mı ...

Herhangi bir tavsiye için minnettar olurum...

MQL, bir dizgedeki bir karakteri değiştirme işlevine sahiptir. dize olarak oku

 int    StringReplace (
   string &         str,               // строка, в которой будет осуществляться замена
   const string     find,             // искомая подстрока НАЙТИ ЗАПЯТУЮ ","
   const string     replacement       // подстрока, которая будет вставлена в найденные места ЗАМЕНИТЬ НА ТОЧКУ "."
   );

ve çift türe dönüştürün

Документация по MQL5: Строковые функции / StringReplace
Документация по MQL5: Строковые функции / StringReplace
  • www.mql5.com
Строковые функции / StringReplace - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Neden: