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

 

leonerd # :
Здравствуйте. А как программно узнать символ и таймфрейм активного чарта в клиентском терминале? Т.е. чарта выбранного в настоящее время во вкладке. Есть какая-то функция из MQL5 для этого?

long    ChartGetInteger (
   long   chart_id,           // идентификатор графика
   int    prop_id,           // идентификатор свойства
   int    sub_window= 0        // номер подокна, если требуется
   );

CHART_BRING_TO_TOP

Grafiği diğerlerinin üstünde göster

bool


 string    ChartSymbol (
   long   chart_id= 0        // идентификатор графика
   );
 ENUM_TIMEFRAMES    ChartPeriod (
   long   chart_id= 0        // идентификатор графика
   );

Ayrıca gösterilecek grafik kimliği nasıl tanımlanır?

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

CHART_BRING_TO_TOP

Grafiği diğerlerinin üstünde göster

bool


Ayrıca gösterilecek grafik kimliği nasıl tanımlanır?

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_foreground

Teşekkür ederim. CHART_FOREGROUND muhtemelen en uygunudur. Aktif bir programı zorlamam gerekmiyor, sadece aktif olanı belirlemem gerekiyor. CHART_FOREGROUND kontrolü ile tüm açık çizelgeleri gözden geçirmem gerekeceğini doğru anlıyor muyum?

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

https://www.mql5.com/ru/docs/constants/chartconstants/charts_samples#chart_foreground

Teşekkür ederim. CHART_FOREGROUND muhtemelen en uygunudur. Aktif bir programı zorlamam gerekmiyor, sadece aktif olanı belirlemem gerekiyor. CHART_FOREGROUND kontrolü ile tüm açık çizelgeleri gözden geçirmem gerekeceğini doğru anlıyor muyum?

CHART_FOREGROUND , yukarıdan bir grafiktir

Ve zorlamamak için ChartSetInteger'ı ChartGetInteger ile değiştirmeniz gerekir.

 

Tünaydın.
Söyler misiniz - robot hakkında düşünceler var ve dört farklı durum var - henüz hangisini kaldıracağımı bilmiyorum: Daha sonra farklı zaman dilimleri için optimizasyon yaparken öğrenmek istiyorum.

Yani: dört koşul (f1,f2,f3,f4). Birçok kombinasyon (0,0,1,1) veya (1,0,1,0) vb. olabilir - toplamda 16 kombinasyon. Daha doğrusu, 15 - (0, 0, 0, 0) seçeneği dikkate alınmaz.

Soru: Koddaki 15 kombinasyonun hepsini açıklamamak için programın mantığı nasıl oluşturulur. Bu koşulların her birini ve ardından bu koşulların hangi kombinasyonlarda uygulandığını kontrol etmek için bir işlev vardır - bir şekilde farklı şekilde kontrol edin.

Kısa bir kodla birçok koşulun tanıtılmasına izin veren bir tür danışman gösterirseniz sevinirim.

 
qadexys # :

Tünaydın.
Söyler misiniz - robot hakkında düşünceler var ve dört farklı durum var - henüz hangisini kaldıracağımı bilmiyorum: Daha sonra farklı zaman dilimleri için optimizasyon yaparken öğrenmek istiyorum.

Yani: dört koşul (f1,f2,f3,f4). Birçok kombinasyon (0,0,1,1) veya (1,0,1,0) vb. olabilir - toplamda 16 kombinasyon. Daha doğrusu, 15 - (0, 0, 0, 0) seçeneği dikkate alınmaz.

Soru: Koddaki 15 kombinasyonun hepsini açıklamamak için programın mantığı nasıl oluşturulur. Bu koşulların her birini ve ardından bu koşulların hangi kombinasyonlarda uygulandığını kontrol etmek için bir işlev vardır - bir şekilde farklı şekilde kontrol edin.

Kısa bir kodla birçok koşulun getirilmesine izin veren bir tür danışman gösterirseniz sevinirim.

Bu şekilde mümkündür:

 input bool F1;
input bool F2;
input bool F3;
input bool F4;

   ...
   if (  ( !F1 || f1)
      &&( !F2 || f2)
      &&( !F3 || f3)
      &&( !F4 || f4)
     )
     {
      open_pos();
     }
   ...

Veya bunun gibi bir şey:

 #define MODE_f1     0x1
#define MODE_f2     0x2
#define MODE_f3     0x4
#define MODE_f4     0x8

bool expert::create_strategy( ulong m, int om, int cm)
  {
   magic=m;
   open_mode=om;
   close_mode=cm;
   ...
  }

int OnInit ()
  {
   ...
   my_strat[i].create_strategy(MAGIC, MODE_f1|MODE_f2|MODE_f4,MODE_c2|MODE_c3);
   ...
  }

expert::check_open()
  {
   ...
   if (  ((open_mode & MODE_f1)== 0 || f1)
      &&((open_mode & MODE_f2)== 0 || f2)
      &&((open_mode & MODE_f3)== 0 || f3)
      &&((open_mode & MODE_f4)== 0 || f4)
     )
     {
      open_pos();
     }
   ...
  }
 
Alexey Viktorov # :

CHART_FOREGROUND , yukarıdan bir grafiktir

Ve zorlamamak için ChartSetInteger'ı ChartGetInteger ile değiştirmeniz gerekir.

Teşekkür ederim

 
JRandomTrader # :

Bu şekilde mümkündür:

Veya bunun gibi bir şey:

Ve işte ilk yapı - kodun davranışı (0, 1, 0, 1) koşulları altında ne olacak?

If koşulunun gövdesini açıklar mısınız

 
qadexys # :

Ve işte ilk yapı - kodun davranışı (0, 1, 0, 1) koşulları altında ne olacak?

If koşulunun gövdesini açıklar mısınız

Burada her şey çok basit. F1==yanlış ise, ( !F1 || f1) f1 koşulundan bağımsız olarak doğru olacaktır.

Yani, Fn==true ise fn koşulu kontrol edilir ve Fn==false ise fn koşulu kontrol edilmez.

Buna göre (0, 1, 0, 1) için sadece f2 ve f4 koşulları kontrol edilecek ve her ikisi de doğruysa open_pos() kodu yürütülecektir.

 
JRandomTrader # :

Burada her şey çok basit. F1==yanlış ise, ( !F1 || f1) f1 koşulundan bağımsız olarak doğru olacaktır.

Yani, Fn==true ise fn koşulu kontrol edilir ve Fn==false ise fn koşulu kontrol edilmez.

Buna göre (0, 1, 0, 1) için sadece f2 ve f4 koşulları kontrol edilecek ve her ikisi de doğruysa open_pos() kodu yürütülecektir.

Ancak f1 ve diğerleri sadece 0 veya 1 olmadığında, kısa bir pozisyon için f1 koşulu karşılanırsa, bir tane döndürülür diye düşündüm. Uzunsa - o zaman 2. Koşul hiç karşılanmazsa - 0.

Ancak böyle bir yapıda, bu kadar çeşitli parametre değerlerine güvenmeye ve durumu başka bir şekilde formüle etmeye değmez mi?

 
qadexys # :

Ancak f1 ve diğerleri sadece 0 veya 1 olmadığında, kısa bir pozisyon için f1 koşulu karşılanırsa, bir tane döndürülür diye düşündüm. Uzunsa - o zaman 2. Koşul hiç karşılanmazsa - 0.

Ancak böyle bir yapıda, bu kadar çeşitli parametre değerlerine güvenmeye ve durumu başka bir şekilde formüle etmeye değmez mi?

Uzun ve kısa açma koşullarının setleri ayrı ayrı değerlendirilir.

Bu, örneğin, şöyledir:

 ...
   if (  ( !F1 || f1== 1 )
      &&( !F2 || f2== 1 )
      &&( !F3 || f3== 1 )
      &&( !F4 || f4== 1 )
     )
     {
      open_short();
     }
   else if (  ( !F1 || f1== 2 )
           &&( !F2 || f2== 2 )
           &&( !F3 || f3== 2 )
           &&( !F4 || f4== 2 )
          )
     {
      open_long();
     }
 ...

Gerçek kodumun bir parçasını bile yakacağım, neyse ki, değişkenlerin "savaş" değerleri ve pozisyonları koruma koşulları hakkında bilgi olmadan, herhangi bir teknik bilgi ortaya çıkarmayacak.

Burada aslında 224 seçenekten birini ayarlayabilirsiniz:

   if ( true
      && ((OpenMode & MODE_St1)== 0 || St_Buf[St_Rq- 1 ]> 80 )
      && ((OpenMode & MODE_St2)== 0 || St_Buf2[St_Rq- 1 ]> 80 )
      && ((OpenMode & MODE_BB1)== 0 || last_tick.bid > bb[BandsReq- 1 ].U)
      && ((OpenMode & MODE_BB2)== 0 || last_tick.bid > bb2[BandsReq- 1 ].U)
      && ((OpenMode & MODE_D1)== 0   || rt[RtReq- 1 ].high<rt[RtReq- 2 ].high) 
     )
     {
       switch (OpenMode & (MODE_VR|MODE_OR|MODE_A))
        {
         case 0 :
         case MODE_A :
           res=- 2 ;
           break ;
         case MODE_VR :
           if (( 1 /VR)>VRO)
             res=- 2 ;
           break ;
         case MODE_OR :
           if (( 1 /OR)>VRO)
             res=- 2 ;
           break ;
         case MODE_VR|MODE_A :
           if (( 1 /AVR)>VRO)
             res=- 2 ;
           break ;
         case MODE_OR|MODE_A :
           if (( 1 /AOR)>VRO)
             res=- 2 ;
           break ;
         case MODE_VR|MODE_OR :
           if (( 1 /VR)>VRO && ( 1 /OR)>VRO)
             res=- 2 ;
           break ;
         case MODE_VR|MODE_OR|MODE_A :
           if (( 1 /AVR)>VRO && ( 1 /AOR)>VRO)
             res=- 2 ;
           break ;
        }
Neden: