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

 
アンドレイ・ハチムリアンスキー

性能測定は行いましたか?どれくらい遅くなるのか気になるところです。特にカスタムインディケーターでは。

計測していませんが、MT4より遅いということはないはずです。

測定
#define  AMOUNT 1 e7
void OnStart()
{  
  int handle = iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE);
  const ulong StartTime = GetMicrosecondCount();
  
  for (int i = 0; i < AMOUNT; i++)
    handle = iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE);

  Print((string)((GetMicrosecondCount() - StartTime) / AMOUNT) + " mcs per iMA");
  Print(handle);    
}


その結果

0.3383469 mcs per iMA


3分の1マイクロ秒のテスト。つまり、1,000万刻みで1回実行すると、3秒遅くなる。

 
fxsaber

測定

ハンドルの作成+ループ内の値の取得をオリジナル版と比較しなかったのは不思議ですね、その違いが気になるところです。

 
アンドレイ・ハチムリアンスキー

ハンドルの作成ループでの値の取得をオリジナル版と 比較しなかったのは不思議ですが、その違いが興味深いところです。

同じハンドルから値を取っているため。iMAは常に同じハンドルに同じパラメータを付けて返します。

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

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

面白いデザインですね。

この方法で、OnInitでハンドルを作成した場合の速度を確認してください。

 
ヴィタリー・ムジチェンコ

この方法で、OnInitのハンドル作成時の速度を確認してください。

それは、あなたの選択肢と比較した場合です。

 

標準のOrderCalcProfit()とOrderCalcMargin()の機能をクロスプラットフォームで置き換えるにはどうしたらいいですか?すでにどこかにあったような気がするのですが、こちらでは見当たりませんね~、眠かったのかな・・・。でも、検索して1時間以内には目が覚めたはずです :)

 
アルチョム・トリシキン

標準のOrderCalcProfit()とOrderCalcMargin()関数をクロスプラットフォーム化するためにどのように置き換えればよいですか?すでにどこかに掲載されているようですが、こちらでは見当たりません......もしかしたら、私が起きていたのかもしれませんが......。でも、1時間の検索中に目が覚めてしまったのでしょう :)

https://www.mql5.com/ru/search#!keyword=myordercalcmargin&module=mql5_module_forum

MQL5.Community
MQL5.Community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
fxsaber

https://www.mql5.com/ru/search#!keyword=myordercalcmargin&module=mql5_module_forum

:)

SymbolInfoMarginRate()は、4.0では存在しない。という質問を投げかけました。

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

mql5言語の特殊性、ヒントとコツ

アルチョム・トリシキン さん 2017.10.06 06:36

標準のOrderCalcProfit()とOrderCalcMargin()を置き換えて、クロスプラットフォーム 化できるものは何ですか?すでにどこかにあったようなのですが、ここでは見つけられず、眠いのかもしれません...。でも、1時間の検索中に目が覚めればよかったんですけどね :)

また、OrderCalcProfit()については、何もありません。
 

語学の機会ではなく、贈り物

struct MQLTICK : public MqlTick
{
  bool operator >( const MqlTick &Tick )
  {
    return(this.bid > Tick.bid);
  }

  bool operator <( const MqlTick &Tick )
  {
    return(this.ask < Tick.ask);
  }
};

void OnStart()
{  
  MQLTICK Ticks[];
  
  Print(CopyTicks(_Symbol, Ticks));
  
  Print(Ticks[0] < Ticks[1]);
}
 
fxsaber

語学の機会ではなく、贈り物

つかみどころのないランタイムエラーという名の贈り物

struct MqlTick1 : MqlTick {        };
struct MqlTick2 : MqlTick { int i; };
void Copyticks( MqlTick& []) {}
void OnStart()
{
        MqlTick1 ticks1[];
        MqlTick2 ticks2[];
        int i1 = ::CopyTicks( _Symbol, ticks1 ); //нормально ??????????????
                   Copyticks(          ticks1 ); //error: 'ticks1' - parameter conversion not allowed
        int i2 = ::CopyTicks( _Symbol, ticks2 ); //нормально ??????????????
        Print( "i2=", i2, ":", GetLastError()); //Результат: -1:4006
}

CopyTicksはCopyticksよりどのように優れていますか?

そして、その結果が常に-1であるのはなぜか。このようなエラー(4006)はコンパイル時に報告されるべきです。

理由: