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

 
ryzhak.vladimir :

Merhaba! 01/01/2012 ile 31/12/2012 arasındaki dönem için EURUSD çiftinin 30 dakikalık çubukları için bir dizi kapanış fiyatı vardır. CopyClose işlevini kullanarak alıyorum. AMA CopyClose[0], grafiği açarsanız, terminalin kendisinde 31/12/2012 tarihindeki son çubuğun kapanış fiyatına eşit değildir. Bana neyi yanlış yaptığımı söyle. Neden CopyClose ve aslında grafikteki fiyatlar eşleşmiyor?

Close_buf[0] öğesini çağırmadan önce ArraySetAsSeries kullanmalısınız. Danışman/komut dosyası/gösterge kodunun çalışması süresince bir kez.

 ArraySetAsSeries (Close_buf, true );
 
fyords :

Close_buf[0] öğesini çağırmadan önce ArraySetAsSeries kullanmalısınız. Danışman/komut dosyası/gösterge kodunun çalışması süresince bir kez.

Hala eşleşmiyor, 1.31964 yerine 1.32308 çıktı (2012'deki son çubuğun kapanış fiyatı)

 //+------------------------------------------------------------------+
//|                                                    simpleBet.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
double Close_buf[]; //динамический массив для хранения значений закрытия баров
string my_symbol = "EURUSD" ; //валютная пара
ENUM_TIMEFRAMES my_timeframe = PERIOD_M30 ; //таймфрейм
datetime testTimeStart = D'2012.01.01' ;
datetime testTimeEnd = D'2012.12.31' ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---    
     CopyClose (my_symbol,my_timeframe,testTimeStart,testTimeEnd,Close_buf); 
     ArraySetAsSeries (Close_buf, true );
     Print (Close_buf[ 0 ]);
  }
//+------------------------------------------------------------------+
 
ryzhak.vladimir :

Hala eşleşmiyor, 1.31964 yerine 1.32308 çıktı (2012'deki son çubuğun kapanış fiyatı)

sen belirt
 datetime testTimeEnd = D'2012.12.31' ;
Ve belirtirseniz
 datetime testTimeEnd = D'2012.12.31 23:59:59' ;
 
Evet işe yaradı, teşekkürler! Fiyatların neden sadece saniyelere kadar kesin tarih belirtilirken eşleştiği henüz netlik kazanmasa da
 
ryzhak.vladimir :
Evet işe yaradı, teşekkürler! Fiyatların neden sadece saniyelere kadar kesin tarih belirtilirken eşleştiği henüz netlik kazanmasa da

Muhtemelen 2012.12.31 varsayılan olarak 2012.12.31 00:00:00 olduğundan, 2012.12.31 24:00:00 değil

 
CopyBuffer işleviyle ilgili belgelerden alıntı: " Kopyalanan verinin öğeleri (buffer_num indeksli gösterge arabelleği ), şimdiki zamandan geçmişe başlangıç konumundan sayılır, yani, 0'a eşit başlangıç konumu, geçerli çubuk anlamına gelir ( mevcut çubuğun gösterge değeri). " Pratikte, mevcut çubuğun 0. elemanda olması için ArraySetAsSeries(Close_buf,true) kullanmanız gerekir. Belgeler, varsayılan olarak kopyalandığını söylese de, son çubuk 0. öğede olacak şekilde kopyalanır. Neden böyle bir fark?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir : CopyBuffer işleviyle ilgili belgelerden alıntı: " Kopyalanan verinin öğeleri (buffer_num indeksli gösterge arabelleği ), şimdiki zamandan geçmişe başlangıç konumundan sayılır, yani 0'a eşit başlangıç konumu, current bar (geçerli bar için gösterge değeri) " Ama pratikte, mevcut çubuğun 0. elemanda olması için ArraySetAsSeries(Close_buf,true) kullanmanız gerekir. Belgeler, varsayılan olarak kopyalandığını söylese de, son çubuk 0. öğede olacak şekilde kopyalanır. Neden böyle bir fark?
Ve resme daha yakından bakın. 'start_pos' öğesi nereye kopyalanır?
 
Psikolojik yön sorunu ile karşı karşıya.
Bir trend danışmanı yazdım ve başarılı görünüyor. Şimdi düz bir Uzman Danışman yazıyorum ve... 5. kez bu Uzman Danışman, sanki tek bir algoritmaya kafayı takmış gibi bir öncekine indirgeniyor. Her şey "yeni" gibi başlıyor, ancak algoritmanın yapılandırılmasından sonra, mümkün olan her şekilde ilk (başarılı) olana uyum sağlamaya başlayan bir Uzman Danışman yazmaya başlıyorum.

Herhangi biri böyle bir çöple karşılaştıysa - bana sadece dairedeki depozitoyu düşüren can sıkıcı algoritmadan nasıl "kurtulacağımı" söyleyin.
 
Lester : Böyle bir çöple karşılaşan varsa - bana sadece dairedeki depozitoyu düşüren sinir bozucu algoritmadan nasıl "kurtulacağımı" söyle.
Ben böyle bir çöpe rastlamadım ama genel bir dikkat değişikliği için diğer insanların algoritmalarını incelemeye çalışın.
 
Lester :

Psikolojik yön sorunu ile karşı karşıya.
Bir trend danışmanı yazdım ve başarılı görünüyor. Şimdi düz bir Uzman Danışman yazıyorum ve... 5. kez bu Uzman Danışman, sanki tek bir algoritmaya kafayı takmış gibi bir öncekine indirgeniyor. Her şey "yeni" gibi başlıyor, ancak algoritmanın yapılandırılmasından sonra, mümkün olan her şekilde ilk (başarılı) olana uyum sağlamaya başlayan bir Uzman Danışman yazmaya başlıyorum.

Herhangi biri böyle bir çöple karşılaştıysa - bana sadece dairedeki depozitoyu düşüren can sıkıcı algoritmadan nasıl "kurtulacağımı" söyleyin.
Psikolojik bir probleminiz yok, ancak sistemik bir probleminiz var - bir trend ile bir daire arasındaki farkın kesin işaretlerinin olmaması. Bu ana karar verdiğinizde, başaracaksınız.