Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 13

 
fxsaber:

De plus, s'il s'agit de 00:00:01, vous ne pouvez pas utiliser CustomTicksAdd pour remodeler une barre qui était juste deux secondes auparavant.

Bien sûr, vous ne pouvez pas. Parce que le tick qui est arrivé à 00:00:01 devrait déjà former la prochaine barre. Dans une situation normale.

 
Slava:

Pour le testeur, le tick d'avant-hier est le tick frais d'aujourd'hui.

Je comprends votre point de vue. Vos exercices avec les tics personnalisés d'il y a six mois sont d'une nature nettement expérimentale. Votre situation n'est pas normale (au sens de la pratique courante).

Pour ce qui est de l'utilisation non standard de ceux qui sont personnalisés. C'est à cela que sert la discussion, à identifier les particularités des différentes situations et à essayer de les résoudre.

 
Slava:

Bien sûr, cela ne fonctionnera pas. Parce qu'un tick arrivant à 00:00:01 devrait déjà former la prochaine barre. Dans une situation normale.

Imaginez un service qui chronomètre les tics en une seconde (peut-être moins, comme vous le faites habituellement pour les formules - 100 ms). Puis, à minuit, les barres perdent souvent les derniers ticks de la journée.

 

Bug 16.

Les barres M1 sont présentes, mais les autres horizons temporels ne sont pas affichés.


Comment le reproduire de manière ironique - je ne sais pas.
 
fxsaber:

Bug 16.

Les barres M1 sont présentes, mais les autres horizons temporels ne sont pas affichés.


Je ne sais pas comment le reproduire.
Ces barres ne sont-elles pas celles qui ont des secondes non nulles ?
 
Slava:
Ce ne sont pas les barres qui ont un temps avec des secondes non nulles ?

Il y a de vrais ticks avec EURUSD et les barres sont normales (multiples d'une minute).

Le problème était stable sur toute période autre que M1. C'est pourquoi la vidéo a été enregistrée sans aucun problème.


Mais après un certain temps, le problème s'est arrêté. Le symbole a été créé par le conseiller expert de cette branche.

 

Bug 17.

L'histoire de la tique disparaît complètement.

#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)); // Убедились, что тиков стало меньше на удаленное количество
}


Résultat

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


Si vous supprimez le commentaire de la ligne soulignée, le script fonctionne correctement. Apparemment, les anciens types d'ajouts ne vont pas là où vont les types de remplacements.

 

Bug 18.

Lorsque les ticks sont supprimés, la dernière barre est perdue.

#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);
}


Résultat

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
 

Bug 19.

Calcul erroné de l'écart.

#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); // Смотрим сам тик.
  }
}


Résultat

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
 

Le bogue 20. a été retiré des bogues. Solution trouvée dans la branche ci-dessous.

2085
Paramétrage incorrect des propriétés du symbole personnalisé.
Un changement de résultat est observé.
Les propriétés ont été définies selon l'une des options suivantes

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


Raison: