netting口座では二つのEAと手動注文が一つの共有建玉を変えます。口座損益だけで各EAの損益は分かりません。実約定と関係を復元し、明示した数量・費用配賦規則で分析します。broker履歴や税務処理の代替ではありません。

magic numberは共有建玉を分割しない

MT5 nettingは一銘柄一建玉で後続約定が数量を変更。注文一つが複数dealを生む場合もあります。program名が違っても独立portfolioにはなりません。

DEAL_MAGICは約定magic、DEAL_REASONは発生元・原因。注文番号、position ID、時刻も保存。magic0だけで手動判断とは証明できません。program名とIDの対応も別に記録します。

手動exitはA・Bが作った共有exposureを減らせますが、exitのlabelだけでは先のどの数量を閉じたと分析するか決まりません。発注元と分析上の数量所有者を別列にします。

deal・order・positionの関連を復元

番号は計算用の数量ではなく識別子として保存。DEAL_ORDERと注文、DEAL_POSITION_IDとcycleを結びます。POSITION_IDENTIFIERは履歴の関連に使い、現在のPOSITION_TICKETはserverのservice操作などで変わり得ます。銘柄、方向、実数量、fill価格と時刻を保存。

HistorySelectByPositionはposition identifierで注文・deal履歴を取得。成功と取得範囲を確認し、一画面の可視一覧を全必要記録と見なしません。欠けたentryをexit commentからEAへ割当てず、元recordを保存して解釈を追加します。

手数料、fee、金利、口座通貨損益も含め、balance操作は売買と別にします。split注文は実際の部分数量と価格を保存し、要求数量で代替しません。ここでは照合済み履歴を分析し、新規発注の操作は行いません。

同じ口座から異なるEA結果が出る理由

二つの買いと二つの手動exitの元模型

架空線形EUR/USD、1lot100000EUR、USD口座、初期建玉なし。全価格は買いAsk・売りBidでの実約定仮定。四つ全約定し、各手数料1USD、fee・swap0。spreadはfillに含まれているため再控除しません。

架空POSITION_IDENTIFIER=5001 cycle
deal/order発生元実約定後の建玉
7001/5001EA A買い0.10@1.1000買い0.10
7002/5002EA B買い0.10@1.1020買い0.20
7003/5003手動exit売り0.10@1.1010買い0.10
7004/5004手動exit売り0.10@1.1030なし

第二約定後の共有買平均1.1010。第一縮小の価格損益0USD、第二は20USD。四手数料後20−4=16USDが閉じたcycleの結果です。実口座観測でなく与えた仮定。

分析FIFOは古い数量から。7003をAへ割当て10000×(1.1010−1.1000)=10USD、7004をBへ10000×(1.1030−1.1020)=10USD。各EAに開始と対応exit手数料を各1ずつ配ればA8・B8。

分析LIFOは新しい数量から。7003でB価格−10USD、7004でA+30。費用後B−12・A28、合計は同じ16。これは分析のFIFO/LIFOでMT5server会計の選択や普遍的税規則ではありません。都合で規約を黙って変えません。

同じ合計16USDでもEA配賦は変わる

横にスクロールすると図全体を確認できます。

口座合計は同じでも配賦結果は違う閉じたcycle価格損益20USD、手数料4、net16。FIFOはA8B8、LIFOはA28B-12。分析規則はserver履歴の代替ではありません。同じ口座合計・異なる分析配賦共有口座:価格20USD − 手数料4USD = 16USDFIFO:古い数量からA: +8 USDB: +8 USD8 + 8 = 16 USDLIFO:新しい数量からA: +28 USDB: −12 USD28 − 12 = 16 USD架空模型・四約定・建玉は全て決済
FIFO・LIFOは追加の分析規則です。両方合計16USDでも各EAの結果は違い、serverの二つの会計方式ではありません。

最初のexit後にrealisedだけ比べてはいけない

7003後、現在Bid1.1010と仮定。共有建玉はrealised0・unrealised0の価格損益。FIFOならAの確定+10、残るBの含み−10で合計0。分析確定だけをserver確定欄と比較すると違います。

三約定の手数料は3USDで、両表示とも総合−3。7004でcycleが閉じれば含みはなく合計16です。確定・含み損益を同じ評価価格で合わせます。合計一致だけで分析目的にどの規約が適切かは決まりません。

実履歴には部分約定、反転、訂正、別計上費用もあります。欠落entry・価格・発注元を捏造して一致させず未解決理由を残します。規約変更は分析手法の変更として表示。各EAの制限と口座管理は実際の共有exposureへ適用されます。

新しい円例:不均等数量の部分exitを三通りで照合

架空USD/JPYでA6000USDを150.00、B4000USDを150.20で買い、手動で5000USDを150.10で売るとします。現評価Bidも150.10、累計別手数料150JPY、ほかの費用なし。価格はfill仮定でspread再控除なし。

共有平均は(6000×150+4000×150.20)/10000=150.08。共有模型では確定100JPY、残る5000USDの含み100、価格合計200、費用後50JPY。

分析FIFOならA5000を閉じ確定500。残るA1000は+100、B4000は−400で含み−300。合計500−300−150=50JPY。分析LIFOならB4000の−400とA1000の+100を閉じ確定−300、残A5000の含み+500。合計−300+500−150も50です。

確定の100・500・−300だけを順位付けしてrobotの良否としません。ここではEA別の費用配賦までは決めず合計費用150を一度だけ引いており、個別net評価には別の明示規則が必要。日本の税用FIFO等を認定する例ではありません。

不均等数量でも総合50JPYは一致架空A6000USD@150/B4000@150.20、手動5000exit150.10、現Bid150.10、全費用150JPY。仮定に基づく計算共有平均150.08確定100+含み100分析FIFO確定500・含み−300分析LIFO確定−300・含み500
不均等数量でも総合50JPYは一致. 架空A6000USD@150/B4000@150.20、手動5000exit150.10、現Bid150.10、全費用150JPY。

確定だけの比較は分析規約の差をrobot成績と誤認する。費用配賦を個別に決めるまではEA別netを推測しません。

小さな画面では横にスクロールするか、図を拡大できます。数値と要点は下のテキストにも記載しています。

共有平均150.08
確定100+含み100 – 費用後50JPY。
分析FIFO
確定500・含み−300 – 費用後50JPY、A1000とB4000が残る。
分析LIFO
確定−300・含み500 – 費用後50JPY、A5000が残る。

二robot評価前の記録

  1. 一銘柄の閉じたcycleを選び元exportを保管。deal・order・position ID、実数量と全費用を照合。例作りのため本番取引をしません。
  2. robot結果の前に数量・費用配賦規約を明記。発注元と分析所有者を分け、欠落をclosing magicだけで補いません。
  3. 閉じたcycleは口座履歴へ総合照合。開いたcycleは同じ時点の確定+含み+費用を合わせ、両viewを日誌へ保存。分析は将来利益の証明ではありません。