まだ読み終えていない。インプットは良い例だ。
1.
input string symbol_ = "EURGBP"; // 取引商品(シンボル) input ENUM_TIMEFRAMES timeframe_ = PERIOD_H1; // スケジュール期間 input group "===オープニング・シグナルのパラメーター" input int signalPeriod_ = 13; // 出来高平均のローソク足の本数 input double signalDeviation_ = 0.3; // 1順目オープン時の平均からの相対偏差 input double signaAddlDeviation_ = 1.0; // 2回目以降の注文を開始する際の平均からの相対的乖離 input group "===保留中の注文パラメータ" input int openDistance_ = 0; // 価格から未決注文までの距離 input double stopLevel_ = 10500; // ストップロス(ポイント) input double takeLevel_ = 465; // テイクプロフィット(単位:pips) input int ordersExpiration_ = 1000; // 保留注文の有効期限(分) input group 「資本管理オプション input int maxCountOfOrders_ = 3; // 同時にオープンされた注文の最大数
int OnInit() { expert = new CAdvisor(new CVolumeReceiver(magic_)); expert.Add(new CSimpleVolumesStrategy( symbol_, timeframe_, fixedLot_, signalPeriod_, signalDeviation_, signaAddlDeviation_, openDistance_, stopLevel_, takeLevel_, ordersExpiration_, maxCountOfOrders_) ); // ストラテジーのインスタンスを1つ追加する return(INIT_SUCCEEDED); }
class CSimpleVolumesStrategy : public CStrategy { private: //--- オープニング・シグナルのパラメータ int m_signalPeriod; // 出来高平均のローソク足の本数 double m_signalDeviation; // 1順目オープン時の平均からの相対偏差 double m_signaAddlDeviation; // 2回目以降の注文を開始する際の平均からの相対的乖離 //--- 保留注文のパラメータ int m_openDistance; // 価格から未決注文までの距離 double m_stopLevel; // ストップロス(ポイント) double m_takeLevel; // テイクプロフィット(単位:pips) int m_ordersExpiration; // 保留注文の有効期限(分) //--- 資本管理パラメーター int m_maxCountOfOrders; // 同時にオープンされた注文の最大数
4.
public: //--- パブリック・メソッド CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders );
5-6.
//+------------------------------------------------------------------+ //| コンストラクタ| //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, double p_fixedLot, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders) : // 初期化リスト CStrategy(p_symbol, p_timeframe, p_fixedLot), // 基本クラスのコンストラクタを呼び出す m_signalPeriod(p_signalPeriod), m_signalDeviation(p_signalDeviation), m_signaAddlDeviation(p_signaAddlDeviation), m_openDistance(p_openDistance), m_stopLevel(p_stopLevel), m_takeLevel(p_takeLevel), m_ordersExpiration(p_ordersExpiration), m_maxCountOfOrders(p_maxCountOfOrders) { ArrayResize(m_orders, m_maxCountOfOrders); // ティックボリュームを取得するためにインジケータをロードする。 iVolumesHandle = iVolumes(m_symbol, m_timeframe, VOLUME_TICK); // ティック・ボリュームのアレイ・レシーバーのサイズと必要なアドレッシングを設定する。 ArrayResize(volumes, m_signalPeriod); ArraySetAsSeries(volumes, true); }
各入力パラメーターは5、6回規定されなければならない。
記事を読む著者に感謝する。私たちはどのような方向に進むことができるのか、よく探っている。
強力な観察であり、批判することに意味はなく、建設的な部分、つまり提案することに直行すべきである。
この記事では、仮想取引のコンセプトと、仮想取引と現実取引の一方向同期について論じている。テスターのための一例としては十分だろう。しかし、あくまで例としてである。
実際には、このようなTSポートフォリオはEX5から構築される(Testerは無料) - 実行し、シングルランのtstファイルを取得し、そこから任意のMMルールでジョイントシングルランを作成する。
テスターにはスピードが必要だ。仮想化の有無で最適化のスピードがどの程度変わるかを見積もってみてください。
コンセプト自体は実際の取引に適しています。しかし、シンクロナイザーには仮想取引の履歴を残しておく必要があります。いろいろなことがある。控えめに言っても深刻な方法だ。
アーキテクチャ上、仮想化はTSから切り離されることになる。現在の仮想化のソースは350Kbしかない。そして、それは成長するだろう。
仮想取引のための取引APIの選択には慎重にアプローチする。利用可能なものから選択する。TSをプログラムするのができるだけ簡単なAPIを優先するのが論理的だ。私は、すべての取引プラットフォームが独自の自転車 - 取引APIを発明するための一般的な慣行を本当に理解していない。OOPエンティティを "箱から出して "使うなど。この意味で、MQは良い方向に進みました - OOPなしのすべてのAPI。
しかし、今ではFXで確実に儲ける方法は明らかです。以前は、エリオット波動についてカモに教えることしか考えていませんでしたが、まだ素晴らしい方法があることがわかりました))。
私はここで、テストの5年間の利益の19%が1000ドル未満のドローダウンの条件で一定のロット、つまり1%によって作られたことを指摘せずにはいられない。最大ドローダウンが10%でもあることに注目し、可変ロットを使用すれば、結果はさらに興味深いものになるだろう。
//+------------------------------------------------------------------+ //|SimpleVolumesExpertSingle.mq5 //|著作権 2024, Yuriy Bykov||ユーリイ・バイコフ //|https://www.mql5.com/ja/users/antekov //+------------------------------------------------------------------+ #property copyright "Copyright 2024, Yuriy Bykov" #property link "https://www.mql5.com/ja/articles/14107" #property description "ローソク足のティックボリュームが平均ボリュームを超えた瞬間のExpert Advisorのペンディングオーダー" #property description 「現在のキャンドルの方向へ。 #property description 「まだポジションになっていない注文は、満期時に削除される。 #property description "オープンポジションはSLまたはTPでのみクローズする" #include "Advisor.mqh" #include "SimpleVolumesStartegy.mqh"
誤字だ。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事「多通貨エキスパートアドバイザーの開発(第2回):取引戦略の仮想ポジションへの移行」はパブリッシュされました:
複数の戦略を並行して動作させる多通貨エキスパートアドバイザー(EA)の開発を続けましょう。マーケットポジションを建てることに関連するすべての作業を、戦略レベルから、戦略を管理するEAのレベルに移してみましょう。戦略自体は、マーケットポジションを持つことなく、仮想の取引のみをおこないます。
前回の記事では、様々な取引戦略と同時に機能する多通貨EAの開発に着手しました。最初の段階では2種類の戦略しかありませんでした。これらは同じ取引アイデアの実装を表し、同じ取引商品(銘柄)とチャート期間(時間枠)で動作しました。両者の違いはパラメータの数値のみでした。
また、希望する最大ドローダウンレベル(入金の10%)に基づいて、ポジションの最適なサイズを決定しました。それぞれの戦略についてこれを別々におこないました。この2つの戦略を組み合わせると、所定のドローダウンレベルを維持するために、建てたポジションのサイズを小さくしなければなりませんでした。減少幅は2つの戦略については小さいものでしたが、何十、何百もの戦略インスタンスを組み合わせたい場合はどうするのでしょうか。戦略によっては、ブローカーが許容するポジションの最小サイズより小さい値にポジションサイズを縮小しなければならないことも十分にあり得ます。この場合、これらの戦略は取引に参加できません。どうすればうまくいくのでしょうか。
そのためには、戦略から、独自にポジションを建てたり、予約注文を出したりする権利を奪います。戦略は仮想取引をおこなうだけでよいのです。つまり、ある大きさのポジションをどのレベルで建てるべきかを記憶し、要求に応じて今どの程度の数量を建てるべきかを報告します。すべての戦略を調査し、所定のドローダウンを維持するためのスケーリングを考慮して、必要な総量を計算した後にのみ、実際のマーケットポジションを建てます。
今は、この方法の適合性をテストすることにしか興味がなく、その実装の効率性には興味がありません。したがって、この記事の枠組みの中で、この方法の少なくともいくつかの実用的な実装を開発しようと試みます。間違いを避ける方法に関する知識がすでにあるため、後で建築の観点からより美しいものを構築するのに役立ちます。
作者: Yuriy Bykov