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

 
Seric29 :

Templ(T1) kaydetmek için her işlevden önce anlamına gelir ve bir değişkeni veya gerekli argümanı kabul edecek mi? Ve neden templ(T) bildirildi ve templ(T1) çağrıldı, her işlevden önce bir sayı eklemem ( templ(T1) templ(T2) templ(T3) ) veya her yere templ(T1) yazmam gerekir mi? Ve eğer birkaç parametre şablonun içine tıkıştırılırsa < typename T> , o zaman nasıl olacak, bu şablon gibi< typename T, typename P, typename Q > - templ(T,P,Q).

Evet, giriş yine de normal bir işlevi bir işlev şablonuna dönüştürmeniz gereken her işlevden önce yapılır. Sadece bu giriş şimdi fark edilir şekilde daha kısa.
T1, adı (a) ile gösterilen bir değişkende saklanan bir tür veriyi ifade eden bir isimdir. Numara eklemek gerekli değildir. Her yerde aynı adı kullanabilirsiniz, hatta aynı T'yi numarasız kullanabilirsiniz.
templ çağrılmaz, ancak otomatik olarak #define içinde kendisine yazılanla değiştirilir. Bu, bir metnin diğeriyle basit bir şekilde değiştirilmesidir, ancak giriş parametrelerini tıpkı işlevler gibi parantez içinde yazabilirsiniz.

 #define templ(T) template < typename T> // один входной параметр именуемый буквой "T" т. е. "T" это просто имя.

templ(T1) T1 Funct(T1 a) { return a;} // функция вернёт тот же тип, что и будет передан при вызове это функции

derleme zamanında, templ(T1) ifadesi şablon<typename T1> ile değiştirilecek ve bu

 template < typename T1>
T1 Funct(T1 a) { return a;}

Birden fazla parametre için, evet, nasıl tanımlayacağınızı doğru tahmin ettiniz.

Макроподстановка (#define) - Препроцессор - Основы языка - Справочник MQL4
Макроподстановка (#define) - Препроцессор - Основы языка - Справочник MQL4
  • docs.mql4.com
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
 
Ilya Prozumentov :

Açık, bilgi için teşekkürler, zaten denedim, uygun.

 
Vitaly Muzichenko :

Anladığım kadarıyla, bir anahtar aracılığıyla bir seçim yapmanız ve oraya isimleri girmeniz gerekiyor.

Kodunuz bir int değeri yazdırıyor, ancak bir dize seçmeniz gerekiyor


Göstergenin adını bir dizi dize sabiti aracılığıyla seçerdim, yani. benim örneğim, kullanıcı tarafından seçildiğinde size kayıt numarasını verir ve bu sayı, göstergelerin metin adlarını saklayacağınız dizi dizisinin eleman numarası (indeks) olabilir.

maalesef terminal yok kodda örnek göstermeyeceğim ama sanırım fikri açıkladım

not:

 #property strict
#property show_inputs
enum Eind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4   // Indicator 4
};

input Eind param = ind_1;
const string IndicatorName[] = { "Moving Average" , "ADX" , "ZigZag" , "Fractals" };
//+------------------------------------------------------------------+
void OnStart ()
  {
   Alert ( "Выбран :" ,param, " . Удаляю индикатор : " ,IndicatorName[param]);
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

Göstergenin adını bir dizi dize sabiti aracılığıyla seçerdim, yani. benim örneğim, kullanıcı tarafından seçildiğinde size kayıt numarasını verir ve bu sayı, göstergelerin metin adlarını saklayacağınız dizi dizisinin eleman numarası (indeks) olabilir.

maalesef terminal yok kodda örnek göstermeyeceğim ama sanırım fikri açıkladım

not:

Teşekkürler, bunu yaptım, oldukça uygun.

Ama son versiyon, sadece bir bomba. Terminalde açık en az 20 çizelge olduğu için bunu uzun zamandır kaçırdım.

Delete Indicators
Delete Indicators
  • www.mql5.com
Удаляет выбранные индикаторы со всех графиков
 
Herkese selam. Bana yardım et lütfen. EA'nın işlem kapandıktan sonra n saat beklemesini istiyorum. Bu özelliği de değiştirebilirsiniz. Mode_Trades'i Mode_History olarak değiştirmek doğru olur mu? teşekkürler
 int BarsAfterOrderBuy()
{
datetime t= 0 ; int i;
for (i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--)
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderType ()== OP_BUY && OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
{ if (t< OrderOpenTime ())t= OrderOpenTime ();}
return ( iBarShift ( Symbol (), 0 ,t, true ));
}
 
Carcass77 :
Herkese selam. Bana yardım et lütfen. EA'nın işlem kapandıktan sonra n saat beklemesini istiyorum. Bu özelliği de değiştirebilirsiniz. Mode_Trades'i Mode_History olarak değiştirmek doğru olur mu? teşekkürler

MODE_HISTORY - elbette gerekli, ancak bir şey daha var: "kapattıktan sonra" metninde ve Sipariş Açma Süresi kodunda

Ve çubuklara geçmeyin, t zamanını geri döndürün ve ardından şöyle bir şey kullanın:

 if ( TimeCurrent ()>t+n* 3600 ) {можно открывать}
 
Igor Zakharov :

MODE_HISTORY - elbette gerekli, ancak bir şey daha var: "kapattıktan sonra" metninde ve Sipariş Açma Süresi kodunda

Ve çubuklara geçmeyin, t zamanını döndürün ve sonra şöyle bir şey kullanın:


Mode_History'de düzelttim, bu yüzden baykuş ilk siparişi açmıyor. Çözümü detaylandırabilir misiniz? teşekkürler

 
Carcass77 :

Mode_History'de düzelttim, bu yüzden baykuş ilk siparişi açmıyor. Çözümü detaylandırabilir misiniz? teşekkürler

Buna bir bak.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos( string sy= "" , int op=- 1 , int mn=- 1 ) 
  {
   datetime t= 0 ;
   int       i,k= OrdersHistoryTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) 
        {
         if ( OrderSymbol ()==sy || sy== "" ) 
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) 
              {
               if (op< 0 || OrderType ()==op) 
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn) 
                    {
                     if (t< OrderCloseTime ()) t= OrderCloseTime ();
                    }
                 }
              }
           }
        }
     }
   return ( TimeCurrent ()-t);
  }
 
Alekseu Fedotov :

Buna bir bak.

Ve ilk sipariş nasıl çözülür?

 
Carcass77 :

Ve ilk sipariş nasıl çözülür?

Lütfen işlevin biraz değiştiğini unutmayın.

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
// здесь пофиг какой символ и какая позиция ... последняя позиция и все
   int ClosePos = SecondsAfterCloseLastPos();
  
  
// здесь по тек. символу и пофиг какая позиция 
//  int ClosePos = SecondsAfterCloseLastPos(Symbol());  

// здесь по тек. символу и OP_BUY позиция 
//  int ClosePos = SecondsAfterCloseLastPos(Symbol(),OP_BUY); 

// здесь по тек. символу , OP_BUY позиция , и магик  5 
//  int ClosePos = SecondsAfterCloseLastPos(Symbol(),OP_BUY,5);

// продажи,  вместо OP_BUY прописываем  OP_SELL.

   if (ClosePos > 3600 || ClosePos == 0 )  { /*можно открывать*/ }
   
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int SecondsAfterCloseLastPos( string sy= "" , int op=- 1 , int mn=- 1 ) 
  {
   datetime t= 0 ;
   int       i,k= OrdersHistoryTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) 
        {
         if ( OrderSymbol ()==sy || sy== "" ) 
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) 
              {
               if (op< 0 || OrderType ()==op) 
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn) 
                    {
                     if (t< OrderCloseTime ()) t= OrderCloseTime ();
                    }
                 }
              }
           }
        }
     }
   int CloseTime; 
     if (t== 0 )
        CloseTime= 0 ;
     else 
        CloseTime = int ( TimeCurrent ()-t);
      
   return (CloseTime);
  }
//+----------------------------------------------------------------------------+