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

 

Merhaba sevgili programcılar. Yardımınıza ihtiyaçım var. EA'da ayın ilk işlem gününde yalnızca bir işlem açılır ve bu birinci, ikinci, üçüncü ve hatta dördüncü gün olabilir. Şu durumda şöyle bir şeyim var: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){sonra anlaşma açıldı} Herhangi bir fonksiyon var mı diye sormak istedim MQL5'te "danışmana bugün ayın ilk işlem günü olduğunu söyler" mi?

 
Kolya32 :

Merhaba sevgili programcılar. Yardımınıza ihtiyaçım var. EA'da ayın ilk işlem gününde yalnızca bir işlem açılır ve bu birinci, ikinci, üçüncü ve hatta dördüncü gün olabilir. Şu durumda şöyle bir şeyim var: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){sonra anlaşma açıldı} Herhangi bir fonksiyon var mı diye sormak istedim MQL5'te "danışmana bugünün ayın ilk işlem günü olduğunu söyler" mi?

İlk işlem gününü belirleyemiyor musunuz veya ayın ilk işlem günü ile o günün tarihini kontrol edemiyor musunuz?

Bu şekilde, mevcut zaman diliminde ayın açılış tarihini daha kesin olarak öğrenebilirsiniz (elbette PERIOD_CURRENT'i herhangi birine, örneğin bir güne değiştirebilirsiniz).

 datetime          StartDt= iTime ( Symbol (), PERIOD_CURRENT , Bars ( Symbol (), PERIOD_CURRENT , iTime ( Symbol (), PERIOD_MN1 , 0 ), iTime ( Symbol (), PERIOD_CURRENT , 0 ))- 1 );

Ancak her bir iTime, Bars işlevini kontrol etmek daha iyidir.

 
Kolya32 :

Merhaba sevgili programcılar. Yardımınıza ihtiyaçım var. EA'da ayın ilk işlem gününde yalnızca bir işlem açılır ve bu birinci, ikinci, üçüncü ve hatta dördüncü gün olabilir. Şu durumda şöyle bir şeyim var: if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){sonra anlaşma açıldı} Herhangi bir fonksiyon var mı diye sormak istedim MQL5'te "danışmana bugün ayın ilk işlem günü olduğunu söyler" mi?

Yeni bir çubuğun açılmasının tartışıldığı yeri bulun ve orada PERIOD_MN1 dönemini değiştirin

Yeni bir barın açılışı ayın ilk işlem günü olacaktır.

 
Aleksey Vyazmikin :

İlk işlem gününü belirleyemiyor musunuz veya ayın ilk işlem günü ile o günün tarihini kontrol edemiyor musunuz?

Ayın ilk işlem gününü belirleyemiyorum. tavsiyen için teşekkürler deneyeceğim

 
Alexey Viktorov :

Yeni bir çubuğun açılmasının tartışıldığı yeri bulun ve orada PERIOD_MN1 dönemini değiştirin

Yeni bir barın açılışı ayın ilk işlem günü olacaktır.

Teşekkür ederim. Bu yönde deneyeceğim)

 

Yazarlar neden yazmak için iki nokta üst üste kullanır? aşağıdaki kod sadece iki nokta üst üste ile doludur. Aynı olmasına rağmen :: Uyku ( 5 ); iki nokta üst üste olmadan yazmak mümkün mü?

 void CProgram::GetSymbols( void )
  {
   m_progress_bar.LabelText( "Get symbols..." );
   m_progress_bar.Update( 1 , 2 );
   :: Sleep ( 5 );
//--- Освободить массив символов
   :: ArrayFree (m_symbols);
//--- Массив элементов строк
   string elements[];
//--- Фильтр названий символов
   if (m_symb_filter.IsPressed())
     {
       string text=m_symb_filter.GetValue();
       if (text!= "" )
        {
         ushort sep=:: StringGetCharacter ( "," , 0 );
         :: StringSplit (text,sep,elements);
         //---
         int elements_total=:: ArraySize (elements);
         for ( int e= 0 ; e<elements_total; e++)
           {
             //--- Чистка по краям
            :: StringTrimLeft (elements[e]);
            :: StringTrimRight (elements[e]);
           }
        }
     }
//--- Собираем массив форекс-символов
   int symbols_total=:: SymbolsTotal ( true );
   for ( int i= 0 ; i<symbols_total; i++)
     {
       //--- Получим имя символа
       string symbol_name=:: SymbolName (i, false );
       //--- Скроем его в окне Обзор рынка
      :: SymbolSelect (symbol_name, false );
       //--- Если не форекс-символ, перейти к следующему
       if (:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_CALC_MODE )!= SYMBOL_CALC_MODE_FOREX )

         if (m_symb_filter.IsPressed())
           {
             bool check= false ;
             int elements_total=:: ArraySize (elements);
             for ( int e= 0 ; e<elements_total; e++)
              {
               //--- Ищем совпадение в названии символа
               if (:: StringFind (symbol_name,elements[e])>- 1 )
                 {
                  check= true ;
                   break ;
                 }
              }
             //--- Перейти к следующему, если не пропускает фильтр
             if (!check)
               continue ;
           }
       //--- Сохраним символ в массив
       int array_size=:: ArraySize (m_symbols);
      :: ArrayResize (m_symbols,array_size+ 1 );
      m_symbols[array_size]=symbol_name;
     }
//--- Если массив пустой, установим текущий символ по умолчанию
   int array_size=:: ArraySize (m_symbols);
   if (array_size< 1 )
     {
      :: ArrayResize (m_symbols,array_size+ 1 );
      m_symbols[array_size]=:: Symbol ();
     }
//--- Покажем в окне Обзор рынка
   int selected_symbols_total=:: ArraySize (m_symbols);
   for ( int i= 0 ; i<selected_symbols_total; i++)
      :: SymbolSelect (m_symbols[i], true );
  }
 
BillionerClub :

Yazarlar neden yazmak için iki nokta üst üste kullanır? aşağıdaki kod sadece iki nokta üst üste ile doludur. Aynı olmasına rağmen :: Uyku ( 5 ); iki nokta üst üste olmadan yazmak mümkün mü?

Bağlam çözümleme işlemi ( :: )

Bir mql5 programındaki her işlevin kendi yürütme bağlamı vardır. Örneğin, Print() sistem işlevi global bağlamda yürütülür. İçe aktarılan işlevler, ilgili içe aktarma bağlamında çağrılır. Sınıfların işlevleri-yöntemleri, karşılık gelen sınıfın bağlamına sahiptir. Bağlam çözümleme işleminin sözdizimi şöyledir:

[Bağlam_adı]::İşlev_adı(parametreler)

Bağlam adı yoksa, bu, genel bağlamın kullanıldığının açık bir göstergesidir. Bağlam çözümleme işleminin yokluğunda, işlev en yakın bağlamda aranır. Yerel bağlamda herhangi bir fonksiyon yoksa arama global bağlamda gerçekleştirilir.

Ayrıca, bağlam çözümleme işlemi, bir sınıfın üye işlevini tanımlamak için kullanılır.

Class_name::Function_name(parameter_description) yazın
{
// fonksiyon gövdesi
}

Program gelecekte farklı yürütme bağlamlarından aynı adı taşıyan birkaç işlevi kullanır veya kullanabilirse, belirsizlik ortaya çıkabilir. Açıkça bir bağlam belirtmeden işlev çağrısı öncelik sırası:

  1. sınıf yöntemleri. Belirtilen ada sahip fonksiyon sınıfta tanımlı değilse, bir sonraki seviyede onu ararız.
  2. MQL5 işlevleri. Dilde böyle bir işlev yoksa, onu bir sonraki seviyede arıyoruz.
  3. Kullanıcı tarafından tanımlanan genel işlevler. Böyle bir fonksiyon yoksa, bir sonraki seviyeyi arıyoruz.
  4. İçe aktarılan işlevler. İşlev, içe aktarılanlar arasında bulunamazsa, derleyici bir hata üretir.

İşlev çağrılarının belirsizliğini gidermek için bağlam çözümleme işlemini kullanarak kapsamı açıkça belirtin.

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49]. Вызов функции с аргументами x1, x2,..., xn Каждый аргумент может представлять собой константу, переменную или выражение соответствующего типа. Передаваемые аргументы разделяются запятыми и должны...
 
Artyom Trishkin :

Bağlam çözümleme işlemi ( :: )

Anladığım kadarıyla, yazar kodun işlenmesini hızlandırıyor. Vay aferin.

 

İşlem geçmişi grafikte çizilir, böyle bir çizimi nasıl devre dışı bırakabilirim?


 
BillionerClub :

İşlem geçmişi grafikte çizilir, böyle bir çizimi nasıl devre dışı bırakabilirim?


Araçlar - Ayarlar - Ticaret - " Talimatları grafikte gerçek zamanlı olarak göster".