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

 
Pineapple88 :

Güzel gün!

Dizilerle uğraşmaya çalışıyorum ve şu soru ortaya çıktı.

CopyRates geçmişten günümüze sayılıyorsa, neden bu örnekte ArraySetAsSeries'i kullanıp bayrağı true olarak ayarlamalısınız?

ArraySetAsSeries işlevinin şimdiki zamandan geçmişe diziyi yinelemek için gerekli olduğunu anlıyorum.

Bu örnekte bu işlevin amacını anlamak istiyorum.

Sonrasında

 ArraySetAsSeries (rates, true ); 

oranlar[0] grafikteki EN DOĞRU ÇUBUK'a karşılık gelecektir. Bu, "şimdiki" ve "gelecek" gibi kafa karıştırıcı terimler olmadan en basit açıklamadır.

 
Vladimir Karputov :

Sonrasında

oranlar[0] grafikteki EN DOĞRU ÇUBUK'a karşılık gelecektir. Bu, "şimdiki" ve "gelecek" gibi kafa karıştırıcı terimler olmadan en basit açıklamadır.

Cevap için teşekkürler!

Ancak ArraySetAsSeries kullanmazsak , CopyRates ayrıca grafikte en sağdaki çubuğa oranları[0] atayacaktır.

Her şey onsuz aynı şekilde çalışıyorsa , ArraySetAsSeries işlevinin neden gerekli olduğunu anlamaya çalışıyorum.

Yoksa sadece kabul edilen kodlama şekli mi?

 
Pineapple88 :

Cevap için teşekkürler!

Ancak ArraySetAsSeries kullanmazsak , CopyRates ayrıca grafikte en sağdaki çubuğa oranları[0] atayacaktır.

Her şey onsuz aynı şekilde çalışıyorsa , ArraySetAsSeries işlevinin neden gerekli olduğunu anlamaya çalışıyorum.

Yoksa sadece kabul edilen kodlama şekli mi?

yanılıyorsunuz, CopyRates , rate[] dizisinin boyutu nedeniyle rate[0] değerini en eski değere ayarlar.
 
Anatolii Zainchkovskii :
yanılıyorsunuz, CopyRates rate[0] dizisinin boyutu nedeniyle oranı[0] en eski değere ayarlar.

Teşekkür ederim!

Şimdi anladım, yanılmışım

 

Güzel gün!

Bir kez daha yardım istiyorum!

MA(20) MA(50)'yi aşağıdan yukarıya doğru kestiğinde "satın al" yazdırılmasını şart koşan bir kod yazdı

 input int SmallMovingAverage = 20 ;
input int BigMovingAverage   = 50 ;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {

   double Ask = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits );
   double Bid = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits );

   string signal = "" ;

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   int SmallMovingAverageDefinition = iMA ( _Symbol , _Period ,SmallMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );
   int BigMovingAverageDefinition   = iMA ( _Symbol , _Period ,BigMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );

   CopyBuffer (SmallMovingAverageDefinition, 0 , 0 , 3 ,SmallMovingAverageArray);
   CopyBuffer (BigMovingAverageDefinition, 0 , 0 , 3 ,BigMovingAverageArray);

   if (BigMovingAverageArray[ 1 ] < SmallMovingAverageArray[ 1 ])
   if (BigMovingAverageArray[ 2 ] > SmallMovingAverageArray[ 2 ])
        {
         Print ( "buy" );
        }
  }

Ve aslında, infaz böyle olur

Dosyalar:
n2b3h1.png  140 kb
 
Pineapple88 :

Güzel gün!

Bir kez daha yardım istiyorum!

MA(20) MA(50)'yi aşağıdan yukarıya doğru kestiğinde "satın al" yazdırılmasını şart koşan bir kod yazdı

Ve aslında, infaz böyle gidiyor

En büyük hata: Her onay işareti üzerinde iki gösterge tutamacı oluşturursunuz. Doğru yap: engelle

   int SmallMovingAverageDefinition = iMA ( _Symbol , _Period ,SmallMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );
   int BigMovingAverageDefinition   = iMA ( _Symbol , _Period ,BigMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );

OnInit'e geçin, tanıtıcı doğrulama ekleyin.


Ayrıca IMA'dan değer alan dizilerin yapması gerekenler

 ArraySetAsSeries (SmallMovingAverageArray, true );  
ArraySetAsSeries (BigMovingAverage, true )
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 

Hızlı yanıt için çok teşekkürler!

ArraySetAsSeries hakkında açıktır.

Göstergenin OnInit'e nasıl aktarılacağını çözeceğim ve tutamacı kontrol edeceğim.

***

 
Pineapple88 :

Hızlı yanıt için çok teşekkürler!

ArraySetAsSeries hakkında açıktır.

Göstergenin OnInit'e nasıl aktarılacağını çözeceğim ve tutamacı kontrol edeceğim.

***

Her şey orijinal

  • belgelerde: iMA
  • MetaEditor'da - Uzman Danışman [veri klasörü]MQL5\Experts\Örnekler\Hareketli Ortalama\Hareketli Ortalama.mq5
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
//|                                                     Demo_iMA.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Перечисление способов создания хэндла                            |  Creation             type=Call_iMA;                ...
 
Vladimir Karputov :

Her şey orijinal

  • belgelerde: iMA
  • MetaEditor'da - Uzman Danışman [veri klasörü]MQL5\Experts\Örnekler\Hareketli Ortalama\Hareketli Ortalama.mq5

Teşekkür ederim, çalışacağım

 

Sabit, her şey çalışıyor gibi görünüyor!

İki MA göstergesi OnInit işlevine taşındı.

Anladığım kadarıyla, OnInit işlevinde yalnızca gösterge tanıtıcısını oluşturuyoruz ve dizilerle yapılan diğer tüm manipülasyonlar OnTick işlevine giriliyor ve her onayda kontrol ediliyor mu?

 int SmallMovingAverageDefinition = 0 ;
int BigMovingAverageDefinition   = 0 ;
input int SmallMovingAverage = 20 ;
input int BigMovingAverage   = 50 ;


int OnInit ()
  {
//---
   SmallMovingAverageDefinition = iMA ( _Symbol , _Period ,SmallMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );
   BigMovingAverageDefinition   = iMA ( _Symbol , _Period ,BigMovingAverage, 0 , MODE_SMA , PRICE_CLOSE );

   if (SmallMovingAverageDefinition== INVALID_HANDLE   || BigMovingAverageDefinition== INVALID_HANDLE )
     {
       Print ( "Ошибка создания хендла" );
     }
//---
   return ( INIT_SUCCEEDED );
  }


void OnDeinit ( const int reason)
  {
//---

  }


void OnTick ()
  {

   double Ask = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_ASK ), _Digits );
   double Bid = NormalizeDouble ( SymbolInfoDouble ( _Symbol , SYMBOL_BID ), _Digits );

   string signal = "" ;

   double SmallMovingAverageArray[], BigMovingAverageArray[];

   ArraySetAsSeries (SmallMovingAverageArray, true );
   ArraySetAsSeries (BigMovingAverageArray, true );

   CopyBuffer (SmallMovingAverageDefinition, 0 , 0 , 3 ,SmallMovingAverageArray);
   CopyBuffer (BigMovingAverageDefinition, 0 , 0 , 3 ,BigMovingAverageArray);

   if (SmallMovingAverageArray[ 1 ] > BigMovingAverageArray[ 1 ])
       if (SmallMovingAverageArray[ 2 ] < BigMovingAverageArray[ 2 ])
        {
         Print ( "buy" );
        }
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...