システムトレード 게시글

自己最適化RSI/MFIトレーダー - MetaTrader 4用のシステムトレード

첨부파일
19392.zip (4.86 KB, 다운로드 0회)

自分自身で最適化されるロボットを持つのは私の夢です。そうすれば、常に最良の値で動いていることが分かるからです。これは、私の夢の一部を現実にするための控えめな試みです。添付されたエキスパートアドバイザーは、取引に使用する買われすぎと売られすぎのレベルを最適化します。このコンセプトを他の人が引き継いで、さらに素晴らしいものを作り出してくれることを願っています。もしそうしたら、ぜひ教えてください。また、上の星を使って私のロボットを評価するのを忘れないでください。この戦略は、正しい設定を使えば、任意の通貨ペアや任意の時間枠に適用できます。

このロボットには、いくつかの入力項目があります。私が遊びながら楽しんでいる追加機能も含めていますので、どうぞお楽しみください。

入力項目

  • magic = 4376 - このEAのユニークな番号です。
  • 最適化期間 = 144 - 最適化を行うバーの数です。例えば、1時間のチャートを使用して144を選択すると、ロボットは144時間(6日間)遡って分析します。
  • inAggressive = false - エキスパートを攻撃的にしますか?リスクがあります。攻撃的モードでは、ロボットはより攻撃的に取引を行います。買われすぎや売られすぎのレベルの交差を待つ代わりに、最近の買いが売りよりも利益を上げている場合は買い取引を行います。
  • inTradeReverse = false - 取引方向の逆転。逆取引は、取引の方向を切り替えます。
  • inOneOrderAtATime = true - 同時に1つの注文のみを開きますか?真の場合、ロボットは同時に1つの注文のみを持ち、偽の場合はエントリー条件に従って無制限の注文を開きます。
  • Lot_sizing_dynamic_invalidates_static - ロットサイズのメカニクスと他の入力を分けるための区切りです。
  • Lots = 0.01 - 注文の静的ロットサイズ。注文のロットサイズを静的な数字で指定します。
  • inUseDynamicLotSize = true - 動的ロットサイズを使用します。静的ロットサイズの代わりに動的ロットサイズを使用します。ただし、動的ロットサイズが無効となった場合、ロボットは静的ロットサイズにデフォルトで戻ります。
  • inPercentageOfRisk = 2 - 各取引でリスクを負うバランスの%(2は2%を示します)。動的ロットサイズを使用する場合、ロットサイズをバランスのパーセンテージとして指定します。2は2パーセントに相当します。0.02と入力する必要はありません。このように入力すると、使用されるパーセンテージは非常に小さくなります。最大で使用できるパーセンテージは10%です。
  • Index_Indicator_Values - インデックス指標のパラメーターと他の入力を分けるための区切りです。
  • indicator index = _RSI_ - 使用するインデックス指標を選択します。現在の選択肢は相対力指数(RSI)またはマネーフロー指数(MFI)です。
  • IndicatorTopValue = 100 - 取引する際の最上値です。インディケーターを使用して取引する際の最上値を示します。インデックス指標のすべての値を考慮する場合は100のままにします。
  • IndicatorBottomValue = 0 - 取引する際の最下値です。インディケーターを使用して取引する際の最下値を示します。インデックス指標のすべての値を考慮する場合は0のままにします。
  • IndyTimeframe = PERIOD_CURRENT - インデックスの時間枠。最適化および取引中に使用する時間枠を選択します。PERIOD_CURRENTは、エキスパートアドバイザーを取り付けたチャートの時間枠を使用することを意味します。理論的には、ロボットを取り付けたチャートとは異なる時間枠で計算を行うこともできます。
  • inIndyPeriods = 14 - インデックスおよびATR計算の平均期間です。平均真の範囲(ATR)は、以下の入力オプションで動的なストップロスまたはテイクプロフィットを設定する際に使用されます。
  • IndyAppPrice = PRICE_CLOSE - 必要に応じてインデックスに適用される価格です。
  • SL_TP_Dynamic_invalidates_static_values - ストップロスおよびテイクプロフィットのパラメーターと他の入力を分けるための区切りです。
  • iStoploss = 1000 - ポイント単位の静的ストップロス値です。ストップロス値はポイント単位で、これはターミナル内での最小の動きの単位です。
  • iTakeprofit = 2000 - ポイント単位の静的テイクプロフィット値です。テイクプロフィット値もポイント単位で、これはターミナル内での最小の動きの単位です。
  • input inDynamic = true - ATRの倍数に基づく動的spおよびtpを使用しますか?動的ストップロスとテイクプロフィットをオンにすると、静的ストップロスまたはテイクプロフィットの代わりに使用されます。動的設定は、市場の動きに応じて調整できるため魅力的です。ATRが大きいときは、動きが速い市場で大きなストップロスとテイクプロフィットが設定され、逆に市場が落ち着いているときは近い設定になります。
  • inStoplossMultiple = 2 - 動的SL = X * ATR(平均期間)。ストップロスはここに指定した値に、inIndyPeriodsの設定で指定されたATRを乗じた値になります。
  • inTakeProfitMultiple = 7 - 動的TP = X * ATR(平均期間)。テイクプロフィットはここに指定した値に、inIndyPeriodsの設定で指定されたATRを乗じた値になります。
  • Break_Even_Settings - パディングはトリガーよりも小さくなければなりません。ブレイクイーブン設定のための区切りです。利益がトリガー額を超えると、ストップロスがブレイクイーブンに移動します。パディング設定がある場合は、ストップロスがブレイクイーブン + パディングに移動し、パディング額の利益を確保します。
  • bUseBreakEven = true - ブレイクイーブン(BE)を使用します。ブレイクイーブンの使用をオンまたはオフにします。
  • inTrigger = 200 - BEが[true]の場合、利益が出ているポイントをトリガーとして設定します。このポイントに達すると、ストップロスがブレイクイーブンに移動します。
  • inPadding = 100 - BEに加えるパディングポイントはトリガーより小さくなければなりません。これは、ブレイクイーブンに移動する際にロックしたい利益のポイント数で、この額はトリガーより小さくなければなりません。

このロボットはどのように自己最適化するのでしょうか?その秘密は、ロボットがインデックス指標の各変数を2回テストすることにあります。指標に100の可能な値がある場合、各値を取り、指定されたバー数(最適化期間)に遡ってその値で取引を行おうとします。その後、その値で取引を行った場合に得られた利益または損失の額でその値を評価します。詳細を知りたくて読んでいる方のために、もう少し詳しく説明します。

与えられた条件は、指標が上から買われすぎの値を超えたときに売り注文が出され、指標が売られすぎの値を下から上に超えたときに買い注文が出されることです。例えば、買われすぎが80に設定されていて、前のバーで指標の値が85、直近のバーで79だった場合、売り注文が出されます。85 → 79が80を下に交差し、売り注文が発行されます。売られすぎが23の場合、19 → 27が上に交差すると買い注文が発行されます。

このロボットは、IndicatorTopValueIndicatorBottomValueのすべての値を取り、テストを実行します。具体的には、各値に対して買いと売りのテストを実行します。例えば、上限値が100の場合、100を取り、その値を最適化期間でバックテストします。仮にそれが144期間だとすると、100での買いと100での売りが過去144期間で利益を上げるかどうかを確認します。利益が出た場合、その金額を保持します。

バックテスト中に何度も購入する機会があった場合、テイクプロフィットに達する前にストップロスに達すれば利益が出ますが、逆の場合はマイナス結果となります。最適化期間のすべての期間をテストした後、すべての利益結果を合計し、すべての損失を合計して金銭的な価値を保持します。その後、指標は次の低い指標値に移動し、その利益性をテストします。

すべての値をテストした後、最も高い金銭的価値を持つ値を最適な買い値として選定します。次に、売り値についても同様のチェックを行います。これが完了すると、最適な買い値と最適な売り値を比較し、最も良いトレードを探します。例えば、この最適化を実行した後、最適な買いが65で、バックテストで329ドルの利益が出た場合、最適な売りが32で530ドルの利益が出たとすると、ロボットは32のレベルを超える指標で売り取引を探します。なぜなら、バックテストで得られた利益に基づけば、売りの方が買いよりも良いからです。

今後の拡張アイデア

  • 複数の通貨ペアを同時に取引し、スプレッドサイズでフィルタリングする可能性。
  • 自己学習機能を持ち、自分の取引から最適な戦略を学ぶ。
  • バックテストにはフォワードテストのコンポーネントも含めることが可能。
  • 選択できるインディケーターを増やす。

ご意見やコメントをお寄せください。また、評価もお忘れなく!

MetaTraderマーケットプレイスでもご利用いただけます: https://www.mql5.com/en/market/product/26332

更新: コメントで指摘されたエラーを解決するため、137-142行の角括弧を追加しました。

연관 포스트

댓글 (0)