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

 
fxsaber :

Ayrıca, şimdi 00:00:01 ise, sadece iki saniye önce olan CustomTicksAdd aracılığıyla çubuğu tamamlamak mümkün olmayacaktır.

Tabii ki işe yaramayacak. Çünkü 00:00:01'de gelen tik zaten bir sonraki çubuğu oluşturmalıdır. Normal bir durumda.

 
Slava :

Test kullanıcısı için, dünden önceki günün tik işareti, dünün zamanından önceki gün için tazedir, bugünün zamanıdır.

Ne söylemek istediğini anladım. Altı ay önceki özel kenelerle yaptığınız egzersizlerin belirgin bir test karakteri var. Durumunuz normal değil (genel uygulama anlamında)

Özel standart dışı kullanımla ilgili. Çeşitli durumlarda özellikleri belirlemek ve bunları çözmeye çalışmak için tartışma bununla ilgilidir.

 
Slava :

Tabii ki işe yaramayacak. Çünkü 00:00:01'de gelen tik zaten bir sonraki çubuğu oluşturmalıdır. Normal bir durumda.

Saniyede bir zamanlayıcı ile keneleri ileten bir Hizmet hayal edin (belki daha az, genellikle formüllerde yaptığınız gibi - 100 ms). Daha sonra gece yarısında barlar genellikle günün son işaretlerini kaybeder.

 

Hata 16.

M1 çubukları var, ancak diğer zaman dilimleri görüntülenmiyor.


Demir nasıl çoğaltılır - bilmiyorum.
 
fxsaber :

Hata 16.

M1 çubukları var, ancak diğer zaman dilimleri görüntülenmiyor.


Demir nasıl çoğaltılır - bilmiyorum.
Ve bunlar sıfır olmayan saniyelerle zamanı olan çubuklar değil mi?
 
Slava :
Ve bunlar sıfır olmayan saniyelerle zamanı olan çubuklar değil mi?

EURUSD ve normal çubuklarla (bir dakikanın katları) gerçek keneler vardır.

Sorun, M1 dışındaki herhangi bir dönemde kararlıydı. Bu nedenle, video sorunsuz kaydedildi.


Ancak bir süre sonra sorun çoğalmayı bıraktı. Sembol, bu konudaki bir danışman tarafından oluşturuldu .

 

Hata 17.

Kene geçmişi tamamen kaybolur.

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

#define SIZE 100

void OnStart ()
{
   MathSrand (( uint ) TimeLocal ());
   const string Name = _Symbol + ( string ) MathRand ();
  
   MqlTick Ticks[];
  PRINT( CustomSymbolCreate (Name, NULL , _Symbol )); // Создали символ.
  PRINT( SymbolSelect (Name, true )); // Поместили в Обзор рынка
  PRINT( CopyTicksRange ( _Symbol , Ticks, COPY_TICKS_INFO , D'2019.06.01' * 1000 )); // Взяли тики
  
  PRINT( ArrayResize (Ticks, SIZE));     // Оставили только SIZE-тиков
  PRINT( CustomTicksAdd (Name, Ticks)); // Пробросили их все

   MqlTick NewTicks[];
  PRINT( CopyTicksRange (Name, NewTicks)); // Взяли тики, что в истории
   
//  PRINT(CustomTicksReplace(Name, 0, LONG_MAX, NewTicks)); // И перезаписали их .

  PRINT( CopyTicksRange (Name, Ticks)); // Убедились, что тиков в истории ровно SIZE
  PRINT( CustomTicksDelete (Name, Ticks[SIZE - 1 ].time_msc - 60 * 1000 , LONG_MAX )); // Удалили последнюю минуту
  PRINT( CopyTicksRange (Name, Ticks)); // Убедились, что тиков стало меньше на удаленное количество
}


Sonuç

 CustomSymbolCreate (Name, NULL , _Symbol ) = true
SymbolSelect (Name, true ) = true
CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO , D'2019.06.01' * 1000 ) = 533797
ArrayResize (Ticks, 100 ) = 100
CustomTicksAdd (Name,Ticks) = 100
CopyTicksRange (Name,Ticks) = 100
CustomTicksDelete (Name,Ticks[ 100 - 1 ].time_msc- 60 * 1000 , LONG_MAX ) = 1
CopyTicksRange (Name,Ticks) = 0


Yorumu altı çizili satırdan kaldırırsanız, komut dosyası düzgün çalışacaktır. Görünüşe göre eski Ekle keneler, Değiştir kenelerinin gittiği yere gitmiyor.

 

Hata 18.

Keneleri silerken, son çubuk kaybolur.

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

void OnStart ()
{
   MathSrand (( uint ) TimeLocal ());
   const string Name = _Symbol + ( string ) MathRand ();
  
   MqlTick Ticks[];
  PRINT( CustomSymbolCreate (Name, NULL , _Symbol )); // Создали символ.
  PRINT( SymbolSelect (Name, true )); // Поместили в Обзор рынка
  PRINT( CopyTicks ( _Symbol , Ticks)); // Взяли тики
  
  PRINT( CustomTicksReplace (Name, 0 , LONG_MAX , Ticks)); // Записали их.
  PRINT( CustomTicksDelete (Name, Ticks[ ArraySize (Ticks) - 1 ].time_msc - 60 * 1000 , LONG_MAX )); // Удалили последнюю минуту

   MqlTick LastTick[ 1 ];
  PRINT( CopyTicks (Name, LastTick, COPY_TICKS_ALL , 0 , 1 )); // Распечатали последний тик
   ArrayPrint (LastTick);

   MqlRates LastBar[ 1 ];
  PRINT( CopyRates (Name, PERIOD_M1 , 0 , 1 , LastBar)); // Распечатали последний бар
   ArrayPrint (LastBar);
}


Sonuç

 CustomSymbolCreate (Name, NULL , _Symbol ) = true
SymbolSelect (Name, true ) = true
CopyTicks ( _Symbol ,Ticks) = 2000
CustomTicksReplace (Name, 0 , LONG_MAX ,Ticks) = 2000
CustomTicksDelete (Name,Ticks[ ArraySize (Ticks)- 1 ].time_msc- 60 * 1000 , LONG_MAX ) = 25
CopyTicks (Name,LastTick, COPY_TICKS_ALL , 0 , 1 ) = 1
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[ 0 ] 2019.06 . 11 22 : 37 : 42 1.13284 1.13288 0.0000          0 1560292662809        6        0.00000
CopyRates (Name, PERIOD_M1 , 0 , 1 ,LastBar) = 1
                 [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
[ 0 ] 2019.06 . 11 22 : 36 : 00 1.13278 1.13284 1.13278 1.13279              13          3              0
 

Hata 19.

Yanlış spread hesaplaması.

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

void OnStart ()
{
   MathSrand (( uint ) TimeLocal ());
   const string Name = _Symbol + ( string ) MathRand ();
  
  PRINT( CustomSymbolCreate (Name, NULL , _Symbol )); // Создали символ.
  PRINT( SymbolSelect (Name, true )); // Поместили в Обзор рынка
  
   MqlTick Tick[ 1 ];
  
   if ( SymbolInfoTick ( _Symbol , Tick[ 0 ])) 
  {
     // Специально задаем отрицательный спред.
    Tick[ 0 ].bid = 1.11643 ;
    Tick[ 0 ].ask = 1.11632 ;        
    
    PRINT( CustomTicksAdd (Name, Tick)); // Пробросили тик.
    PRINT( SymbolInfoInteger (Name, SYMBOL_SPREAD )); // Смотрим его спред.
    
     ArrayPrint (Tick); // Смотрим сам тик.
  }
}


Sonuç

 CustomSymbolCreate (Name, NULL , _Symbol ) = true
SymbolSelect (Name, true ) = true
CustomTicksAdd (Name,Tick) = 1
SymbolInfoInteger (Name, SYMBOL_SPREAD ) = - 10
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[ 0 ] 2019.06 . 03 00 : 32 : 11 1.11643 1.11632 0.0000          0 1559521931040        6        0.00000
 

Hata 20. Hatalardan hariç tutulmuştur. Çözüm aşağıdaki dalda bulunur.

2085
Özel sembol özelliklerinin yanlış ayarlanması.
Sonuçta bir değişiklik var.
Özellikler, seçeneklerden birine göre ayarlandı

 CustomSymbolSetInteger (SName, SYMBOL_FILLING_MODE , ORDER_FILLING_FOK );     Результат: Filling == None
или
CustomSymbolSetInteger (SName, SYMBOL_FILLING_MODE , ORDER_FILLING_IOC );     Результат: Filling == Fill or Kill
или
CustomSymbolSetInteger (SName, SYMBOL_FILLING_MODE , ORDER_FILLING_RETURN );  Результат: Filling == Immediate or Cancel