EA'mın yalnızca açık fiyatlar stratejisi var ve geriye dönük test sırasında (belli ki) zaman kazanmak için buna bağlı kalmak istedim.
Benim tasarladığım çözüm şu şekilde:
EA'nızın ana işlem periyodu sırasında en aktif çifti 'sürücü' (keneleri oluşturan tablo) olarak kullanın.
her onTick()'te sürücünüzün yeni bir çubuğa girip girmediğini kontrol edin
yeni çubuk yoksa biraz daha bekleyin
yeni bir çubuk varsa, OnTick() mesajını bireysel tüccarlarınıza dağıtın (her tüccar bir döviz çiftinden sorumludur)
tüccarda tüccarın döviz çiftinin son zamanının sürücüden gelen "yeni çubuk zamanı"na eşit olup olmadığını kontrol edin
evet ise, normal şekilde devam edebilirsiniz
hayır ise, mevcut barın kapanış fiyatını aradığınız açılış fiyatı olarak kabul etmeniz ve önceki barlardan bilgi arıyorsanız bu "tek tek" durumunu dikkate almanız gerekir.
EA'mdan gelen kodun önemli bölümlerini buraya kesip yapıştıracağım. Umarım bu size herhangi bir yardımcı olacaktır!
Şerefe!
// this is from the Trader base class// manage a new tick and predetermines whether a new bar hast startedvirtualvoid onTick() {
MqlRates rates[ 1 ];
// check the rates of the tick stream we're attached to (_Symbol!!!)if ( CopyRates ( _Symbol , _period, 0 , 1 , rates) != 1 ) {
Print ( "CopyRates of " , _Symbol , " failed" );
return ;
}
if (_newBar = (rates[ 0 ].time != _currBarTime)) {
_prevBarTime = _currBarTime; // remember the previous bar time
_currBarTime = rates[ 0 ].time; // remember the current bar time
}
}
// this is the actual trader for a specific currency pair// checks whether a new trade (closing or opening) is to be performedvoid checkForTrade( void ) {
MqlRates rates[ 3 ];
if ( CopyRates (_symbol, _period, 0 , 3 , rates) != 3 ) {
Print ( "CopyRates of " , _symbol, " failed" );
return ;
}
bool inSameBar = (rates[ 2 ].time == _currBarTime); // _currBarTime determined in OnTick()!double sBuf[ 3 ]; // signal buffer! 2: current bar, 1: previous bar, 0: current - 2 if ( CopyBuffer (_ind, SIGNAL3, 0 , 3 , sBuf) != 3 ) {
Print ( "copy signal from indicator failed, no data" );
return ;
}
// first close exiting ordersdouble v0 = inSameBar ? sBuf[ 0 ] : sBuf[ 1 ]; // determine the actual 'previous' bardouble v1 = inSameBar ? sBuf[ 1 ] : sBuf[ 2 ]; // determine the actual 'current' barif (_volume > 0 ) {
if (crossesZeroDownwards(v0, v1)) { // cross down?
setReqVolume( 0 ); // close this order
tradeCloses = true;
}
} elseif (_volume < 0 ) {
if (crossesZeroUpwards(v0, v1)) { // cross up?
setReqVolume( 0 ); // close this order
tradeCloses = true;
}
}
...
Sadece bu sorunla kendim karşılaştım. Tahmin ettiniz, JForex'ten MQL5'e geçiş yapmaya çalışıyorsunuz! Keşke zahmet etmeseydim demeye başlıyorum, ancak sanırım son teslim tarihi uzatması yardımcı olur :)
Görünüşe göre MetaQuotes hala düzeltmedi.
MT5 forex, DOM'u desteklemiyor gibi görünüyor.
isNewBar bana yardım etmeyecek.
Gülünç bir durum gibi görünüyor.
MT5'in içinde bu sorunla ilgili bir değişiklik olup olmadığını bilen var mı?
Kenelerle beslenmeyi bekleyen çok para birimli bir strateji için işe yarayan bir çözüm bilen var mı?
Sadece bu sorunla kendim karşılaştım. Tahmin ettiniz, JForex'ten MQL5'e geçiş yapmaya çalışıyorsunuz! Keşke zahmet etmeseydim demeye başlıyorum, ancak sanırım son teslim tarihi uzatması yardımcı olur :)
Görünüşe göre MetaQuotes hala düzeltmedi.
MT5 forex, DOM'u desteklemiyor gibi görünüyor.
isNewBar bana yardım etmeyecek.
Gülünç bir durum gibi görünüyor.
MT5'in içinde bu sorunla ilgili bir değişiklik olup olmadığını bilen var mı?
Kenelerle beslenmeyi bekleyen çok para birimli bir strateji için işe yarayan bir çözüm bilen var mı?
Seninki hayal kırıklığı içinde,
Jim
OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.
enivid : OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.
TradingGurus :
Bununla birlikte, farklı çiftlere karşı çoklu para birimi geriye dönük testler yapmak yine de biraz farklı sonuçlar verir.
Jim, yarışma portföyüm EA'da 1 saniye ile OnTimer çözümünü kullanıyorum. Stratejiniz her tıklamaya dayanıyorsa, evet, OnTimer ile OnTick'i tek bir para biriminde kullanırken saniyede birden fazla tıklama mümkün olduğundan farklı sonuçlar alırsınız. "Eksik" onay işareti yüksek veya düşük yeni bir çubuk oluşturduğunda genellikle en fazla farkı yarattığını buldum. Herhangi bir değişiklik için önceki çubuğu yüksek/düşük ve mevcut çubuğu yüksek/düşük olarak kontrol edebilir ve tabii ki mevcut onay yeni çubuğu yüksek/düşük oluşturmadıkça, meydana geldiklerinde bunları "eksik onay" olarak ekleyebilirsiniz.
Ayrıca MetaTrader Strateji Test Cihazının yalnızca kene verilerini simüle ettiğini unutmayın. Kene hareketiyle ilgili stratejinizin ne kadar hassas olduğuna bağlı olarak, bu simülasyonun geriye dönük teste karşı ileriye dönük test üzerinde önemli bir etkisi olabilir.
Stratejiniz her tıklamaya dayanıyorsa, evet, OnTimer ile OnTick'i tek bir para biriminde kullanırken saniyede birden fazla tıklama mümkün olduğundan farklı sonuçlar alırsınız.
- Patrick
Demek istediğim tam olarak bu değildi. (hala tek potansiyel!) yarışmamız EA, 12 çiftin tümünü takas ediyor. Yalnızca OnTimer() kullanarak, örneğin EUR/USD yerine strateji test cihazında GBP/USD'yi seçersem farklı geriye dönük test sonuçları alıyorum.
Simüle edilmiş keneler kullanarak geriye dönük test yaparken MT4'ün sınırlamalarına fazlasıyla aşinayım. Maalesef MT5 çok daha iyi değil gibi görünüyor!
Tarihsel nedenlerden dolayı tüm bunları keneler ile devam ettirmek için son derece hevesliydik, ancak vazgeçtik. Sadece işleri tutarlı hale getiremiyorum.
Mermiyi ısırdık ve şimdi OnTimer() ve isNewBar() yardımıyla 1 dakikalık çubuklarla çalışıyoruz.
Sonunda işler belli belirsiz mantıklı görünmeye başladı ve dahası şampiyonanın son teslim tarihine 4 saat kaldı :)
Sonunda EA'mızı son teslim tarihinden önce yaklaşık 5 dakika ayırdık.
Kemerinin altında bir geri test ve optimizasyon yok.
Bunu daha önce hiç yapmadım, biri bana hala onaylanma şansı olup olmadığını söyleyebilir mi?
Öyleyse, önümüzdeki hafta giriş ayarlarıyla oynamamıza izin verilecek mi, verilmeyecek mi?
Jim
İyi Şanslar Jim!
EA'nız 2010.01.01'den 2010.08.01'e kadar herhangi bir hata ( ticari hatalar vb.) ve kâr olmadan doğru bir şekilde geriye dönük test yaptıysa, kişisel bilgileriniz de doğru olduğu sürece büyük olasılıkla onaylanacaksınız. Ancak, bu noktadan sonra ayarlar (giriş parametreleri) dahil hiçbir şeyi değiştiremezsiniz.
Bunu o zaman yayınlamak istedim, ancak ön sayfada korkunç görünüyordu:
Merhaba erkekler ve kızlar,
Bu sorunla bir süre önce ben de karşılaştım ve burada tartıştık: https://www.mql5.com/en/forum/1642
EA'mın yalnızca açık fiyatlar stratejisi var ve geriye dönük test sırasında (belli ki) zaman kazanmak için buna bağlı kalmak istedim.
Benim tasarladığım çözüm şu şekilde:
EA'mdan gelen kodun önemli bölümlerini buraya kesip yapıştıracağım. Umarım bu size herhangi bir yardımcı olacaktır!
Şerefe!
Sadece bu sorunla kendim karşılaştım. Tahmin ettiniz, JForex'ten MQL5'e geçiş yapmaya çalışıyorsunuz! Keşke zahmet etmeseydim demeye başlıyorum, ancak sanırım son teslim tarihi uzatması yardımcı olur :)
Görünüşe göre MetaQuotes hala düzeltmedi.
MT5 forex, DOM'u desteklemiyor gibi görünüyor.
isNewBar bana yardım etmeyecek.
Gülünç bir durum gibi görünüyor.
MT5'in içinde bu sorunla ilgili bir değişiklik olup olmadığını bilen var mı?
Kenelerle beslenmeyi bekleyen çok para birimli bir strateji için işe yarayan bir çözüm bilen var mı?
Seninki hayal kırıklığı içinde,
Jim
Sadece bu sorunla kendim karşılaştım. Tahmin ettiniz, JForex'ten MQL5'e geçiş yapmaya çalışıyorsunuz! Keşke zahmet etmeseydim demeye başlıyorum, ancak sanırım son teslim tarihi uzatması yardımcı olur :)
Görünüşe göre MetaQuotes hala düzeltmedi.
MT5 forex, DOM'u desteklemiyor gibi görünüyor.
isNewBar bana yardım etmeyecek.
Gülünç bir durum gibi görünüyor.
MT5'in içinde bu sorunla ilgili bir değişiklik olup olmadığını bilen var mı?
Kenelerle beslenmeyi bekleyen çok para birimli bir strateji için işe yarayan bir çözüm bilen var mı?
Seninki hayal kırıklığı içinde,
Jim
merhaba enivid,
OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.
Önerin için teşekkürler. Çözümünüz, kesinlikle gereksinimlerimiz için denediğim diğerlerinden çok daha iyi çalışıyor.
Bununla birlikte, farklı çiftlere karşı çoklu para birimi geriye dönük testler yapmak yine de biraz farklı sonuçlar verir.
Büyük miktarda güven uyandırmaz!
Şimdi çok daha fazla gece yarısı yağı yakmaya gidiyorum!
Şerefe,
Jim
OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.
TradingGurus :
Bununla birlikte, farklı çiftlere karşı çoklu para birimi geriye dönük testler yapmak yine de biraz farklı sonuçlar verir.
Jim, yarışma portföyüm EA'da 1 saniye ile OnTimer çözümünü kullanıyorum. Stratejiniz her tıklamaya dayanıyorsa, evet, OnTimer ile OnTick'i tek bir para biriminde kullanırken saniyede birden fazla tıklama mümkün olduğundan farklı sonuçlar alırsınız. "Eksik" onay işareti yüksek veya düşük yeni bir çubuk oluşturduğunda genellikle en fazla farkı yarattığını buldum. Herhangi bir değişiklik için önceki çubuğu yüksek/düşük ve mevcut çubuğu yüksek/düşük olarak kontrol edebilir ve tabii ki mevcut onay yeni çubuğu yüksek/düşük oluşturmadıkça, meydana geldiklerinde bunları "eksik onay" olarak ekleyebilirsiniz.
Ayrıca MetaTrader Strateji Test Cihazının yalnızca kene verilerini simüle ettiğini unutmayın. Kene hareketiyle ilgili stratejinizin ne kadar hassas olduğuna bağlı olarak, bu simülasyonun geriye dönük teste karşı ileriye dönük test üzerinde önemli bir etkisi olabilir.
- Patrick
Stratejiniz her tıklamaya dayanıyorsa, evet, OnTimer ile OnTick'i tek bir para biriminde kullanırken saniyede birden fazla tıklama mümkün olduğundan farklı sonuçlar alırsınız.
- Patrick
Demek istediğim tam olarak bu değildi. (hala tek potansiyel!) yarışmamız EA, 12 çiftin tümünü takas ediyor. Yalnızca OnTimer() kullanarak, örneğin EUR/USD yerine strateji test cihazında GBP/USD'yi seçersem farklı geriye dönük test sonuçları alıyorum.
Simüle edilmiş keneler kullanarak geriye dönük test yaparken MT4'ün sınırlamalarına fazlasıyla aşinayım. Maalesef MT5 çok daha iyi değil gibi görünüyor!
Jim
Tarihsel nedenlerden dolayı tüm bunları keneler ile devam ettirmek için son derece hevesliydik, ancak vazgeçtik. Sadece işleri tutarlı hale getiremiyorum.
Mermiyi ısırdık ve şimdi OnTimer() ve isNewBar() yardımıyla 1 dakikalık çubuklarla çalışıyoruz.
Sonunda işler belli belirsiz mantıklı görünmeye başladı ve dahası şampiyonanın son teslim tarihine 4 saat kaldı :)
JimSonunda EA'mızı son teslim tarihinden önce yaklaşık 5 dakika ayırdık.
Kemerinin altında bir geri test ve optimizasyon yok.
Bunu daha önce hiç yapmadım, biri bana hala onaylanma şansı olup olmadığını söyleyebilir mi?
Öyleyse, önümüzdeki hafta giriş ayarlarıyla oynamamıza izin verilecek mi, verilmeyecek mi?
Jim
Sonunda EA'mızı son teslim tarihinden önce yaklaşık 5 dakika ayırdık.
Kemerinin altında bir geri test ve optimizasyon yok.
Bunu daha önce hiç yapmadım, biri bana hala onaylanma şansı olup olmadığını söyleyebilir mi?
Öyleyse, önümüzdeki hafta giriş ayarlarıyla oynamamıza izin verilecek mi, verilmeyecek mi?
Jim
İyi Şanslar Jim!
EA'nız 2010.01.01'den 2010.08.01'e kadar herhangi bir hata ( ticari hatalar vb.) ve kâr olmadan doğru bir şekilde geriye dönük test yaptıysa, kişisel bilgileriniz de doğru olduğu sürece büyük olasılıkla onaylanacaksınız. Ancak, bu noktadan sonra ayarlar (giriş parametreleri) dahil hiçbir şeyi değiştiremezsiniz.
Botunuzu çalışırken görmeyi umuyorum!
- Patrick