mql5言語の特徴、微妙なニュアンスとテクニック - ページ 55

 
アレクセイ・ナヴォイコフ

もう一つの便利な方法は、protected inheritanceで、ベースクラスがすべてのメソッドを持ち、継承したクラスではGetだけを表示する。そして必要なときにベースクラスにもって くる。

保護された継承を使用したが、選択されたもので台無しにした。ありがとうございました。

しかし、Metaeditorは、これらのメソッドが利用できない場合でも、リストにダンプされるというバグをまだ修正していません。

今は確認していませんが、実験していたときは、メモリに保存されていたので、落ちませんでした。

 

注文を変更または削除する前に、チェックする必要があります。

OrderGetInteger(ORDER_STATE) == ORDER_STATE_PLACED 

SBにはこれがないので、自分でやるしかない。


テスターでこのチェックを行う意味はありません - 現在のすべての注文は常にこのステータスになっています。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

マーケットクローズ

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 は、ポジションロットの変更にのみ関連する。例えば、任意の口座タイプにおけるポジションの部分的な決済や、ポジションのネッティングなどです。

SL/TP レベルの変更は POSITION_TIME_UPDATE に影響を与えない。

言い換えると、POSITION_TIME_UPDATEは、取引履歴-取引に反映された修正にのみ影響されます。SL/TP-levelはこのような修正には適用されないので、影響はない。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

EAを再スタートさせる

fxsaber さん 2017.09.26 11:35

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

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

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;    // так без проблем
}
BODより

すべてここにある。

前者ではキャスト、後者ではアサインメントです。

親から子孫への派生は認めない

オブジェクトへの代入は、対応するコピー演算子の呼び出しであり、この場合、暗黙のA::operator=(const A &)

ありがとうございます。では、親コピー演算子は、公開継承の場合のみ、外部で利用可能なままなのですね。確認しました、その通りです。

struct A
{
  int i;
};

struct B : protected A {};

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

おいしいですか?

この構成では、追加のコピーコンストラクタ B::operator=(const A&) を宣言し、その中で A::operator= の呼び出しを "throw" する必要があります。

 

カスタムデータで標準指標の計算を実装するためのオプション(追加の指標を作成することなく)。

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

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

マーケットクローズ

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

カスタムシンボルは、Market Watchでは3000年単位で自由に設定できるため、ループから除外する必要があります。

 
MQL5では、次のように書くことが可能です。
void OnTick()
{  
  double Buffer[];
  
  CopyBuffer(iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE), 0, 0, 1, Buffer);
}

つまり、各ティックで ハンドルを「作成」します。新しいインディケータは作成されず、iMAの入力パラメータと以前のティックで実行されたインディケータとの比較にのみ時間が費やされます。つまり、MT4で行っていることと全く同じです。

 
fxsaber
MQL5では、このように書いても全く問題ありません。

つまり、各ティックで ハンドルを「作成」します。新しいインディケータは作成されず、iMAの入力パラメータと以前のティックで開始されたインディケータとの比較にのみ時間が費やされます。すなわち、MT4で行っていることと全く同じです。

性能測定は行いましたか?どれくらい性能が落ちるのか気になるところ。特にカスタムインジケーターの場合。