Herhangi bir yeni yazılım ürünü, kaçınılmaz olarak, şirket içindeki en kapsamlı testlerle bile her zaman tespit edilemeyen hatalar içerir. Bu yüzden programlarımızda bulunan sorunlarla ilgili tüm kullanıcı raporlarına büyük önem veriyor ve her birine cevap vermeye çalışıyoruz.
Önce hatalı bir cevap varsa ve sonra görmezden gelinirse nasıl iletişim kurulur. Başvuru 2016.06.22 08:06 , #1499568
Belki topluluk açıklayabilir?
İşte danışman kodunun bir kısmı. İç boşluk OnTick()
bool openNew, newDay, newHour; if (( int )mqlDateTime.hour == startHour) // startHour = 0 Это условие выполнено. { newDay = newBar.IsNewBar( _Symbol , PERIOD_D1 , oldDay); // if (newDay) Print ( "***** newDay " , newDay, " mqlDateTime.hour " , mqlDateTime.hour); // Судя по распечатке newDay = true newHour = newBar.IsNewBar( _Symbol , PERIOD_H1 , oldHour); if (newHour) Print ( "***** newHour " , newHour); // Судя по распечатке newHour = true if (newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ. { openNew = openNew_or_No(); Print ( "***** openNew " , openNew, " ***** PositionsTotal " , PositionsTotal ()); // Эта распечатка отсутствует if (openNew || PositionsTotal () == 0 ) // Продолжение кода... // На несоответствие количества открывающих и закрывающих фигурных скобок прошу не обращать внимания.
Bu, "Uzmanlar" sekmesinin içeriğidir
2016.06 . 22 00 : 00 : 44.531 Toad Green (EURUSD,M15) ***** newHour true 2016.06 . 22 00 : 00 : 44.331 Toad Green (USDJPY,M15) ***** newHour true 2016.06 . 22 00 : 00 : 18.361 Toad Green (EURUSD,M15) ***** newDay true mqlDateTime.hour 0 2016.06 . 22 00 : 00 : 12.770 Toad Green (USDJPY,M15) ***** newDay true mqlDateTime.hour 0
Yukarıdaki kodun düzgün çalıştığı açıkça görüldüğü 21.06 günlük dosyasının ilk satırları.
GM 0 00 : 00 : 30.116 Trades '3265046' : instant buy 0.01 EURUSD at 1.13188 tp: 1.13388 (deviation: 55 ) NK 0 00 : 00 : 30.246 Trades '3265046' : accepted instant buy 0.01 EURUSD at 1.13188 tp: 1.13388 (deviation: 55 ) IE 0 00 : 00 : 30.246 Trades '3265046' : deal # 73303810 buy 0.01 EURUSD at 1.13188 done (based on order # 87892298 ) KI 0 00 : 00 : 30.246 Trades '3265046' : order # 87892298 buy 0.01 / 0.01 EURUSD at 1.13188 done in 130 ms ON 0 00 : 00 : 30.256 Trades '3265046' : instant sell 0.01 EURUSD at 1.13093 tp: 1.12893 (deviation: 55 ) LQ 0 00 : 00 : 30.366 Trades '3265046' : accepted instant sell 0.01 EURUSD at 1.13093 tp: 1.12893 (deviation: 55 ) HG 0 00 : 00 : 30.376 Trades '3265046' : deal # 73303813 sell 0.01 EURUSD at 1.13093 done (based on order # 87892301 ) RK 0 00 : 00 : 30.376 Trades '3265046' : order # 87892301 sell 0.01 / 0.01 EURUSD at 1.13093 done in 120 ms MJ 0 00 : 00 : 30.376 Trades '3265046' : modify # 87608748 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12031 -> sl: 0.00000 , tp: 1.12462 GK 0 00 : 00 : 30.476 Trades '3265046' : accepted modify # 87608748 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12031 -> sl: 0.00000 , tp: 1.12462 OK 0 00 : 00 : 30.486 Trades '3265046' : modify # 87608748 sell 0.01 EURUSD -> sl: 0.00000 , tp: 1.12462 done in 107 ms OH 0 00 : 00 : 30.486 Trades '3265046' : modify # 87892301 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12893 -> sl: 0.00000 , tp: 1.12462 GJ 0 00 : 00 : 30.586 Trades '3265046' : accepted modify # 87892301 sell 0.01 EURUSD sl: 0.00000 , tp: 1.12893 -> sl: 0.00000 , tp: 1.12462 KI 0 00 : 00 : 30.596 Trades '3265046' : modify # 87892301 sell 0.01 EURUSD -> sl: 0.00000 , tp: 1.12462 done in 109 ms EN 0 04 : 20 : 25.608 Trades '3265046' : deal # 73317674 sell 0.01 EURUSD at 1.13388 done (based on order # 87906853 )
Ertesi günün başlangıcına kadar danışman dinlenir.
21.06 için günlük dosyasının son 2 satırı
OD 0 23:09:20.196 Network '3265046': scanning network for access points NR 0 23:09:33.496 Network '3265046': scanning network finished
ve 22.06 günlüğünün başlangıcı
PM 1 02:13:39.422 Network '3265046': connection to MetaQuotes-Demo lost GF 2 02:13:39.582 MQL5.community authorization failed DO 2 02:13:39.682 MQL5.community authorization failed IP 2 02:13:40.052 MQL5.community authorization failed PK 0 02:13:43.252 Network '3265046': authorized on MetaQuotes-Demo through Access Point RU Moscow (ping: 117.48 ms) DI 0 02:13:43.252 Network '3265046': previous successful authorization performed from 31.173.80.184 on 2016.06.21 14:55:11
Hem NewDay hem de NewHour'u aynı anda yazdırdıysanız, günlüklerde bunlar yan yana olmalıdır. aynı zamanda
Rahatsız ettiğim için özür dilerim, bir süre dikkat etmedim. Ancak!!! O zaman neden yeni bir günün ilk çubuğu göründüğünde, aynı zamanda yeni bir saatin ve yeni bir dakikanın ilk çubuğu oluyor, aynı işlev birine true, birine false dönüyor ve istediği zaman her şeyi doğru döndürebiliyor. herkese?
Lütfen bu işlevde neyin yanlış olduğunu açıklayabilir misiniz?
/*****************Определение появления нового бара******************/ class cNewBar { public : bool IsNewBar( string symbol, ENUM_TIMEFRAMES timeframe, datetime & m_tOld) { datetime tNew = ( datetime ) SeriesInfoInteger (symbol, timeframe, SERIES_LASTBAR_DATE ); if (tNew > m_tOld) { m_tOld = tNew; return ( true ); } return ( false ); } }; /********************************************************************/Neden bir haftadan fazla her şey düzgün çalıştı ve aniden böyle bir felaket olabilir ???
Destek Ekibi 2016.06.22 11:31
Bu işlev nedeniyle birden çok kez kullanılamaz
m_tOld = tNew;
Alexey Viktorov 2016.06.23 10:17
Dün bir şeyin hemen farkına varmadım... Sonuçta, global değişkenler düzeyinde bildirilen ve m_tOld değişkenine referans olarak bir değişken aktarılıyor ve bu değişkene farklı değişkenler iletilirse çoklu çağrıyı hiçbir şekilde etkilememesi gerekiyor. referansa göre işlev. Değil mi? Bu, birincisi ve ikincisi - nedense, test cihazında ve hata ayıklamada her şey düzgün çalışıyor, ancak demo hesabında çok garip çalışıyor, bazen çalışıyor, bazen çalışmıyor.
Bu çek ne olacak?
if (tNew > m_tOld)
Destek Ekibi 2016.06.23 10:24
İşlevinizi arka arkaya 2 kez arayın. İlk aramada true dönerse, aynı tik ile çağırsanız bile bir sonraki aramada false döndürür.
Alexey Viktorov 2016.06.23 10:36
Eh, böyle denir. Gerekli tüm kodları verdim. Bu neden test cihazına ve hata ayıklamaya müdahale etmiyor, ancak demoda istediği gibi oluyor? Anlayamadığım şey şu. Eh, böyle bir sorun bazen test cihazında kayıyorsa, yeni yollar aramak mümkün ve gerekliydi, ancak test cihazında herhangi bir sorun yok...
Tüm bunlara rağmen, şimdi aynı işlevi mql4'te kullanan Expert Advisor korunmadı, ancak herhangi bir sorun çıkmadı. Bu sorun sadece mql5'te çıktı.Alexey Viktorov 2016.06.23 10:41
Ne olmuş? Pekala, kontrol edin... Sonuçta, kontrol etmeden önce tNew değişkenine bir değer atanır ve m_tOld değişkeninin kendisiyle değil, referans tarafından geçirilen değişkenle karşılaştırılır, ancak bu m_tOld, zamanın değerine sahip olabilir. belirtilen dönemin bir önceki çubuğu veya bu ilk çağrıysa 01/01/1970. Ve sadece her periyot için bir sonraki tikte aynı çubuğun değerleri karşılaştırılacaktır.
Alexey Viktorov 2016.06.23 10:57
Lütfen işleve farklı değişkenlerin ve farklı dönemlerin iletildiğini unutmayın.
newDay = newBar.IsNewBar( _Symbol , PERIOD_D1 , oldDay ); newHour = newBar.IsNewBar( _Symbol , PERIOD_H1 , oldHour );
Ve HER ŞEY... Bundan sonrası tam bir yok sayma. Anında yanıt verdiğiniz için teşekkür ederiz, ancak net bir yanıt gelmedi. Eğer mql5'te bir hata varsa, o zaman "anlıyoruz, bekle" gibi bir şey yazabilirsiniz... Ve böylece sorunun basitçe göz ardı edildiği ortaya çıkıyor.
Mql4'teki benzer bir işlev, zamandaki değişimi 15 saniyenin katları olarak belirledi, ancak mql5'te aniden böyle bir sorun oluştu...
Deney sırasında yanlış gözlem organizasyonunun anlamı budur.
...
Cevaplamak için - bir koda ihtiyacınız var. Kod parçacıklarınız var. Minimal bir kod yapın - öyle ki herkes bu kodu çalıştırabilir.
Koddaki değişkenlerin değerlerini - fonksiyona girişte ve fonksiyondan çıkışta yazdırmak güzel olurdu.
Dmitry, tekrar başladı mı? "21/06/2016 tarihinde siparişler neden sorunsuz açıldı ve 06/22/2016 tarihinde teftiş organizasyonu neden birdenbire yanlış oldu sorusuna veya başka bazı problemlere cevap vermek daha kolay olabilir...
Doğrudan ve olduğu gibi cevap verirsem, büyük olasılıkla bunun için yasaklanacağım.
sonsuza dek, ebediyen, daima...
Uyumak için bile dinlenmek yok, çok mu rüya görüyorsun?
Peki ya anlamı? Sonuçta, buna aldanmayacaksın.
Muhtemelen hayatın anlamı nefretken yaşamak güzel midir? ANCAK?
Cevaplamak için - bir koda ihtiyacınız var. Kod parçacıklarınız var. Minimal bir kod yapın - öyle ki herkes bu kodu çalıştırabilir.
Koddaki değişkenlerin değerlerini - fonksiyona girişte ve fonksiyondan çıkışta yazdırmak güzel olurdu.
Sorun yok.
Ancak hiçbir sorun olmadığını ve aniden ... neden? Kod parçacıklarına ek olarak, 21/06/2016 tarihinde ve ondan önce olması gerektiği gibi bir haftadan fazla çalıştığını ancak 22/06/2016 tarihinde aniden sorunların ortaya çıktığını görebileceğiniz günlükler var. SD'ye yazmadan önce, defalarca test cihazında çalıştırdım, geçmişte hata ayıkladım ve hiçbir sorun bulunamadı.
Bu yüzden kodu düzenlemenin faydasından şüpheliyim. Eğlence hariç.
#property strict datetime oldDay, oldHour; MqlDateTime mqlDateTime; /*******************Expert initialization function*******************/ int OnInit () { return ( INIT_SUCCEEDED ); } /*******************************************************************/ /************************Expert tick function************************/ void OnTick () { bool newDay, newHour; TimeToStruct ( TimeCurrent (), mqlDateTime); if (( int )mqlDateTime.hour == 0 ) { newDay = IsNewBar( _Symbol , PERIOD_D1 , oldDay); // Обратите внимание на то, что это отдельная переменная передаваемая в функцию по ссылке if (newDay) Print ( "***** newDay " , newDay, " mqlDateTime.hour " , mqlDateTime.hour); // Судя по распечатке newDay = true newHour = IsNewBar( _Symbol , PERIOD_H1 , oldHour); // А это совсем другая переменная if (newHour) Print ( "***** newHour " , newHour); // Судя по распечатке newHour = true if (newDay && newHour) // A ЭТО УСЛОВИЕ НЕ ВЫПОЛНЕНО НЕСМОТРЯ НА ПРЕДЫДУЩИЕ РАСПЕЧАТКИ. { Print ( "Ордер должен откыться. " ); } } } /*******************************************************************/ /*****************Определение появления нового бара******************/ bool IsNewBar( string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld) { datetime tNew = ( datetime ) SeriesInfoInteger (symbol, timeframe, SERIES_LASTBAR_DATE ); if (tNew > m_tOld) { m_tOld = tNew; return ( true ); } return ( false ); } /********************************************************************/ /******************Expert deinitialization function******************/ void OnDeinit ( const int reason) { Comment ( "" ); } /*******************************************************************/
Yazar istemediği için deneyeceğim:
//+------------------------------------------------------------------+ //| test_1Vc2f.mq5 | //| Copyright © 2016, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2016, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- bool openNew,newDay,newHour; //--- newDay=IsNewBar( _Symbol , PERIOD_D1 ,oldDay); // if (newDay) Print ( "***** newDay " ,newDay, " mqlDateTime.hour " ,mqlDateTime.hour); // Судя по распечатке newDay = true newHour=IsNewBar( _Symbol , PERIOD_H1 ,oldHour); if (newHour) Print ( "***** newHour " ,newHour); // Судя по распечатке newDay = true } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsNewBar( string symbol, ENUM_TIMEFRAMES timeframe, datetime &m_tOld) { datetime tNew=( datetime ) SeriesInfoInteger (symbol,timeframe, SERIES_LASTBAR_DATE ); if (tNew>m_tOld) { Print ( "in: m_tOld = " ,m_tOld); m_tOld=tNew; Print ( "out: m_tOld = " ,m_tOld); return ( true ); } return ( false ); } //+------------------------------------------------------------------+
Geriye " mqlDateTime " yapısının ne olduğuna ve "oldDay" ve "oldHour" değişkenlerinin nerede bildirileceğine karar vermek kalıyor...
Yazar istemediği için deneyeceğim:
Geriye " mqlDateTime " yapısının ne olduğuna ve "oldDay" ve "oldHour" değişkenlerinin nerede bildirileceğine karar vermek kalıyor...
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz