 | わたしの意見では、トレーディングシステムを持っていると言える人とは、マーケット参入時にいつ撤退するのか知っている人である。 魔術師たちの心理学、P302 |
先週から、FXA証券のシステムがやたらと遅かったり、止まったり、繋がらなかったりで、マジで参った。
一番困ったのは、注文を出しても、数分間、執行されない...
んで、執行完了したら、とんでもない高値(安値)掴みしてて、いきなりえらいマイナスやんけ(-_-+
しかも、注文が出てないと思って、何度かやり直していたせいで、システムが指示した倍(54万通貨)もAUDJPYを買ってるし(-o-+
ポジションサイジングの意味ないじゃんかよぉ!
とりあえず、プラマイゼロの時点で27万通貨は決済できて、システムの指示通りの運用に戻れたので、事なきを得たけど...この落とし前、どうつけてくれんのよ、FXAさんよぉ(ガラ悪っ!)。
FXAって、ツールやテクニカル指標はかなりイケてるのに、こういうダウン時には何も告知しないから不親切でイヤだな。システム情報はいつ見ても無邪気に「システム正常稼動中」ってキレイな緑色してるだけだし(どこが正常やねんってディスプレイにきついツッコミ入れそうになるなぁ)。
ちなみに昨日、とある未公開株案件でFXAのとなりのオフィスにいったので、廊下を歩いていたFXAスタッフを捕まえてうかがったところ、クライアントのバージョンアップに失敗していたとの模様。「うーん、でも、あの挙動は、サーバー側にも問題ある気がするんだけどなぁ」とツッコミを入れたら、開発トップの方を紹介されて、最終的には「うちで働いてもらえませんか?」という謎の結論に(^_^)
今も証券会社向けツールの開発に携わっているけど、FXAも面白そうだなぁ。今度、探りを入れにいってみよっと。
今回の1件があった後、マネーパートナーズとCMS FOREXにアカウントを作ってみた(他にも外為どっとコムやトレーダーズ、ひまわりなどいろいろアカウント持っているけどどこも手数料高いんで)。
他にも、為替ブローカーで耐久性のいいところあったら、ぜひご連絡をm(_)m
ま、FOMC発表前のようなシステムが不安定になる時期には、注文を出しちゃイカンという、これも大事な教訓なのかもね。
さて今回は、ストップの続き。割と面倒なところなのでじっくり注意して見てね。
Q列の「ストップ保有期間」は、Q51に「ストップ保有期間」を入れ、最初にストップがかかるQ79に「=IF(P79="ストップ", 0, IF(J79=1, 1, IF(Q78=0, 0, J79)))」という式を入れる。
これは、ストップシグナル(P79)が”ストップ”のときは0(=ポジション無し)を表示し、そうでなければ、シグナル保有期間(J79)が1のときは1になり、1でないときは前日のストップ保有期間(P78)をチェックし、0なら0、そうでなければシグナル保有期間(J79)をコピーする。
これも簡単に言えば、ストップシグナルが出ているときは即ポジション無しにし、ストップシグナルが出ていないときは、ポジション継続中のどこかでストップが出たときは以降をポジション無しに、いずれでもなければポジションをそのままキープするということ。
シグナルのみのときは、シグナル保有期間の間、ずっとポジションを持ったままなので、この列や式は必要ないが、ストップを入れることで、シグナルが反転するよりも前にポジションが途中でなくなることになる。これを記録しておかないと、1度ストップシグナルが出た後、再度ストップシグナルが出た場合やシグナルによる決済が出た場合、すでにポジション無しになっていることが判別できなくなり、正しく損益計算ができなくなるので、この列はかなり重要。
全期間のストップ保有期間を出すために、Q78をコピーし、Q58からQxxx(xxxはデータ数によって変わる)までペーストする。日経平均4年分だと、Q794までペースト。ポジション有無ががスキマなく埋まるはずだ。
R列の「ストップ落値」は、R51に「ストップ落値」を入れ、最初にストップがかかるR79に「=IF(OR(AND(J79=1, Q79=0), AND(Q78>=1, Q79=0)), O79, "")」という式を入れる。
これは、シグナル保有期間(J79)が1かつストップ保有期間(Q79)が0、もしくは、前日のストップ保有期間(Q78)が1以上かつ当日のストップ保有期間(Q79)が0の場合は、ストップ価格(O79)を出し、そうでないときは何もしない。
1つ目の条件は、シグナルがドテンしたその日のうちにストップがかかったことを示す。2つ目の条件は、シグナルがドテンしたとき以外のストップがかかったことを示す。
全期間のストップ落値を出すために、R85をコピーし、R58からRxxx(xxxはデータ数によって変わる)までペーストする。日経平均4年分だと、R794までペースト。ストップのかかるタイミングのみ埋まるはずだ。

S列の「ストップ損益」は、S51に「ストップ損益」を入れ、最初にストップがかかるS79に「=IF(R79="", "", IF(I78=1, R79-L79, IF(I78=-1, L79-R79, "")))」という式を入れる。
これは、ストップ落値(R79)が空の場合は何もせず、空でないときは前日シグナルが買い(=1)のときはストップ落値(R79)から建値(L79)を引いた額、前日シグナルが売り(=-1)のときは建値(L79)からストップ落値(R79)を引いた額をストップ損益としている。
全期間のストップ損益を出すために、S85をコピーし、S58からSxxx(xxxはデータ数によって変わる)までペーストする。日経平均4年分だと、S794までペースト。ストップのかかるタイミングでストップ額に設定した-\100で埋まるはずだ。
T列の「ストップ込損益」は、T51に「ストップ損益」を入れ、最初にストップ損益が出るT79に「=IF(I77=I78, IF(S79="", "", S79-$D$2), IF(S79="", IF(Q78=0, "", N79-$D$2), IF(Q78=0, S79-$D$2, N79+S79-$D$2)))」という式を入れる。
これは、式の条件がややこしいので、ツリー構造でパターンを説明する。
ストップ込損益
├おとといのシグナル(I77)と昨日のシグナル(I78)が同じ
│ ├ストップ損益(S79)が空のときは何もしない
│ └そうでないときはストップ損益(S79)-手数料(D2)を表示
└おとといのシグナル(I77)と昨日のシグナル(I78)が異なる
├ストップ損益(S79)が空のとき
│ ├前日のストップ保有期間が0のときは何もしない
│ └そうでないときはシグナル損益(N79)-手数料(D2)を表示
└ストップ損益(S79)が空でないとき
├前日のストップ保有期間が0のときはストップ損益(S79)-手数料(D2)を表示
└そうでないときはシグナル損益(N79)+ストップ損益(S79)-手数料(D2)×2を表示
これは、シンプルに書き直すと、こういう構造になる。
ストップ込損益
├シグナルはポジション継続中
│ ├当日ストップがかかっていればストップ損益のみ
└シグナルはドテン
├当日はストップがかかっていないとき
│ └過去すでにストップ済みでなければシグナル損益のみ
└当日はストップがかかっているとき
├過去すでにストップ済みでなければストップ損益のみ
└そうでないときはシグナルとストップの両方の損益を合計
実際、私もストップで散々バグを出した後、結果的にこのシンプルな構造を設計することで無事ストップを組み込めたので、複雑な処理の部分は、プログラミングを行う前に論理的な情報整理をすることがすごく大事だと思う。
全期間のストップ込損益を出すために、T79をコピーし、T58からTxxx(xxxはデータ数によって変わる)までペーストする。日経平均4年分だと、T794までペースト。ストップもしくはシグナルのかかるタイミングで上記パターンの損益額が埋まるはずだ。

さて、ここまでで、ストップに必要な情報はそろったので、続きは次回。
次回は、既存の「損益」「累積損益」をストップ対応させて、利益曲線がどうなるかを評価してみる予定。
ではでは(^_^y
この記事でワクワクしたら応援クリックよろしく!
