Özel semboller. Hatalar, hatalar, sorular, öneriler.

 
Konu oldukça kapsamlı olduğu için ayrı bir tartışmada altını çizmeye değer olduğuna karar verdim.
 

Hata 01.

Özel sembol tablosu açık. Örneğin, tüm çubuğu manuel olarak silerseniz ve geçmişi işaretlerseniz, grafik penceresi basitçe donar - güncellenmez.

Boş bir özel karakterde olduğu gibi beklenen davranış.

 

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?

1

İşte testin gösterdiği şey

2

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.

Dosyalar:
20190224.log  9322 kb
 
Alexey Volchanskiy :

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.
 
pivomoe :
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ı.

 
fxsaber :

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.

inci

 
Gerçek hayatta özel semboller ticaret değil, yalnızca bilgi amaçlıdır. Bunlar üzerinde yalnızca Test Cihazında işlem yapabilirsiniz.