以前よりProtraで時価が狂う問題があった。
狂っていたのは私の実装でした・・・・。
これは純粋に、銘柄を「売買」したのに「手仕舞い」できていないからだった。
作ったアルゴリズムがオカシイ・・・・という訳ではなく、データの特性上発生してしまう。
だが、しかし・・・・
本当にオカシイのは
- 取得した日の株価が存在しないこと
- Protraが同日売買に対応してないこと
だという気持ちをグッと堪えて、どうすれば良いか考える。
・・・いいアイデアが思いつかないので、いつの間にか寝てた。
起きたら、頭の中の妖精が答えを教えてくれました。
- 翌日始値のない銘柄は購入しない
- 手仕舞い日に始値がない場合は数日間の始値まで購入可能か確認する
- それで駄目なら、エラーを返す
これで対応。
Githubに「Utility.pt」を置きました。
大まかな修正箇所は次のとおり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//================================================== // 買い(共通条件) //================================================== def Buying(i) if (HasPricedata({1}Open)) // 翌日の始値で買う BuyingOpen(i,1) return 1 else + m = 2 + while (m < 10) + if (HasPricedata({m}Open)) + Print("欠損値 買い対応" + m) + BuyingOpen(i, m) + return 1 + end + m = m + 1 + end end + Print("[Error] 買い失敗") + return 0 end |
Protraに対する欠点
今まで数年間利用してProtraの問題点は次の通り。
不都合はあるものの暫定回避策は存在するため、何とか今でも利用可能だ。
何よりOSSでカスタマイズ可能なのが嬉しい。
ただ、カスタマイズ可能な人は自作ツールを作ってしまうので、微妙にユーザ層が合っておらず人気は出なかった。
同日売買できない
これは制約事項。
成績計算がオカシクなるそうだ。
デイトレで問題が起きる。
暫定回避策を使ってデイトレ実装は行えるものの、同一銘柄が翌日シグナルが出たときには買えない。
コマンド操縦できない
必ずGUIを立ち上げて実行しない限りバックテスト、株価更新を行えない。
自動発注のためにはキーボード・マウス自動操作などが必要となるが、頑健性に掛ける。
遅い
2時間~3時間の計算時間は当たり前。
より複雑なシステムを組むと更にかかる。
ただし、回避策としてProtraを複数立ち上げた並行実行は可能。
被害者ストラテジーたち
過去の日記、時価が狂ったトレードは次のとおり。
手法の幾つかは、銘柄を持ち続ける事で資金が年々減り、取引数も減ることで株価が寝る減少になっている。
つまり再考が必要
・・・だと思うが、大きく変わらないと思うので、とりあえず放置で。
sand氏のかつての空売りシステム有効性検証(protraシストレ)
斎藤正章氏の逆張りの複利・単利における有効性検証(システムトレード)
555hn氏の逆張り・順張り複合法有効性検証(システムトレード)
NYダウを利用した空売りの有効性検証(システムトレード)
NYダウを利用した逆張りの有効性検証(システムトレード)