Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 55

 
Alexey Navoykov:

Eine andere bequeme Variante wäre die geschützte Vererbung, bei der die Basisklasse über alle Methoden verfügt und in einer geerbten Klasse nur Get angezeigt wird, dasbei Bedarf in die Basisklasse übernommen wird.

Ich habe die geschützte Vererbung verwendet, bin aber mit der ausgewählten Vererbung durcheinander gekommen. Ich danke Ihnen!

Aber Metaeditor hat immer noch nicht den Fehler behoben, dass all diese Methoden in die Liste aufgenommen werden, auch wenn sie nicht verfügbar sind.

Ich habe es jetzt nicht überprüft, aber als ich experimentiert habe, war es im Speicher gespeichert und fiel nicht heraus.

 

Bevor Sie einen Auftrag ändern oder löschen, müssen Sie eine Prüfung durchführen

OrderGetInteger(ORDER_STATE) == ORDER_STATE_PLACED 

SB verfügt nicht über diese Möglichkeit, also müssen Sie es selbst tun.


Es macht keinen Sinn, diese Prüfung im Tester durchzuführen - alle laufenden Aufträge haben immer diesen Status.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Markt geschlossen

fxsaber, 2017.09.22 09:45

// Время последнего тика символа
long GetSymbolTime( const string Symb )
{
  MqlTick Tick;
  
  return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0);
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
  long Res = 0;
  
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const long TmpTime = GetSymbolTime(SymbolName(i, true));
    
    if (TmpTime > Res)
      Res = TmpTime;
  }
  
  return(Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
  static ulong StartTime = GetMicrosecondCount();
  static long PrevTime = 0;
  
  const long TmpTime = GetMarketWatchTime();
  
  if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount();
  }
  
  return(PrevTime + (long)((GetMicrosecondCount() - StartTime) / 1000));
}

void OnInit()
{
  MarketBookAdd(_Symbol);
}

void OnDeinit( const int )
{
  MarketBookRelease(_Symbol);
}

string TimeToString( const long Value )
{
  return((string)(datetime)(Value / 1000) + "." + (string)IntegerToString(Value % 1000, 3, '0'));
}

void OnBookEvent( const string& )
{
  Comment(TimeToString(GetCurrenTime()));
}
 

POSITION_TIME_UPDATE bezieht sich nur auf die Änderung des Bestandsloses. Zum Beispiel eine teilweise Schließung einer Position in einer beliebigen Kontoart oder eine Aufrechnung einer Position.

Änderungen der SL/TP-Ebenen haben keinen Einfluss auf POSITION_TIME_UPDATE.

Paraphrasierend: POSITION_TIME_UPDATE ist nur von Änderungen betroffen, die in der Trade History - Trades - reflektiert werden. Die SL/TP-Stufen gelten nicht für solche Änderungen, so dass sie diese nicht beeinflussen.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wiedereinleitung einer EA

fxsaber, 2017.09.26 11:35

// Перезапуск себя
bool ExpertReopen()
{
  return(ChartSaveTemplate(0, __FILE__) && ChartApplyTemplate(0, __FILE__));
}
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.09.08 11:11

struct A
{
  int i;
};

struct B : public A {};

void OnStart()
{
  A a = {0};
  B b;
  
  b = (B)a; // cannot cast 'A' to 'B'
  
  b = a;    // так без проблем
}
Vom BSB

Es steht alles hier drin.

Im ersten Fall handelt es sich um eine Besetzung, im zweiten Fall um eine Zuweisung.

Die Ableitung vom Elternteil auf den Nachkommen ist unzulässig

Die Zuweisung an ein Objekt ist ein Aufruf des entsprechenden Kopieroperators, in diesem Fall implizit A::operator=(const A &)

Danke, der Operator "Elternkopie" bleibt alsonur im Falle der öffentlichen Vererbung außerhalb verfügbar. Ich habe es überprüft, das ist richtig.

struct A
{
  int i;
};

struct B : protected A {};

void OnStart()
{
  A a = {0};
  B b;
  
  b = a;    // 'A::operator=' - cannot access protected member function
}

Ist es gut?

Bei diesem Konstrukt sollten wir einen zusätzlichen Kopierkonstruktor B::operator=(const A&) deklarieren und den Aufruf von A::operator= in diesen "werfen"

 

Optionen für die Berechnung von Standardindikatoren auf benutzerdefinierten Daten (ohne Erstellung zusätzlicher Indikatoren).

Базовые индикаторы, применяемые к кастомному инструменту
Базовые индикаторы, применяемые к кастомному инструменту
  • 2017.09.27
  • www.mql5.com
Здравствуйте. Задавал этот вопрос на английском форуме...
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Markt geschlossen

fxsaber, 2017.09.22 09:45

// Время последнего тика символа
long GetSymbolTime( const string Symb )
{
  MqlTick Tick;
  
  return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0);
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
  long Res = 0;
  
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const long TmpTime = GetSymbolTime(SymbolName(i, true));
    
    if (TmpTime > Res)
      Res = TmpTime;
  }
  
  return(Res);
}

Die benutzerdefinierten Symbole müssen aus der Schleife herausgenommen werden, da sie in Market Watch auf jede beliebige Zeit, sogar 3000 Jahre, eingestellt werden können.

 
In MQL5 ist es möglich, es wie folgt zu schreiben
void OnTick()
{  
  double Buffer[];
  
  CopyBuffer(iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE), 0, 0, 1, Buffer);
}

D.h. bei jedem Tick wird ein Griff "erstellt". Es werden keine neuen Indikatoren erstellt, sondern die Zeit wird nur für den Vergleich der iMA-Eingabeparameter mit den Indikatoren verwendet, die bei früheren Ticks ausgeführt wurden. D.h. genau dasselbe, was in MT4 gemacht wird.

 
fxsaber:
In MQL5 ist es durchaus akzeptabel, es so zu schreiben

D.h. bei jedem Tick einen Griff "erstellen". Neue Indikatoren werden nicht erstellt, die Zeit wird nur für den Vergleich der iMA-Eingabeparameter mit den Indikatoren verwendet, die zu früheren Ticks gestartet wurden. D.h. genau dasselbe, was in MT4 gemacht wird.

Haben Sie die Leistung gemessen? Ich bin gespannt, wie stark die Leistung dadurch beeinträchtigt wird. Vor allem im Fall von benutzerdefinierten Indikatoren.