Benutzerdefinierte Symbole. Fehler, Bugs, Fragen, Vorschläge. - Seite 13

 
fxsaber:

Wenn es 00:00:01 ist, können Sie außerdem nicht CustomTicksAdd verwenden, um einen Balken umzuformen, der erst vor zwei Sekunden war.

Das können Sie natürlich nicht. Denn der Tick, der um 00:00:01 Uhr eingetroffen ist, sollte bereits den nächsten Balken bilden. In einer normalen Situation.

 
Slava:

Für den Prüfer ist der Tick von vorgestern der frische Tick von heute.

Ich verstehe, was Sie meinen. Ihre Übungen mit den benutzerdefinierten Tics von vor sechs Monaten haben eindeutig Testercharakter. Ihre Situation ist nicht normal (im Sinne der gängigen Praxis)

Was die nicht standardmäßige Verwendung von benutzerdefinierten Dokumenten betrifft. Dazu ist die Diskussion da, um Besonderheiten in verschiedenen Situationen zu erkennen und zu versuchen, sie zu lösen.

 
Slava:

Das wird natürlich nicht funktionieren. Denn ein Tick, der um 00:00:01 Uhr eingeht, sollte bereits den nächsten Balken bilden. In einer normalen Situation.

Stellen Sie sich einen Dienst vor, der die Ticks in einer Sekunde auslöst (vielleicht sogar weniger, wie es bei den Formeln üblich ist - 100 ms). Um Mitternacht verlieren die Balken dann oft die letzten Ticks des Tages.

 

Fehler 16.

M1-Balken sind vorhanden, aber andere Zeitrahmen werden nicht angezeigt.


Wie man es ironisch wiedergeben kann - ich weiß es nicht.
 
fxsaber:

Fehler 16.

M1-Balken sind vorhanden, aber andere Zeitrahmen werden nicht angezeigt.


Ich weiß nicht, wie ich es reproduzieren kann.
Sind das nicht die Balken, bei denen die Sekunden nicht Null sind?
 
Slava:
Sind das nicht die Balken mit einer von Null verschiedenen Sekundenzeit?

Beim EURUSD gibt es echte Ticks und die Balken sind normal (Vielfaches einer Minute).

Das Problem war in jedem anderen Zeitraum als M1 stabil. Deshalb konnte das Video ohne Probleme aufgenommen werden.


Aber nach einiger Zeit hörte das Problem auf zu spielen. Das Symbol wurde von dem Expert Advisor aus diesem Zweig erstellt.

 

Fehler 17.

Die Zeckengeschichte verschwindet vollständig.

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


Ergebnis

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


Wenn Sie den Kommentar in der unterstrichenen Zeile entfernen, funktioniert das Skript korrekt. Offenbar passen die alten Add-Typen nicht dorthin, wo die Replace-Typen hingehören.

 

Fehler 18.

Wenn die Ticks entfernt werden, geht der letzte Balken verloren.

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


Ergebnis

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
 

Fehler 19.

Falsche Berechnung des Spreads.

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


Ergebnis

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
 

Fehler 20. aus den Fehlern entfernt. Die Lösung finden Sie in der Verzweigung unten.

2085
Falsche Einstellung von benutzerdefinierten Symboleigenschaften.
Es wird eine Verschiebung des Ergebnisses beobachtet.
Die Eigenschaften wurden gemäß einer der folgenden Optionen festgelegt

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