記事"トレーディングモデルに基づくマルチエキスパートアドバイザーの作成"についてのディスカッション - ページ 5

 

MetaTrader 5 Client Terminal build 381

...

MQL5:標準ライブラリが 更新されました:CDealInfo、CHistoryOrderInfo、COrderInfo、CPositionInfo クラスのType()メソッドがそれぞれDealType()、OrderType()、PositionType() に名称変更されました。

...


このモデルはベースとなるトレード・クラスに依存しているため、そのインターフェイスの些細な変更でさえも重要です。この場合、TableOrders.mqh ファイルの Type() メソッドを対応する OrderType() に変更するだけで、エラーは簡単に修正できます。

近い将来、この記事に添付されているコードは、コンパイラとターミナルの最新ビルドで正しく動作するように更新される予定です。

 

chr1sch4n:エラーはありません...あなたが書き直したコードは同じです。

C言語では、case文はフォールスルーされます。そのため、break文を入れなければなりません。したがって、Buyは次の文にフォールスルーされ、まだ順番に実行されるはずです。

参考:http://en.wikipedia.org/wiki/Switch_ statement ; sectionC, C++, Java, PHP, ActionScript, JavaScript; "this is a classic example of omitting thebreak line to allow for fall through" 「これは、フォールスルーを可能にするためにブレーク 行を省略している典型的な例です」

乾杯

 
Lugner:

リクエスト - 英語ファイルでのコメントを翻訳できますか?

修正しました。ありがとうございます。
 
今まで読んだ中で最高の記事のひとつだ。
 

記事にあるような印象的なバックテストが できないようです。

 

"m_timing " 変数については、別途説明する価値がある。Expert Advisorの動作の過程で、特定の時間間隔で特定のイベントを呼び出す必要があります。モデルによって時間間隔が異なることがあるため、OnTimer()関数はこれには適していません。

たとえば、新しいバー ごとに呼び出す必要があるイベントがあります。1時間足チャートで取引するモデルの場合、そのようなイベントは1時間ごとに呼び出す必要があり、日足チャートで取引するモデルの場合、新しい日足バーごとに呼び出す必要があります。これらのモデルが異なる時間設定を持っていることは明らかであり、それに応じてそれぞれのモデルに格納されるべきである。CModelクラスに含まれるt_period構造体により、これらの設定を別々に、それぞれのモデルに格納することができます。

この構造体は以下のようになります:

struct t_period
{
 большая структура 
};

ご覧の通り、通常のタイムフレームの列挙が 含まれています。新しいバーが発生したかどうかを 調べるには、最後のバーの時刻と t_period 構造体に記録されている時刻を比較する必要があります。もし時刻が一致しなければ、新しいバーが発生したことになり、構造体の時刻は現在のバーの時刻に更新され、肯定的な結果(true)が返されます。最後のバーの時刻と構造体の時刻が一致すれば、それは新しいバーがまだ発生していないことを意味するので、否定結果(false)を返せばよい。

以下に、説明したアルゴリズムに従って動作する関数を示します:

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
большой swich
} 

"

もちろん、私は初心者プログラマーに過ぎませんが、(変数m_timingを単なるdatetimeにしながら)そうするために新しいバーの開始を決定することは可能かもしれません:

もし結論が間違っていたら、あらかじめお詫びし、訂正をお願いします。私が間違っていなければ、このサイトと、特にここで働いているすべての人々に感謝します - 記事、ドキュメントの書き込み - 私は何かを理解し始めた。

bool timing(string symbol, ENUM_TIMEFRAMES tf, t_period &timeframes)
{
   int rez;
   MqlRates raters[1];
   rez=CopyRates(symbol, tf, 0, 1, raters);
   if(rez==0)
   {
      Print("Error timing");
      return(false);
   }
   if (TimeCurrent()-raters.time)>PeriodSeconds(tf) return(true); else return(false);
   
} 


追伸:ところで、素晴らしい記事をありがとう。

 

こんにちは、

ペア取引(別のシンボル)をサポートするために、モデルやProcessing()関数を どのように拡張できますか?現在、インジケータとその後の取引はすべて同じシンボルのみで動作しています。Symbol1とSymbol2を追加して、Symbol1の買いとSymbol2の売りを同時に行えるようにするにはどうすればよいでしょうか?

よろしくお願いします。

追伸:または、Symbol2上のインジケータの動作に基づいてSymbol1を売買する...

 
P_Cherry:

こんにちは、

ペア取引(別のシンボル)をサポートするために、モデルやProcessing()関数をどのように拡張できますか?現在、インジケータとその後の取引はすべて同じシンボルのみで動作しています。Symbol1とSymbol2を追加して、Symbol1の買いとSymbol2の売りを同時に行えるようにするにはどうすればよいでしょうか?

よろしくお願いします。

追伸:あるいは、Symbol2上のインジケータの動作に基づいて、Symbol1を売買する...。

可能でしょうか?
 
Automated-Trading:
修正しました。ありがとう。
ありがとう。
 

こんにちは、

素晴らしい記事をありがとうございます。

ReplacedDelayedOrdersという関数の 中に次のような行があります: for(int b=0;i<history_orders;b++)

これは無限ループを引き起こすと思うのですが、間違っていますか?

コード行は次のようにしなければならないと思います: for(int b=0;b<history_orders;b++)

さようなら、T。