Özel semboller. Hatalar, hatalar, sorular, öneriler. - sayfa 23

 
Slava :

Şu anda, bugün olmayan (dün, dünden önceki gün, geçen yıl, vb.) günün tikleriyle özel enstrümanların çubuklarını oluşturmak mümkün değildir.

Ancak. Bir düzeltme yaptık.

CustomTicksReplace kullanırken (CustomTicksAdd değil! Toplu tik eklemek için CustomTicksAdd kullanmayın), daha önce bugün için tik yoksa eklenen tiklerin son günü "geçerli" olur.

Bir sonraki yapıyı bekleyin. Ardından deneylere ve tartışmalara devam edeceğiz.

Build 2177 kullanıyorum. Sanırım bu sonuncusu.

Ama CUSTOMSYMBOL ile çalışamıyorum. Bana yardımcı olacak bir yapıyı ne zaman bekleyebileceğimi söyleyebilir misiniz?

Yapı değişikliklerini nerede görebilirim?

 

Ekli gösterge mevcut yapı 2177'de çalışır

Bu senin göstergen. Düzenlendi, ancak algoritma aynı kaldı. Symbol.mqh dosyasını MQL5\Include\Includes içine yerleştirdim

Çizgiyi değiştir

 #include   <Includes\ Symbol .mqh>

Böylece Symbol.mqh dosyanız kullanılır

Barlar oluşuyor. Keneler yalnızca MarketWatch'a değil, geçmişe doğru şekilde uygulanır


Dosyalar:
 
Slava :

Ekli gösterge mevcut yapı 2177'de çalışır

Bu senin göstergen. Düzenlendi, ancak algoritma aynı kaldı. Symbol.mqh dosyasını MQL5\Include\Includes içine yerleştirdim

Çizgiyi değiştir

Böylece Symbol.mqh dosyanız kullanılır

Barlar oluşuyor. Keneler yalnızca MarketWatch'a değil, geçmişe doğru şekilde uygulanır


kontrol edeceğim. Belki kodumda bazı sorunlar vardır. Ama kod iyi görünüyor.

 

Hata 25.

Keneler özel bir sembole yazıldığında denormalize edilirler!

 sinput datetime inDateFrom = D'2019.12.01' ;

// Проверка нормализации числа.
bool IsNorm( const double Price )
{
   return ( NormalizeDouble (Price, _Digits ) == Price);
}

#define TOSTRING(A) #A + " = " + DoubleToString (A, 16 ) + " "
#define PRINT(A) Print (TOSTRING(A) + TOSTRING( NormalizeDouble (A, _Digits )))
#define ISNORM(A) if (!IsNorm(A)) { PRINT(A); Count++; };

// Распечатка ненормализованных цен тиков.
void CheckNorm( const MqlTick &Ticks[], const int MaxAmount = 10 )
{  
   const int Size = ArraySize (Ticks);
  
   for ( int i = 0 , Count  = 0 ; (i < Size) && (Count < MaxAmount); i++)
  {
    ISNORM(Ticks[i].bid)
    ISNORM(Ticks[i].ask)
    ISNORM(Ticks[i].last)
  }
}

// Нормализация цен тика.
void Normalize( MqlTick &Tick, const int digits )
{
  Tick.bid = :: NormalizeDouble (Tick.bid, digits);
  Tick.ask = :: NormalizeDouble (Tick.ask,  digits);
  Tick.last = :: NormalizeDouble (Tick.last, digits);
}

// Нормализация цен тиков.
void Normalize( MqlTick &Ticks[], const int digits )
{
   for ( int i = ArraySize (Ticks) - 1 ; i >= 0 ; i--)
    Normalize(Ticks[i], digits);
}

void OnStart ()
{
   const string Name = "TEMP12345" ;                                                           // Имя кастомного символа
   const string SymbOrig = "EURUSD" ;                                                           // Имя оригинального символа

   MqlTick Ticks[];
  
   const int Size = CopyTicksRange (SymbOrig, Ticks, COPY_TICKS_ALL , ( long )inDateFrom * 1000 ); // Считали EURUSD-тики.
    
   if ((Size > 0 ) && CustomSymbolCreate (Name, NULL , SymbOrig) && SymbolSelect (Name, true ))     // Создали символ на основе EURUSD.
  {
     const int digits = ( int ) SymbolInfoInteger (Name, SYMBOL_DIGITS );
    
    Normalize(Ticks, digits);                                                                 // Нормализовали цены тиков.
    
     Print ( "Check1" );
    CheckNorm(Ticks);                                                                         // Проверили, что цены тиков нормализованы.
    
     CustomTicksReplace (Name, 0 , LONG_MAX , Ticks);                                             // Поместили в него историю EURUSD.        

     MqlTick NewTicks[];
    
     CopyTicksRange (Name, NewTicks, COPY_TICKS_ALL , ( long )inDateFrom * 1000 );                 // Считали тики из кастомного символа
    
     Print ( "Check2" );
    CheckNorm(NewTicks);                                                                     // Проверили, что цены тиков нормализованы.
  }
}


Sonuç

 Check1
Check2
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 


Görünüşe göre Terminalin içinde standart olandan farklı bir tür NormalizeDouble var. Bu hata, birçok algoritmanın çalışmasını belirsiz bir şekilde etkileyebilir.


Lütfen düzelt. Normalleştirilmiş fiyatları kaydetmeye yönelik doğal ihtiyaç karşılanamaz.

 
fxsaber :

Hata 25.

Keneler özel bir sembole yazıldığında denormalize edilirler!

Sonuç

Görünüşe göre Terminalin içinde standart olandan farklı bir tür NormalizeDouble var. Bu hata, birçok algoritmanın çalışmasını belirsiz bir şekilde etkileyebilir.

Lütfen düzelt. Normalleştirilmiş fiyatları kaydetmeye yönelik doğal ihtiyaç karşılanamaz.

Aşırı yüklenmiş Normalleştirme işleviniz var
İşlevlerin adını değiştirmeyi deneyin.
Belki de bu nedenle, doğru normalleşme uçar.

 
fxsaber :

Hata 25.

Keneler özel bir sembole yazıldığında denormalize edilirler!


Sonuç


Görünüşe göre Terminalin içinde standart olandan farklı bir tür NormalizeDouble var. Bu hata, birçok algoritmanın çalışmasını belirsiz bir şekilde etkileyebilir.


Lütfen düzelt. Normalleştirilmiş fiyatları kaydetmeye yönelik doğal ihtiyaç karşılanamaz.

Her iki durum da ondalık basamak sayısına göre normalleştirmenin sonuçlarıdır.

Mutlak eşitlik için hala gerçek sayıları karşılaştırıyor musunuz?

Orijinal kenelerin kaynağı hangi sunucudur?

 
Roman :

Aşırı yüklenmiş Normalleştirme işleviniz var
İşlevlerin adını değiştirmeyi deneyin.
Belki de bu nedenle, doğru normalleşme uçar.

Kod, normalleştirmenin doğruluğu için bir test içerir. Onaylar özel bir sembole yazılmadan önce bu test başarıyla geçer. Kodu kontrol ettim.

 
Slava :

Her iki durum da ondalık basamak sayısına göre normalleştirmenin sonuçlarıdır.

Mutlak eşitlik için hala gerçek sayıları karşılaştırıyor musunuz?

Orijinal kenelerin kaynağı hangi sunucudur?

MQ-Beta sunucusu. Ancak bu durumda, sunucunun bununla hiçbir ilgisi yoktur. Ben ne yaparım.

  1. Kene dizisini normalleştiriyorum ve durumun böyle olup olmadığını kontrol ediyorum.
  2. Özel bir sembole yazıyorum.
  3. Özel bir sembolden kaydedilmiş keneleri okudum.
  4. Normalleştirme için kontrol ediyorum - normalleştirilmediler.
Onlar. Kayıt için bazı keneler gönderdim, ancak tamamen farklı olanlar kaydoldu.
 
Muhtemelen, Terminal'in acil olarak kapanması nedeniyle, kuyruklar bases\Custom klasöründe kalır.
 
fxsaber :

Hata 25.

2280 - düzeltildi, teşekkürler.

Neden: