[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 426

 
ikatsko >> :

Merhaba! Tarihlere göre değil, son çubukların sayısına göre belirlenen bir süre için strateji test cihazında optimizasyon (veya test) nasıl organize edilir? Uzman Danışman'da belirli sayıda çubukla belirlenen ve TimeCurrent()'e dayalı bir zaman sınırlayıcısı ayarlama girişimi hiçbir şey vermedi.


Rağmen:

datetimeTimeCurrent ( )

1 Ocak 1970 00:00'dan bu yana geçen saniye sayısı olarak bilinen son sunucu saatini (son alıntı varış zamanı) döndürür.

Not: Test sırasında, bilinen son sunucu zamanı simüle edilir


Optimize edicinin çalıştığı zamanın yalnızca test penceresinde "Kullanım tarihi:" ifadesiyle ayarlandığı ortaya çıktı . Belki birisi bir numara biliyor?

İşlem süresini bir gün içinde mi belirlemek istiyorsunuz?

eğer öyleyse

 //begin
extern string      Торгуемый_диапазон   =    "В часах" ;
extern int         начало = 8 ;
extern int         окончание = 20 ;


//B start

if ( Hour ( ) > = начало & & Hour ( ) < окончание ) //если час больше или = 8, а так же если час меньше 20, торгуем
{
//условия
}
 
costy_ >> :

İşlem süresini bir gün içinde mi belirlemek istiyorsunuz?

eğer öyleyse


EA'nın parametrelerini kısa zaman dilimlerinde, şimdiki zamana daha yakın küçük bir zaman aralığında optimize etmek istiyorum. Strateji test cihazı, optimizasyon sürecinin başladığı ve bittiği tarihi ayarlamanıza olanak tanır. TF 15 dakikaya eşit olduğunda (örneğin), günde 96 çubuk olacaktır (ve bu, test cihazını ayarlamanıza izin veren minimum değerdir). Ve bu benim için çok fazla. TF'yi son 2 saat için optimize etmek istiyorum, yani. örneğin 8 barda.


Aşağıdaki parçayı EA'ya ekledim:

harici intHistory=100; // EA'nın üzerinde çalıştığı çubuklardaki geçmiş
StartDateTime=TimeCurrent()-History*Period()*60;
if(TimeCurrent()<StartDateTime) // Başlangıç zamanı gelmedi
{
Alert("Başlangıç zamanı gelmedi. Expert Advisor çalışmıyor.": ",Symb,", ",Period());
dönüş; // başlangıçtan çık()

}

Ve strateji test cihazındaki EA'nın StartDateTime'dan daha erken çalışmayacağını varsaydım. Ama hayır!

 
ikatsko >> :

EA'nın parametrelerini kısa zaman dilimlerinde, şimdiki zamana daha yakın küçük bir zaman aralığında optimize etmek istiyorum. Strateji test cihazı, optimizasyon sürecinin başladığı ve bittiği tarihi ayarlamanıza olanak tanır. TF 15 dakikaya eşit olduğunda (örneğin), günde 96 çubuk olacaktır (ve bu, test cihazını ayarlamanıza izin veren minimum değerdir). Ve bu benim için çok fazla. TF'yi son 2 saat için optimize etmek istiyorum, yani. örneğin 8 barda.

 //begin
extern string      Торгуемый_диапазон   =    "В часах" ;
extern int         начало = 22 ;
extern int         окончание = 0 ;


//B start

if ( Hour ( ) > = начало & & Hour ( ) < окончание ) //на интервале меж 22:00 - 00:00
{
//условия
}

int Saat ( )
Programın başlatıldığı andaki bilinen son sunucu saatinin geçerli saatini (0,1,2,..23) döndürür (programın yürütülmesi sırasında bu değer değişmez).

Not: Test sırasında, bilinen son sunucu zamanı simüle edilir.


Test cihazı TF M1'i destekler, çubuklara takılmayın, zamana takılın, belki buna da ihtiyaç vardır .

 
costy_ >> :

int Saat ( )
Programın başlatıldığı andaki bilinen son sunucu saatinin geçerli saatini (0,1,2,..23) döndürür (programın yürütülmesi sırasında bu değer değişmez).

Not: Test sırasında, bilinen son sunucu zamanı simüle edilir.


Test cihazı TF M1'i destekler, çubuklara takılmayın, zamana takılın, belki buna da ihtiyaç vardır .

İfade: test ederken, sunucunun bilinen son zamanı simüle edilir ve TimeCurrent () içinde bulunur, ancak çalışmaz. Seçeneğiniz iyi, ancak çalışıp çalışmadığını kontrol etmeniz mi gerekiyor? İkincisi, TF'yi değiştirirken, "başlangıç" ve "bitiş" sayılarını yeterince algılayabilmek için bir kod parçasını değiştirmek veya hangi TF'nin çalıştığını tanıması gerekir. Üçüncüsü, bence baro sayısını geri ayarlamak çok daha uygun - bence bu "başlangıcı" manuel olarak hesaplamaya gerek yok. MQL'de barlarla anlaşma yapıyoruz! Ve son olarak: Verdiğim kod neden kötü? (Strateji test cihazında çalışmayan bir şey dışında. Yani benim sorum bu)

 
costy_ >> :

int Saat ( )
Programın başlatıldığı andaki bilinen son sunucu saatinin geçerli saatini (0,1,2,..23) döndürür (programın yürütülmesi sırasında bu değer değişmez).

Not: Test sırasında, bilinen son sunucu zamanı simüle edilir.


Test cihazı TF M1'i destekler, çubuklara takılmayın, zamana takılın, belki buna da ihtiyaç vardır .

 extern int History = 100 ; //История в барах, на которой работает советник
StartDateTime = TimeCurrent ( ) - History * Period ( ) * 60 ; //...=datetime - int*int*int (допустим 1265996665 - 100 * 15 * 60 это не есть интересующее время)

Alert ( "TimeCurrent()    " + TimeCurrent ( ) + " < StartDateTime    " + StartDateTime ) ; //...проверим соотношение datetime 

if ( TimeCurrent ( ) < StartDateTime ) // Время старта не наступило...
{
Alert ( "Время старта не наступило. Эксперт не работает." , ": " , Symb , ", " , Period ( ) ) ;
return ; // Выход из start()

} 
 
costy_ >> :

Sıralama:

tarihsaat bir tarih ve saattir, 1 Ocak 1970'de 0000'den bu yana geçen saniye sayısını içeren işaretsiz bir tamsayıdır .

ve

Renk ve tarih saat veri türleri tamsayı olarak temsil edilir . Tamsayı türleri, kayan nokta türleri ile birlikte aritmetik (sayısal) türler olarak adlandırılır.

Ve değilse, bu durumdan nasıl çıkılır.

Yine de, sayı biçimiyle ilgili ipucu için teşekkürler. Arama yönü var. Bir çözüm varsa, minnettar olacağım.

 

aslında, test cihazında, TimeCurrent() yerine, Time[0] kullanmak daha iyidir, bana göründüğü gibi, TimeCurrent() test cihazında çalıştı.

ve şimdi, büyük olasılıkla, test cihazındaki (test cihazındaki değil) TimeCurrent(), son teklifin geldiği zamanı verecektir..


o zaman ortaya çıkacak

harici intHistory=100; // EA'nın üzerinde çalıştığı çubuklardaki geçmiş
StartDateTime=Saat[Geçmiş];
if(Time[0] < StartDateTime) // Başlangıç zamanı gelmedi
{
Alert("Başlangıç zamanı gelmedi. Expert Advisor çalışmıyor.": ",Symb,", ",Period());
dönüş; // başlangıçtan çık()
}

 
ikatsko >> :

Sıralama:

tarihsaat bir tarih ve saattir, 1 Ocak 1970'de 0000'den bu yana geçen saniye sayısını içeren işaretsiz bir tamsayıdır .

ve

Renk ve tarih saat veri türleri tamsayı olarak temsil edilir . Tamsayı türleri, kayan nokta türleri ile birlikte aritmetik (sayısal) türler olarak adlandırılır.

Ve değilse, bu durumdan nasıl çıkılır.

Yine de, sayı biçimiyle ilgili ipucu için teşekkürler. Arama yönü var. Bir çözüm varsa, minnettar olacağım.

Peki, uyarı yoluyla önceki yorumda bir hata görüntüledim.

Yardım "Not: test ederken, bilinen son sunucu zamanı simüle edilir" diyor. ancak modellenmemişse tüm sorular yardım editörüne gönderilir.

Kontrol ettin, bir hata buldun...

Mantığın ilerideki yönünü bilmediğimiz için bitmiş çözümü yalnızca siz bilirsiniz.

Neden bu kadar çok metin olduğunu anlamıyorum.

StartDateTime=TimeCurrent()-History*Period()*60;

her şey çok daha kolay yapılırsa?

 
costy_ >> :

Mantığın ilerideki yönünü bilmediğimiz için bitmiş çözümü yalnızca siz bilirsiniz.

Önceki cevaptaki kararınıza tamamen katılıyorum: bu bir veri formatı uyumsuzluğu! Hazır bir çözüm talebi, formatları dönüştürme sorununu çözmekten ibarettir. Ama açıkçası MQL4'ün böyle seçenekleri yok. Ve şimdi aşağıda sorduğum sorunun çözümünü görüyorum (belirtiyorum, belki birine de uyar): Örneğin bugün yılın 43. günü yani. Yılın başından itibaren günlük TF'de 43. bar. Uzman Danışmanımı 60 çubukta optimize etmek istiyorum. Bu, günlük zaman diliminde test cihazının bir önceki yılın 365-(60-43)=348. gününden (bar) itibaren çalışmaya başlaması gerektiği anlamına gelir. Onlar. TimeDayOfYear(TimeCurrent()) (bir int!) alıp 348 ile karşılaştırmanız gerekiyor. Açıkçası, yılın (geçmiş) değerini de hesaba katmanız gerekiyor. Genel olarak, her şeyi anladığımı düşünüyorum. Sadece uygulanması gerekiyor. Bir önceki saatin veya belki bir önceki günün ötesine geçecek çok sayıda çubuğun (örneğin, 5 dakika) test edilmesi gerektiğinde, küçük zaman dilimlerinde çok daha zor olacaktır.

 

bütün probleminiz görevi belirlemekte, başkaları için net olacak şekilde formüle edin .. Açıkçası neyi ne zaman test etmeniz gerektiğini anlamadım ..

60 bar ile başlamanız gerekiyorsa, ondan zaman ayırın

int startTime = iTime(NULL, PERIOD_D1 , N); // N - günlük TF'deki mevcut andan itibaren çubuk numarası

Neden: