記事「多通貨エキスパートアドバイザーの開発(第2回):取引戦略の仮想ポジションへの移行」についてのディスカッション - ページ 2

 
Yuriy Bykov #:

この選択肢はまだ考えたことがありませんが、それも可能であることは覚えておきます。しかし、マーケットから既製のExpert Advisorの良いセットを見つけることができた場合、どのようにそれらを一緒に使用することができますか?選択したMMパラメータでセット全体を実行するだけですか?

はい。

 

Yuriy Bykov #:

MT5の取引機能には慣れている。

得意なのですが、このような理由で断念しました。

取引、自動取引システム、取引戦略のテストに関するフォーラム

多通貨エキスパートアドバイザーの開発(パート2)」の記事についての議論:仮想ポジション取引戦略への移行"

fxsaber、2024.02.07 01時03分

仮想取引用の取引APIの選択は慎重に。利用可能なものから選択します。TSをプログラムするのができるだけ簡単なAPIを優先するのが論理的です。 私は本当に独自の自転車 - 取引APIを発明するすべての取引プラットフォームの一般的な慣行を理解していない。OOPエンティティを "箱から出して "使うなど。この意味で、MQは良い方向に進みました - OOPなしのすべてのAPI。

 
fxsaber #:

コンセプト自体は実際の取引に適している。しかし、そこではシンクロナイザーが仮想取引の履歴を保持しなければならない。いろいろなことがある。控えめに言っても、深刻な道のりだ。

実際の取引で、なぜ仮想取引の履歴を残さなければならないのか、私には理解できない。おそらく、「仮想」の解釈が少し違うのだろう。私は仮想ポジションと現実のポジションを常に同期させているので、履歴を残す必要性に遭遇したことがありません。

 
テスト用のEAファイルはどこで入手できますか?
 
fxsaber #:

アーキテクチャ的には、仮想化はTCから切り離されるだろう。

つまり、TSはOrderSend()のような通常の取引関数を使用し、我々のライブラリを使って仮想ポジションを使用するようにオーバーライドするのですか?

 
fxsaber #:

仮想取引用の取引APIを慎重に選択する。利用可能なものの中から選ぶ。TSをプログラムするのができるだけ簡単なAPIを優先するのが論理的である。

実際、私は2021年末からすでに自分のTSの仮想取引にAPIを使っている。もちろん、ポジションと未決注文のための2つの一般的なメソッド、Open()とClose()を使うだけで、必要なものはすべてAPIで実装できるようになりました。

あなたのバーチャル・ ライブラリを見つけるのが間に合わず、申し訳ありませんでした。)

 
summertop #:
テスト用のEAファイルはどこで入手できますか?

記事の最後に添付ファイルのリストがあります。

 
Yuriy Bykov #:

ここで、なぜ現実の取引のためにバーチャルな取引履歴を残さなければならないのかが理解できなかった。おそらく、私たちは「仮想」という概念について少し異なる解釈をしているのでしょう。バーチャルのポジションとリアルのポジションは常に同期していますし、しばらくの間は同期をオフにすることもできません(まだできないのでしょうか)。

  1. あるポジションとそのテイクアウトでバーチャルとリアルを同期。
  2. ティックがテイクアウトに達した:バーチャルポジションではトリガーされ、リアルポジションではテイクアウトのリジャック(リミッター)。

仮想市場にはポジションがないため、実ポジションを成行注文で決済することはできません(ロールオーバー、成行注文の大口スリップなど)。

価格は再び武井に触れることなく、反対方向に進んだ。仮想口座のクローズしたポジションの履歴にテイクを残すことは可能だと思われる。しかし、価格がそれに達することはないかもしれない。では、どの水準で同期させればよいのだろうか。

そして、常に取引を行う仮想端末が登場します。それはシグナル・カーネルを持っています。そして、それは実際の市場にぶら下がっているポジションを閉じるためにのみ必要です。

一般的に、それは大きなトピックです。私はリアルと同期するために3つの仮想カーネルを持っています:

  1. 時間制約のある取引を行うカーネル - リアルとは同期しない。
  2. BestIntervalは最初の仮想化にプッシュされる。- このカーネルは実物と同期してポジションをオープンします。
  3. 時間的制約なしに取引するカーネル (常に取引中) - ポジションを閉じるために実物と同期。

 
Yuriy Bykov #:

つまり、TSはOrderSend()のような通常の取引関数を使用し、我々は仮想ポジションを使用するためにそれらをオーバーライドするためにライブラリを使用するのですか?

はい、この原則はTSの何かを書き換える必要はありません。TSはどこで取引しているか分からないので、コードは変更されません。

 
fxsaber #:

入力が良い例だ。各入力パラメータは5、6回書く必要がある。

私は入力によるリファクタリングを行った。その結果、以下のようなコードになった。

//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit() {
   expert = new CAdvisor(new CVolumeReceiver(magic_));

   // ストラテジーのインスタンスを1つ追加する
   expert.Add(new CSimpleVolumesStrategy( symbol_, inStrategyInput + inSimpleVolumesStrategyInput));

   return(INIT_SUCCEEDED);
}
   InputBase.fixedLot = NormalizeDouble(0.01 / 0.16 * depoPart_, 2);
   const double Array0[] = {13, 0.3, 1.0, 0, 10500, 465, 1000, 3};
   strategies[0] = new CSimpleVolumesStrategy("EURGBP", InputBase + Input[Array0]);
//+------------------------------------------------------------------+
//| コンストラクタ|
//+------------------------------------------------------------------+
CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, const string sInputs ) : CStrategy(p_symbol, sInputs)
{
   this.Input = sInputs;

   ArrayResize(m_orders, this.Input.maxCountOfOrders);

   // ティックボリュームを取得するためにインジケータをロードする。
   iVolumesHandle = iVolumes(m_symbol, this.InputStrategy.timeframe, VOLUME_TICK);

// ティック・ボリュームのアレイ・レシーバーのサイズと必要なアドレッシングを設定する。
   ArrayResize(volumes, this.Input.signalPeriod);
   ArraySetAsSeries(volumes, true);
}
ファイル: