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

 
barabashkakvn :
int(round) konusunda hemfikirim. Teşekkür ederim. Açık tip döküm zarar vermez. Açık bir oyuncu kadrosu olmadan çalışmasına rağmen.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty :
int(round) konusunda hemfikirim. Teşekkür ederim. Açık tip döküm zarar vermez. Açık bir oyuncu kadrosu olmadan çalışmasına rağmen.
İşe yaradı ama derleyicinin bu sözleri... Bir şekilde sıkılıyorlar.
 
barabashkakvn :

Herhangi bir hatam yok. En son inşa et.

Teşekkürler, MT5 güncellemesi yardımcı oldu. Hata gitti. yapı 23 Temmuz 2013 tarihli. Bu arada eski yapıda tip döküm uyarıları yoktu, o yüzden fark etmemiştim.

Peki, derleyiciden bu kadar ciddi hataları kim beklerdi.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty :

Teşekkürler, MT5 güncellemesi yardımcı oldu. Hata gitti. yapı 23 Temmuz 2013 tarihli. Bu arada eski yapıda tip döküm uyarıları yoktu, o yüzden fark etmemiştim.

Peki, derleyiciden bu kadar ciddi hataları kim beklerdi.

Önemli olan çalışmak :). Her şey, piçler.
 

Zaman aralığında minimumu bulmak gerekir. Zamanı belirlemek için aşağıdaki kodu derledi:

 datetime ts=st+StartTime* 60 ; // начало временного диапазона в секундах от 01.01.1970
int tss=( int )ts; //преобразование в секунды
Alert ( "tss" ,tss);
datetime tsp=st+StopTime* 60 ; // конец временного диапазона в секундах от 01.01.1970
int tspp=( int )tsp; //преобразование в секунды

Bu aralıkta düşükleri aramak için CopyLow işlevini kullanıyorum:

 double Low[];
CopyLow ( _Symbol , _Period ,tss,tspp,Low); 

Ayrıca, eğer doğru anlarsam, tek boyutlu bir Low[] dizisi alıyorum,

ArrayMinimum kullanarak içinde minimum arıyorum:  

 int start= 0 ;
int count= WHOLE_ARRAY ; 
double min= ArrayMinimum (Low,tss, tspp);  
Alert ( "min=" ,min);

Bugün başlama saatini 1 saat ayarlamaya, 2 saat durdurmaya ve min=-1'i kontrol etmek için Alert'ı aramaya çalıştım.

Soru: Bu görev için, bu görevi çözmek için doğru seçilmiş fonksiyonlar mı yoksa bir yerde bir hata mı var? Minimum fiyatı almanız gerekiyor.

 
               Merhaba . Sevgili tüccarlar, çok para birimli bir Uzman Danışmanda 3 hareketli ortalama için programın bir parçasının doğru tasarımında yardım istiyorum.

Bu soruyu El Kitabında ele almaya çalıştım ama sınıfların kullanımıyla ilgili bir örnek var ve henüz buna hazır değilim.

Henüz sınıfları kullanmadan bir EA yazmak istiyorum. Her biri için 3 hareketli ortalama elde etmek için, gereksiz olan her şeyi değerlendirme dışı bıraktım.

kullanılan para birimi programın aşağıdaki parçasını yazdı:

giriş int Kurtz_Period = 5; // hızlı hareket eden ortalama periyot Kurtz

giriş intMittel_Period=8;

girdi int Uzun_Dönem=13;

 

 

intmaHandle; // Hareketli Ortalama göstergesinin tutamacı

    çift ma_buf[]; // bu MA işlevinden elde edilen hareketli ortalama okumalar için bir arabellek dizisidir

// ve daha sonra ilgili dizilere yeniden yazılacak

tarih saat zaman_tamponu [ ]; // bar açılış zamanlarının temel dizisi

tarihsaat Saat_[6][150]; // bar açılış zamanları dizisi

çift Kurtz[6]][70]; //bu hızlı hareket eden ortalama Kurtz için bir dizidir, buradaki satır numaraları kullanılan para birimlerinin sayıları ile aynıdır ve sütunlar hareketli ortalamaların okumalarıdır

doubleMittel[6]][70]; // bu, orta dönem hareketli ortalama Mittel için bir dizidir

çift Uzun[6]][70]; // bu, uzun dönemli hareketli ortalama Uzun için bir dizidir.

string İsim_sembol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" }; // bu, para birimi adlarından oluşan bir metin dizisidir:

int sayı_instr; // bu, enstrümanın (para birimi) sayısıdır, yalnızca döngüleri para birimlerine göre düzenlemek içindir

 

int OnInit()

{

//-----

//-------

}

geçersiz OnDeinit(const int nedeni)

{

//---

ArrayFree(Zaman_tampon);

ArrayFree ( ma_buf ) ; // serbest bırakılan diziyi sıfırla

//-------

}

 

geçersiz OnTick()

{

//----------------------

ArraySetAsSeries(Time_buf, true); // time_array dizisi için indekslemeyi zaman serilerinde olduğu gibi ayarla

ArraySetAsSeries ( ma_tampon , true ) ; // ma _ buf dizisi için indekslemeyi zaman serilerinde olduğu gibi ayarla

for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // bu, kullanılan tüm para birimleri arasında bir döngüdür

{

int basamak = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)); // bu, para birimi teklifindeki karakter sayısıdır

CopyTime( Name_symbol[nomer_instr], PERIOD_M1,0,160,Time_buf); // her çubuk için geçmiş zaman verilerini ara belleğe kopyalayın

for( i=1; i<=145; i++ ) Zaman[nomer_instr][i]=Zaman_buf[i]; // 1. çubukların açılma zamanı

 

                      //############################################## ############################################

// İlk 3 kayan olanın okumalarını oluşturmak için BLOK: Kurtz , Mittel , Long

manHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );

if( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alert("Gösterge arabellekleri kopyalanırken hata ---PERIOD_M1,Kurtz_Period--- Hareketli Ortalama - hata numarası:",GetLastError());

dönüş;

}

              

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], basamak);

 

               /*

//============================================== ==============

// Zaman serilerinde olduğu gibi çubukların kaymasını ve sayıların normalleştirilmesinin doğruluğunu kontrol etmek için BLOK

// hızlı hareket eden MA-5

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // EA çalışma modunu seçme anahtarı bu, şimdi program hata ayıklama modunda

{

for( i=1; i<=5; i++ )

{

if(i==1) Alert("====================");

if(i==1) Alert(" 1. çubuğun açılış zamanı : Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alert(" çubuk numarası : i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//============================================== ================

*/

 

 

 

 

//------------------------------------------------ -------------------------------------------------- ---------------------------

 

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Gösterge arabellekleri kopyalanırken hata oluştu ===PERIOD_M1, Mittel_Period,=== Hareketli Ortalama - hata numarası:",GetLastError());

dönüş;

}

              

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], basamak);

//------------------------------------------------ -------------------------------------------------- --------------------

 

maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE);

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Gösterge arabellekleri kopyalanırken hata oluştu ===PERIOD_M1, Long_Period,===Hareketli Ortalama - hata numarası:",GetLastError());

dönüş;

}

              

for( i=1; i<=45; i++ ) Uzun[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], basamak);

                           

 

       // ilk 3 kaymanın okumalarının oluşumu için BLOK'un sonu : Kurtz , Mittel , Long

//############################################## ############################################

    

} // kullanılan para birimleri için döngünün sonu

//============================================== ===========

                      Diğer program ifadeleri

//=============================================== ===========

//--------------------------------------------

}// OnTick() fonksiyonunun sonu

//+------------------------------------------- --------------------+

Bu programa göre derleme sırasında herhangi bir hata algılanmaz, ancak Journal'da test yapılırken her hareketli ortalama için bir mesaj görüntülenir.

hata: 4806, "İstenen veri bulunamadı".

Lütfen bana hatamın nerede olduğunu söyle.

Teşekkür ederim.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008 :

Tip döküm ilkesini gerçekten anlamadın mı? Bu kadar basit:

Şimdi açık görünüyor) int st işleneninin datetime tp[]'den daha küçük bir tür olduğu ortaya çıktı.

Yani operasyonda saniyeye dönüşüm yok:

 int st=tp[ 0 ];

Zaman aralığında minimumu bulmaya çalıştım. Doğru yaptığımdan emin değilim. Bir önceki gönderiyi görebiliyor musunuz?

Hafta sonu kontrolleri yapmak için yeni tikler olmadan nasıl Uyarı veya Yorum çağrılabilir?

 
forexman77 :

Zaman aralığında minimumu bulmak gerekir. Zamanı belirlemek için aşağıdaki kodu derledi:

Bu aralıktaki düşükleri aramak için CopyLow işlevini kullanıyorum:

Ayrıca, eğer doğru anlarsam, tek boyutlu bir Low[] dizisi alıyorum,

ArrayMinimum kullanarak içinde minimum arıyorum:  

Bugün başlama saatini 1 saat ayarlamaya, 2 saat durdurmaya ve min=-1'i kontrol etmek için Alert'ı aramaya çalıştım.

Soru: Bu görev için, bu görevi çözmek için doğru seçilmiş fonksiyonlar mı yoksa bir yerde bir hata mı var? Minimum fiyatı almanız gerekiyor.

Dikkatlice okuyoruz:

Geri dönüş değeri

İşlev, dizinin seriliğini dikkate alarak bulunan öğenin dizinini döndürür. Başarısız olduğunda, işlev -1 değerini döndürür.

bu yüzden bunu yapmanız gerekir:

 Alert ( "min=" ,Low[ ArrayMinimum (Low)]);
 

Sadece script ile değil hafta sonları da kontrol edip test etmek gerekiyor.

 
DC2008 :

Sadece script ile değil hafta sonları da kontrol edip test etmek gerekiyor.

Teşekkür ederim!
Neden: