BreakEvenTrailingMarket
- ユーティリティ
- バージョン: 1.0
BreakEven Trailingは、保有中のポジションのストップロスを管理するMetaTrader 5用のユーティリティです。ストップロスを建値へ移動し、価格の後ろを追従させます。チャートを見続けなくても、含み益を守ることができます。
このEAは新規ポジションを建てず、成行での決済も行いません。既存ポジションのストップロスだけを変更します。決済は、EAが設定したストップロスに価格が到達したときに行われます。
できること
- 含み益が指定したpipsに達すると、ストップロスを約定価格、または約定価格から指定分だけ利益側へずらした位置へ移動します。
- 含み益が指定したpipsに達すると、現在価格から一定の距離を保ってストップロスを追従させます。
- 建値移動とトレーリングは、それぞれ個別にON/OFFでき、併用もできます。
- BUY・SELLの両方のポジションに対応します。
- 既存のストップロスを不利な位置へ戻すことはありません。より多くの利益を守る方向へのみ移動します。
- ストップロスを変更する際、既存のテイクプロフィットはそのまま維持します。
- 現在の設定、口座方式、稼働状態をチャート上に表示します。
管理の対象になるポジション
EAを設置したチャートの、現在のシンボルにある全ポジションが対象です。
- マジックナンバーは確認しません。手動で建てたポジション、他のEAが建てたポジション、コピー取引によるポジションのいずれも管理します。
- 他のシンボルのポジションは変更しません。
- 未約定の待機注文は変更しません。
- 変更するのはストップロスだけです。ロット・テイクプロフィット・売買方向はそのままです。
マジックナンバーで絞り込まないため、同じシンボルのストップロスを操作するプログラムを同時に2つ動かさないでください。互いに上書きし合います。1シンボルにつき1チャートに設置してください。
ヘッジ口座とネッティング口座
ヘッジ口座では、各ポジションをチケット単位で個別に管理します。同一シンボルの2つのポジションは、それぞれ約定価格が異なるため、別々の建値位置を持ちます。
ネッティング口座では、プラットフォームがシンボルごとに1つのポジションを保持します。複数の約定は合算され、平均約定価格を持つ1つのポジションになります。建値の基準になるのはこの平均価格です。ネッティング口座では、約定ごとに別々の建値を設定することはできません。また、新しい約定が加わるとポジション全体の平均約定価格が変化します。EAは毎ティックで現在の合算ポジションを読み直すため、常に最新の平均価格を基準に動作します。
判定された口座方式は、チャートのパネルに Hedging または Netting と表示されます。
ストップロスの選び方
建値移動とトレーリングを両方有効にしていると、2つの条件が同時に満たされる場合があります。そのときEAは、2回の変更要求を送りません。毎ティック、次の手順で処理します。
1. 建値候補を計算します。約定価格に、利益方向のオフセットを加減した価格です。
2. トレーリング候補を計算します。現在価格からトレーリング距離だけ離した価格です。
3. 各候補をシンボルの価格刻み(TickSize)へ丸めます。丸めは常に、要求した距離より現在価格へ近づかない側へ行います。
4. 各候補を、シンボルのStopsLevelとFreezeLevelに対して個別に検証します。
5. 有効だった候補を比較し、より多くの利益を守る側だけを1回送信します。BUYなら高い方、SELLなら低い方です。
一方の候補がブローカーの制約で設定できない場合でも、もう一方が有効ならそれを使います。変更を通すために、候補をより不利な位置へ置き換えることはありません。
ブローカーの制約
多くのブローカーは、現在価格に近すぎるストップロスを受け付けません。また、価格がフリーズ範囲に入っている間はポジションの変更を拒否するブローカーもあります。EAは要求を送る前にStopsLevelとFreezeLevelを確認し、送信後は取引サーバーのリターンコードも確認します。
ストップロスを設定できないとき、EAは待機し、次のティックで再判定します。ストップロスを不利な位置へずらすことも、機能を停止することもありません。理由はチャートのパネルに表示されるため、市場待ちなのか、サーバーが要求を拒否したのかを見分けられます。
なお、StopsLevelを0と報告しながら、サーバー側で動的な制限を適用するブローカーがあります。その場合の最終判定は取引サーバーのリターンコードで行われ、EAはそれをパネルとログに表示します。
入力パラメーター
建値移動
- Enable break-even(初期値: true)建値移動機能のON/OFF。
- Profit to trigger break-even, in pips(初期値: 10.0)ストップロスを移動する前に必要な含み益。
- Offset beyond open price, in pips(初期値: 0.0)約定価格から利益方向へずらす距離。スプレッド・手数料・スワップ分を確保したい場合に使います。
トレーリングストップ
- Enable trailing stop(初期値: true)トレーリング機能のON/OFF。
- Profit to start trailing, in pips(初期値: 15.0)トレーリングを開始する前に必要な含み益。
- Distance from price to stop, in pips(初期値: 10.0)トレーリング中に現在価格とストップロスの間に保つ距離。
チャート表示
- Show settings and status on chart(初期値: true)
- Panel font size(初期値: 12)8〜24の範囲に制限されます。
値はEAの起動時に検証されます。動作できない値の場合、EAはその旨を表示して起動しません。許容されるが通常とは異なる組み合わせの場合、EAは起動し、ログに警告を書き込みます。警告は2種類です。オフセットが建値トリガーより大きい場合(価格がさらに進むまでストップロスを設定できません)と、トレーリング開始値がトレーリング距離より小さい場合(最初のトレーリングストップが約定価格より不利になり得ます)です。
チャートパネル
パネルには、バージョン、シンボル、口座方式、両機能の状態と設定値、管理中のBUY・SELLポジション数、そのティックで変更した件数、現在のステータスが表示されます。
主なステータス表示
- ACTIVE: ポジションを監視中です。
- WAITING: NO POSITION: 現在のシンボルにポジションがありません。
- WAITING: NO QUOTE: 有効なBid/Askをまだ取得できていません。
- WAITING: STOP LEVEL: 候補のストップロスが、ブローカーの許容する距離より価格に近い状態です。
- BLOCKED: FREEZE LEVEL: 価格が、ブローカーが変更を許可しない範囲に入っています。
- WAITING: MARKET CLOSED / WAITING: PRICE OFF / WAITING: PRICE CHANGED / WAITING: TOO MANY REQUESTS: 一時的な市場またはサーバーの状態です。
- ALL FUNCTIONS OFF: 建値移動とトレーリングが両方OFFです。
- AUTO TRADING OFF / EA TRADING DISABLED / ACCOUNT TRADE DISABLED / EXPERT TRADE DISABLED / SERVER AUTO TRADING OFF / DISCONNECTED: ターミナル、このEA、この口座のいずれかで取引が許可されていないか、ターミナルが未接続です。
- ERROR: INVALID STOPS / ERROR: TRADE DISABLED / ERROR: SYMBOL SETTINGS / ERROR: MODIFY FAILED: 要求が拒否されました。リターンコードがログに記録されます。
同じチケットで同じエラーが続く場合、ログは初回・リターンコードの変化時・以降は1分に1回だけ出力し、読みやすさを保ちます。エラーから復旧した際には復旧行を記録します。
pipsの定義と対応銘柄
すべての距離はpoint単位ではなくpips単位で指定します。
- 3桁・5桁表示の銘柄: 1 pip = 10 point
- 2桁・4桁表示の銘柄: 1 pip = 1 point
これは標準的なFXの建値表記に従った定義です。金属・指数・暗号資産は、これらの銘柄のpip定義がブローカー間で統一されていないため、v1.00の動作保証対象外です。これらの銘柄でも計算自体は動作しますが、1 pipの意味が想定と一致しない場合があるため、使用前にデモ口座で実際の距離を確認してください。
このEAにおける「建値」の意味
このEAの建値とは、プラットフォームが記録しているポジションの約定価格です。手数料・スワップ・スリッページ・決済時のBidとAskの差は含みません。したがって、約定価格ちょうどで決済されても、損益がちょうどゼロになることは保証されません。
自分の取引コストまで含めて守りたい場合は、約定価格からのオフセットを、その口座のコストに見合う値に設定してください。
使い方
1. 管理したいシンボルのチャートにEAを設置します。時間足は任意です。EAは毎ティックで動作し、時間足に依存しません。
2. ターミナルのアルゴリズム取引をONにします。
3. トリガーと距離の値を、取引スタイルとその銘柄の値動きの幅に合わせてpipsで設定します。
4. ポジション保有中は ACTIVE、ポジションがないときは WAITING: NO POSITION と表示されることを確認します。
5. 1シンボルにつき1チャートに設置します。同じシンボルに二重で設置しないでください。
EAはチャートに設置したままで構いません。そのシンボルにポジションがない間は何も行いません。
動作環境
- MetaTrader 5。ターミナル build 5836 で確認しています。
- ターミナルとEAの両方でアルゴリズム取引が有効であること。
- 保有ポジションのストップロス変更が許可されている口座であること。
- DLL、WebRequest、外部ファイル、インターネット接続はいずれも使用しません。
テスト
v1.00は、実際のブローカーのデモ口座でテストしています。
- 計算テスト: 自動チェック46件に合格。対象は、BUY/SELL、建値移動、トレーリング、両機能の併用、トリガー直前とトリガー到達、片方の候補のみStopsLevel違反、両候補の違反、既存ストップロスの保護、ストップロスとテイクプロフィットに対するFreezeLevel、2桁・3桁・4桁・5桁の銘柄、価格刻みへの正しい方向の丸めです。
- 取引APIとの統合テスト(ヘッジ口座): BUYとSELLの建値移動がリターンコード10009(要求完了)で実行され、既存のテイクプロフィットが維持され、失敗した要求はありませんでした。約360,000ティックを処理しています。
よくある質問
EAは新規注文や決済をしますか。
いいえ。既存ポジションのストップロスを変更するだけです。決済は、そのストップロスに価格が到達したときにブローカー側で行われます。
他のEAやシグナルの取引にも使えますか。
使えます。マジックナンバーを確認しないため、そのシンボルの全ポジションが対象になります。同じ理由から、同一シンボルのストップロスを操作する他のプログラムとの併用は避けてください。
ターミナルを閉じている間はどうなりますか。
ターミナルが閉じている間、EAは動作しません。すでに設定済みのストップロスはサーバー側の注文として残るため、有効なままです。
トレーリングを使わず建値移動だけ使えますか。
使えます。機能ごとにスイッチがあります。両方をOFFにするとEAは待機し、ALL FUNCTIONS OFF と表示します。
利益が条件に達しているのにストップロスが動きません。
最も多い原因はブローカーの制約です。パネルを確認してください。WAITING: STOP LEVEL は、要求したストップロスがブローカーの許容距離より価格に近いことを意味します。EAは不利なストップロスを置く代わりに、有効な距離になるまで待機しています。
ネッティング口座でも動作しますか。
動作します。ネッティング口座ではシンボルごとに1つの合算ポジションがあり、その平均約定価格が建値の基準になります。
バージョン
1.00 - 初回リリース。
