無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
スクリプトを気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

CSetupLedger: a per-setup win rate ledger for Expert Advisors - MetaTrader 5のためのライブラリ

Ali Akbar
Ali Akbar
  • MQL5 Developer & Algorithmic Trading Specialist において  Freelance
  • パキスタン
  • 1612
Hi, I'm Ali. 24 years old, trading for around 5 years, and developing MQL5/MQL4 tools. I mainly work on automating manual strategies, fixing broken EA logic, and building clean indicators. I care more about clean architecture and proper risk management than over-complicated code. Always down to talk
| Japanese English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ビュー:
12
評価:
(1)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

執筆の理由

私のスキャルパーは、2つのセットアップで取引を行います。強気のオーダーブロックと、その弱気版です。ストラテジーテスターでは、これら2つに対して同じ利益率が表示されました。そこで、それぞれのセットアップに等しく適用されるパラメータの調整に2週間を費やしました。

そこで、セットアップの種類ごとに取引を分類してみました。USDCADのM1チャートでは、強気側の取引が損失の88%を占めていました。一方、弱気側はほぼトントンでした。私が必要としていた数字は、実のところずっと自分の取引履歴の中にあったのです。ただ、それを読み取る方法がなかっただけでした。

この講座では、その読み方を解説します。

この講座で得られるもの

セットアップタイプは起動時に一度だけ登録します。それぞれにIDが割り当てられます。そのIDはマジックナンバーのベースに追加されるため、注文は送信された瞬間から独自のセットアップタグを持つことになります。

その後、台帳は各セットアップについて3つの質問に答えます。勝ちと負けの回数。スワップと手数料を差し引いた純利益はいくらか。そして、その勝率はまだ信頼に値するものか、ということです。

この最後の質問こそが、私がこのシステムを構築した目的です。 3回の取引で3回勝ちれば、勝率は100%となります。これは、44%の確率で表が出るコインを12回投げた場合に、およそ1回達成される確率でもあります。そこで、このクラスは生の勝率の横にウィルソン・スコアの下限値を表示し、報酬比率が要求する損益分岐点の勝率と比較します。 1:2の場合、その基準値は33.3%となります。そのセットアップは、悲観的な勝率でさえこの基準値を上回って初めて、「信頼できる」と判定されます。初期段階では、すべてが「まだ信頼できない」と表示されます。取引回数が20回程度の場合、それが正直な答えなのです。

活用方法

#include <CSetupLedger.mqh>

CSetupLedger ledger;
int SETUP_BULL, SETUP_BEAR;

int OnInit()
  {
   ledger.Init(552001);                          // あなたの魔法の拠点
   SETUP_BULL = ledger.Register("Bullish OB");   // ID 0 → マジック 552001
   SETUP_BEAR = ledger.Register("Bearish OB");   // ID 1 → マジック 552002

   ledger.RebuildFromHistory();                  // アカウントからレコードを読み込む
   Print(ledger.Report(2.0));                    // 2.0 = リスク対リターン比率
   return INIT_SUCCEEDED;
  }

注文を出す前に、そのセットアップをトレードに適用してください。

trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));

ポジションが決済されたら、それを清算する。

double net = 0.0;
if(ledger.ProcessClosedPosition(posId, setupId, net))
   Print(ledger.Report(2.0));

Report() は テキストを1ブロック 返します 。これは Print () や Comment () と同様に機能します。以下は、私がUSDCADのM1チャートで実際に実行した例です。

Per-setup ledger  (breakeven win rate at 1:2.0 = 33.3%)
---------------------------------------------------------------------
Bullish OB         235/529  raw  30.8%  wilson  27.6%  net  -5819.94  not yet trusted
Bearish OB         191/393  raw  32.7%  wilson  29.0%  net   -811.42  not yet trusted

同じレポートを Comment () に渡すと、EAの実行中にチャートの隅に 表示されます 。 バー上のボックスはエントリーラベルです。これは、トレードが実行される前のそのセットアップの実績を記録したものです。ここでは、パネルに「4勝6敗」と表示されています。生勝率は40%、ウィルソン下限は16.8%です。つまり、10回のトレードでは依然として「信頼できない」という評価となっており、これがこの列の趣旨そのものです。

これらの数値は「勝ち数/負け数」を表しています。つまり、強気セットアップでは764回の取引、弱気セットアップでは584回の取引が行われています。両方の純損益を合計すると、テスター自身の純損失と1セント単位まで一致します。このレポートを含め、いかなる取引明細も信頼する前に、ご自身の出力データでこの照合を行ってください。 セットアップごとの取引数がテスターの取引総数と一致しない場合、ポジションの集計に誤りがあり、その数値を超えるすべてのパーセンテージは意味をなさなくなります。

このツールが対処してくれる3つの落とし穴

手書きのバージョンでは、通常これらが間違えられがちです。私自身も、この講座が開講される前は、そのうち2つを間違えていました。

「ディール」は「トレード」とは異なります。MT5の履歴は「ディール」のリストです。3回に分けて決済されたポジションは、3つの「OUT」ディールを生成します。ディールをループ処理し、利益が出たものをそれぞれ「勝ち」としてカウントすると、1回の勝ちトレードが3回の「勝ち」となります。台帳は `DEAL_POSITION_ID` ごとに集計 されるため、 部分決済でも1回としてカウントされます。

DEAL_PROFIT は 結果その ものではありません。 スワップと手数料はそれぞれ別のフィールドに格納されています。スイング取引のEAでは、この差は表面的なものに過ぎません。しかし、スキャルピング取引では、この差がセットアップで利益が出たかどうかを決定づける要因となります。 価格変動で3 USDの利益を得たものの、手数料として4 USDを支払った取引は、損失となります。台帳では、利益にスワップと手数料を加算して合計します。

POSITION_TICKET は POSITION_IDENTIFIER とは 異なります 。 HistorySelectByPosition() は識別子を必要とします 。ネッティング口座では、ほとんどの場合、この2つは同じ値を保持しているため、ヘッジ口座や部分決済によって値が異なるようになるまで、このバグは目に見えません。そうなると、選択結果は空になり、何も表示されなくなります。

絶対に破ってはならない唯一のルール

登録順序はデータ形式そのものです。セットアップIDは、すでに決済済みの取引のマジックナンバーの中にしか存在しません。来月、リストの途中に新しいセットアップを挿入すると、そのIDを持っていたセットアップの過去の取引はすべて、黙って新しいセットアップの取引になってしまいます。エラーは一切発生しません。それ以降、数値が単に間違っているだけなのです。

新しいセットアップはリストの最後に追加します。セットアップを廃止する場合は、その `Register ()` 呼び出しを そのまま残し、IDが引き続き使用不可の状態になるようにしてください。登録ブロックの上に、このことを説明する短いコメントを記載しておくと、その価値があります。

できないこと

このシステムは、ポジションごとに1つのレコードを保持します。同じネットポジションに2回目のエントリーを積み重ねるEAの場合、その取引全体が最初のセットアップに計上されてしまいます。もしあなたのEAがそのような動作をする場合は、代わりに取引ごとのモデルを採用する必要があります。

セットアップの上限は16件です。それ以上必要な 場合は、 SETUP_LEDGER_MAXの値 を増やしてください。1つの口座で16件のセットアップがあるということは、16個の小さなサンプルがあることを意味し、Wilsonの列にその旨が表示されます。

純利益がちょうどゼロの場合も、損失としてカウントされます。損益ゼロの取引は稀であり、それらを利益として扱う方が、より好意的に見える誤りです。

ProcessClosedPosition() は HistorySelectByPosition () を呼び出すため、グローバルな履歴選択機能に 取って代わります 。その後、再度選択を行わない限り、独自の履歴ループの途中でこれを呼び出さないでください。

また、この関数はトレードのアイデアそのものではなく、エグジットを評価します。方向性を正しく読み取っても、ストップロスの設定が不適切なセットアップは、悪いセットアップとして評価されます。明日何をトレードするかを決める上では、これは間違いなく正しい答えだと言えるでしょう。ただし、そのアイデアが妥当だったかどうかを判断することとは異なります。

要件

MetaTrader 5。標準ライブラリ以外の依存関係はありません。ファイルを MQL5/Include/ に配置し 、 インクルードしてください。ビルド 6190 で作成・テスト済みです。

最後に一点。単一のインサンプル・バックテストに基づいて構築された台帳は、そのバックテストを測定するものです。戦略の妥当性を検証するものではありません。チューニングを行っていない期間におけるアウトオブサンプル・テストは別の作業であり、このクラスはその代わりにはなりません。

— アリ・ラジプート


MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/77531

Session Candle Counter: candles numbered from the cash open, DST aware Session Candle Counter: candles numbered from the cash open, DST aware

フランクフルト、ロンドン、ニューヨーク、または東京の現物市場開始時刻を起点として、当日の各ローソク足に番号を振ります。基準時刻は、取引所の現地時間からブローカーのサーバー時間へ、自動夏時間調整を適用して変換されるため、夏時間・冬時間を問わず、市場開始後の最初のローソク足は常に1番となります。

RiskGuard Lite - Percent-Risk EMA/ATR EA RiskGuard Lite - Percent-Risk EMA/ATR EA

教育用MT5 EA:クローズドバーのEMAクロスオーバーによるエントリー、ATRに基づくストップロスとテイクプロフィット、OrderCalcProfitによる純資産の一定割合に基づくロットサイズ設定、スプレッドフィルター、マジックナンバーの分離、およびサーバーの戻りコードチェック機能を搭載。リスク管理されたEAを構築するためのシンプルなテンプレートです。収益を保証するものではありません。

Adaptive Moving Average (AMA) Adaptive Moving Average (AMA)

適応移動平均線は、ノイズの影響を受けにくい移動平均線を作るときに使われ、トレンドを検知する際にラグが最小に抑えられるという特徴を持ちます。

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。