Hata 02.
Özel sembol alıntılarının son haftasını kaldırmanız gerekir. Silmek mümkün olacak ama ChartRedraw bile görsel efekt vermiyor.
Sadece fare ile grafiği kaydırırsanız normale döner. Görselleştirmeyi ChartRedraw ile düzeltebilir misiniz?
PS Şimdilik böyle bir distorsiyon yapıyorum
ChartSetInteger ( 0 , CHART_SHIFT , ! ChartGetInteger ( 0 , CHART_SHIFT )); Sleep ( 1000 ); ChartRedraw (); ChartSetInteger ( 0 , CHART_SHIFT , ! ChartGetInteger ( 0 , CHART_SHIFT ));
Hata 03.
TicksAdd aşağıdaki korumaya sahiptir. Kene, Piyasa İzleme'dekinden daha önceyse, yok sayılır.
Ne yazık ki bu mekanizma TicksDelete ve TicksReplace ile etkileşim sağlamamaktadır.
Özel sembolün geçmişinin son gününün silinmesi ve silindikten sonra Market Watch'ta son tikin ayarlanması gerekir.
Silme işleminde her şey yolundaysa, yukarıda açıkladığım kural nedeniyle, son onay işaretini ayarlamaktan hiçbir şey gelmez.
TicksAdd kuralını değiştirmeyi veya TicksDelete/TicksReplace'in Piyasa İzleme'deki bir onay işaretini, zamanı mevcut olandan daha azsa tarihteki sonuncusu ile değiştirmesini öneriyorum.
Sorunlu üreme
template < typename T> T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print (Str + " = " + ( string )Value); return (Value); } #define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + ( string ) __LINE__ + ": " + #A) // Макрос для удобного и наглядного вывода значений void OnStart () { const string Name = "TEMP1235" ; // Имя кастомного символа const string SymbOrig = "EURUSD" ; // Имя оригинального символа MqlTick Ticks[]; const int Size = _P( CopyTicksRange (SymbOrig, Ticks, COPY_TICKS_ALL , ( long ) D'2019.01.01' * 1000 )); // Считали EURUSD-тики за 2019 год. if ((Size > 0 ) && _P( CustomSymbolCreate (Name, NULL , SymbOrig)) && _P( SymbolSelect (Name, true ))) // Создали символ на основе EURUSD. { _P( CustomTicksReplace (Name, 0 , LONG_MAX , Ticks)); // Поместили в него историю EURUSD. MqlTick AddTicks[ 1 ]; AddTicks[ 0 ] = Ticks[Size - 1 ]; // Последний тик в истории. _P( CustomTicksAdd (Name, AddTicks)); // Последний тик добавили в Обзор рынка и еще раз в историю _P( CustomTicksDelete (Name, ( long ) D'2019.02.01' * 1000 , LONG_MAX )); // Удалили все тики, оставив только данные за январь 2019. _P( CopyTicks (Name, AddTicks, COPY_TICKS_ALL , 0 , 1 )); // Взяли последний тик из оставшейся истории. ArrayPrint (AddTicks); // Посмотрели, что это, действительно, последний тик января. _P( CustomTicksAdd (Name, AddTicks)); // Попробовали записать его в Обзор рынка - не получилось. _P( SymbolSelect (Name, false )); // Удалили символ из Обзора рынка. _P( CustomSymbolDelete (Name)); // Удалили символ. } }
Sonuç
void OnStart (), Line = 11 : CopyTicksRange (SymbOrig,Ticks, COPY_TICKS_ALL ,( long ) D'2019.01.01' * 1000 ) = 3316638 void OnStart (), Line = 13 : CustomSymbolCreate (Name, NULL ,SymbOrig) = true void OnStart (), Line = 13 : SymbolSelect (Name, true ) = true void OnStart (), Line = 15 : CustomTicksReplace (Name, 0 , LONG_MAX ,Ticks) = 3316638 void OnStart (), Line = 20 : CustomTicksAdd (Name,AddTicks) = 1 void OnStart (), Line = 22 : CustomTicksDelete (Name,( long ) D'2019.02.01' * 1000 , LONG_MAX ) = 1159087 void OnStart (), Line = 23 : CopyTicks (Name,AddTicks, COPY_TICKS_ALL , 0 , 1 ) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [ 0 ] 2019.01 . 31 23 : 59 : 58 1.14461 1.14486 0.0000 0 1548979198644 2 0.00000 void OnStart (), Line = 26 : CustomTicksAdd (Name,AddTicks) = - 1 void OnStart (), Line = 28 : SymbolSelect (Name, false ) = true void OnStart (), Line = 29 : CustomSymbolDelete (Name) = true
Kaynak kodu olmadan hata mesajının kelimeler olarak kalacağını anlıyorum. Boyamak için kırılmış olsa da, muhtemelen hatayı göstermenin, bulmanın ve düzeltmenin en etkili yolu budur.
Daha dün sentetiklerle uğraşmaya başladım, test cihazında bazı saçmalıklar var. Sentetikler test cihazında formüllerle çalışır mı?
Bir yardımdan sentetik bir formül oluşturdu. Pekala?
İşte testin gösterdiği şey
Bir tür saçmalık, tüm işlemler karlı, resimden bile olamaz, test sonunda hepsi kapalı, kar sıfır. Muhtemelen yanlış bir şey yapıyorum. Başka ne görülecek? Günlüğü ekliyorum.
Muhtemelen yanlış bir şey yapıyorum. Başka ne görülecek?
Ekran görüntüsü, sembolün kâr para biriminin hesap para birimiyle eşleşmediğini gösteriyor. Yani dönüşüm sıfır verir.
Kutudan çıkar çıkmaz çalışmasını sağlamak için "EURUSD_ALEX1" olarak adlandırın.
Bana hangi klasörlerin özel semboller ve ayarları olduğunu söyle? Terminalde ve yazılımda silinen bir şey yardımcı olmuyor.
\MetaTrader5\Temeller\Özel\
Hata 04.
Belirli oynatma ile başka bir hata
template < typename T> T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print (Str + " = " + ( string )Value); return (Value); } #define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + ( string ) __LINE__ + ": " + #A) // Макрос для удобного и наглядного вывода значений void OnStart () { const string Name = "TEMP8" ; // Для каждого запуска нужно менять имя символа, чтобы увидеть проблему const string SymbOrig = "EURUSD" ; // Имя оригинального символа MqlTick Ticks[]; const int Size = _P( CopyTicksRange (SymbOrig, Ticks, COPY_TICKS_ALL , ( long ) D'2019.01.01' * 1000 )); // Считали EURUSD-тики за 2019 год. if ((Size > 0 ) && _P( CustomSymbolCreate (Name, NULL , SymbOrig)) && _P( SymbolSelect (Name, true ))) // Создали символ на основе EURUSD. { _P( CustomTicksReplace (Name, 0 , LONG_MAX , Ticks)); // Поместили в него историю EURUSD. MqlTick AddTicks[ 1 ]; AddTicks[ 0 ] = Ticks[Size - 1 ]; // Последний тик в истории. _P( CustomTicksAdd (Name, AddTicks)); // Последний тик добавили в Обзор рынка и еще раз в историю _P( CustomTicksDelete (Name, ( long ) D'2019.02.01' * 1000 , LONG_MAX )); // Удалили все тики, оставив только данные за январь 2019. _P( CopyTicks (Name, AddTicks, COPY_TICKS_ALL , 0 , 1 )); // Взяли последний тик из оставшейся истории. ArrayPrint (AddTicks); // Посмотрели, что это, действительно, последний тик января. const int NewSize = _P( CopyTicksRange (Name, Ticks)); // Запросили всю историю тиков кастомного символа _P( CopyTicks (Name, AddTicks, COPY_TICKS_ALL , 0 , 1 )); // Снова Взяли последний тик из истории. ArrayPrint (AddTicks); // Увидели, что последний тик изменился! _P( SymbolSelect (Name, false )); // Удалили символ из Обзора рынка. _P( CustomSymbolDelete (Name)); // Удалили символ. } }
Sonuç
void OnStart (), Line = 11 : CopyTicksRange (SymbOrig,Ticks, COPY_TICKS_ALL ,( long ) D'2019.01.01' * 1000 ) = 3316638 void OnStart (), Line = 13 : CustomSymbolCreate (Name, NULL ,SymbOrig) = true void OnStart (), Line = 13 : SymbolSelect (Name, true ) = true void OnStart (), Line = 15 : CustomTicksReplace (Name, 0 , LONG_MAX ,Ticks) = 3316638 void OnStart (), Line = 20 : CustomTicksAdd (Name,AddTicks) = 1 void OnStart (), Line = 22 : CustomTicksDelete (Name,( long ) D'2019.02.01' * 1000 , LONG_MAX ) = 1159087 void OnStart (), Line = 23 : CopyTicks (Name,AddTicks, COPY_TICKS_ALL , 0 , 1 ) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [ 0 ] 2019.01 . 31 23 : 59 : 58 1.14461 1.14486 0.0000 0 1548979198644 2 0.00000 void OnStart (), Line = 26 : CopyTicksRange (Name,Ticks) = 2157552 void OnStart (), Line = 28 : CopyTicks (Name,AddTicks, COPY_TICKS_ALL , 0 , 1 ) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [ 0 ] 2019.02 . 22 23 : 57 : 59 1.13303 1.13316 0.0000 0 1550879879799 6 0.00000 void OnStart (), Line = 31 : SymbolSelect (Name, false ) = true void OnStart (), Line = 32 : CustomSymbolDelete (Name) = true
Hata, CopyTicksRange'de bulunur - kene geçmişini değiştirir! Çoğaltmak için komut dosyasındaki özel sembolün adını her zaman değiştirmeniz gerektiğini lütfen unutmayın. Ve bu, betiğin onu başarıyla kaldırmasına rağmen. Bir karakteri silmenin bir silme olmadığı ortaya çıktı.
Ekran görüntüsü, sembolün kâr para biriminin hesap para birimiyle eşleşmediğini gösteriyor. Yani dönüşüm sıfır verir.
Kutudan çıkar çıkmaz çalışmasını sağlamak için "EURUSD_ALEX1" olarak adlandırın.
Teşekkürler, buydu. Hesapta olduğu gibi aradım, işe yaradı. Bir soru daha. Ve gerçek ticarette ne olur, sentetik emirler, bu durumda (formüle bakın) EURUSD ve USDCAD'deki gerçek çiftlerdeki emirlere ve pozisyonlara çevrilir?
Test cihazının günlüğünde sadece sentetikleri nerede görebilirim.
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret 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