EAのパラメータ画面を開くと、上のほうに Lots という欄がある。0.1 と入っている。いつ誰が決めた0.1なのか、もう思い出せない。あるいはその欄が無く、代わりに Risk という数字だけがあって、出る枚数は日によって違う。
他のパラメータは、書いた値がそのまま使われる。移動平均の期間を20と入れれば20で動く。ロットだけは違う。比率で出す作りにした瞬間、枚数は毎回その場で計算し直される数字になる。式に何が入っているかを知らないと、想定と違う枚数が出ても気づけない。
今回は、その枚数が何で決まるのかを分解していく。設定値そのものは依頼する側が決めるものなので、ここでは触れない。扱うのは、どこをパラメータとして外に出し、どう計算させるかという作りの話です。
固定ロットは、資金が動いても変わらない
いちばん単純なのは固定だ。0.1と書けば、いつでも0.1枚を出す。資金が倍になっても半分になっても枚数は変わらない。良くも悪くも、口座の状態から切り離されている。増えた分を張りにいくことも、減った分だけ小さくすることもしない。
切り離されていることは欠点とは限らない。検証のときは特にそうで、枚数が動かないぶんロジックの挙動が見やすい。枚数まで動くと、結果がどちらの影響なのか分からなくなる。まず固定で作り、あとから比率へ差し替えられる形にしておくと扱いやすい。
比率にすると、口座の状態が枚数に効いてくる。増えれば増え、減れば減る。ただし「残高の何パーセント」とだけ決めても、そこから枚数は出てこない。相談がいちばん詰まるのがここで、決めたつもりの数字が、実は枚数を決めていない。
比率で出すなら、損切りの幅が要る
「残高の1パーセント」が指しているのは、枚数ではなく1回のトレードで許す損失額のほうだ。残高100万円なら1万円。ここまでは決まる。ではその1万円が何枚にあたるのか。どこで損切りするかが決まらないと、出しようがない。
同じ1万円でも、損切りが10pipsなら枚数は大きくなり、100pipsなら小さくなる。枚数は、許す損失額を損切り幅で割った結果として出てくる。だから比率でロットを出すEAは、どこかに必ず損切り幅を持っている。無いなら、実際は別の何かで決めている。
幅の出し方は、pipsで固定する、直近の高値安値に置く、値動きの幅の何倍かで出す、といったところになる。どれを選ぶかで、日ごとの振れ方も変わる。値動きが荒い日は幅が広がり、そのぶん枚数は自動で小さくなる。
1pipsがいくらかは、口座の通貨で変わる
割り算の分母には、もう一つ入るものがある。1pips動いたときにいくらになるか、という金額だ。ここが通貨ペアによって素直だったり、そうでなかったりする。同じ0.5枚でも、ペアが違えば動く金額は違ってくる。
円建ての口座でドル円を1枚(10万通貨)持てば、1pips=0.01円の動きで1,000円。0.1枚なら100円で、掛けるだけで出る。ところがユーロドルだと1pipsで動くのは10ドルなので、円に直すのにその時のドル円レートを一度挟む。円もドルも無いペアなら、換算はもう一段増える。
口座そのものがドル建てなら、円に直す必要がない代わりに、基準がドルのまま動く。どちらにしても換算のレートは毎日動く。設定を何ひとつ触っていなくても、出てくる枚数は日によって変わる。知らないと、勝手に変わったように見える。
例で通す。残高100万円、許す損失を1パーセントで1万円、損切り20pips、ドル円で1枚あたり1pips=1,000円。1万円 ÷(20 × 1,000)=0.5枚。0.5枚で20pips逆行すれば1万円で、最初の額と合う。何パーセントにするかは依頼する側だ。
上限と下限と、刻みの丸め方
式に任せきると、たまに極端な値が出る。損切り幅が異常に狭くなった日。入金の直後で残高が一時的に大きい日。換算に使うレートが取れなかった瞬間。どれも計算としては正しいのに、出したくない枚数になる。
上限と下限は、うまくいっている日のために入れるのではない。式が壊れた日のために入れる。
だから上限と下限は、比率とは別のパラメータとして外に出しておく。上限は「これ以上は出さない」枚数、下限は「これを下回るなら見送る」枚数だ。下限を割ったときに最小ロットへ丸める作りもありますが、当方は見送りに倒すほうをお勧めしています。
もう一つが刻みだ。枚数には最小単位があり、0.01刻みの口座が多いが、業者や口座タイプで違う。結果が0.437枚になったとき、切り捨てるか切り上げるか。この丸め方を先に決めて、ロットを出す場所すべてで同じにする。新規と途中で足すときで丸め方が違えば、同じ設定なのに枚数が合わない。
どの時点の残高で計算するか
式が同じでも、入れる数字をいつ取るかで結果は変わる。ここは決められていないまま作りに入ることが多い場所だ。指定がなければ作り手がどちらかに倒すしかないので、後から「そういうつもりではなかった」が出やすい。
まず、何を見るか。確定した損益だけが反映される残高か、含み損益まで含んだ有効証拠金か。持ち越している間、この二つは大きく離れる。有効証拠金を基準にすると、負けが込んでいる間は枚数が自動で小さくなる。残高なら、決済されるまで枚数は動かない。
次に、いつ取るか。発注の直前に毎回取るのか、その日の最初に一度だけ取って一日じゅう使うのか。入出金の直後の扱いも決めたい。振り込んだ日から反映させるのか、翌日からにするのか。
どれが正しいというものではない。決まっていないと、あとで「なぜこの枚数だったのか」を再現できなくなるのが困る。計算に使った数字をそのままログに残しておくと、後から確かめられる。残っていないものは、誰も確かめようがない。
二本目を足すと、証拠金は合算で減る
一本で回している間、口座の中はそのEAだけの世界だ。二本目を同じ口座に入れた瞬間に前提が崩れる。必要証拠金も含み損も、口座の単位で合算される。それぞれのEAは、相手がいることを知らないまま自分の枚数を計算する。
有効証拠金を基準にしている二本なら、片方が張った直後にもう片方は小さく出る。残高を基準にしていると数字が動かないので、二本合わせた枚数が想定を超える。手で持っているポジションがあれば、それも同じように効いてくる。
手当ては二つ。枚数の上限をEAごとでなく口座ごとに決めること。それから、EAが「いま何枚持っているか」を自分の変数に貯めないことだ。発注のたびにポジション一覧から数え直す。貯めた数字は再起動や手動の決済とずれ、それを基準に次を出せば先も全部ずれる。
なお、ここまで出てきた式や数字は、作りを説明するための例であって、どの設定が良いかを示すものではない。当方がお受けしているのはソフトウェアの開発で、投資助言・運用受託・利益保証は行いません。
当方は元金融系のシステムエンジニアで、MT5のEA開発をココナラでお受けしています(MT4は移植・改修のご相談から承ります)。ロットの決め方が固まっていなくても構いません。まず固定で作り、後から比率へ差し替える形にもできますので、想定している通貨ペアを添えて、ココナラのメッセージからご相談ください。なお、お渡しするのはソフトウェアであって、投資助言や運用の代行ではありません。