あいかわらずProtraをいじって遊んでいます。
使い方に慣れてきたので、いろいろ投資法を検証してみたいと思います。
【免責事項】
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。
購入予算の制限
Protraは無料ソフトで大変重宝しているのですが、機能は有料ソフトに比べると見劣る点があります。
その1つが総購入予算の設定。
通常のProtraストラテジは1回の売買資金は設定できるものの、総購入資金は管理できません。
つまり、
購入シグナルが出た場合 条件に合った銘柄を、”全て”購入します。
※手持ちが100万円しかなくても、総購入資金が100万円以上となる可能性があります。
・・・
何とかならないかな と検索していると、Protraの導入でもお世話になった「4年早かったリタイア者の生活記録」様に該当記事が!
#loop-type: date-only
を使用することで、銘柄ごとのシステム実行を停止させます。
こちらを参考に、以下の簡単な順張り条件 に 予算上限を組み込んでみました。
- 買条件:終値が過去80日間で最大の終値を更新したとき、翌日の始値で100万円分買う
- 売条件:終値が過去40日間で最小の終値を更新 or 購入から10日経過 を満たしたとき、翌日の始値で売る
- 初期予算:1,000万円
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
#loop-type: date-only #================================================== # followTest.pt #-------------------------------------------------- # このシステムのルール # # <買い条件> # 終値が過去80日間で最大の終値を更新 # を満たしたとき、翌日の始値で買う # # <売り条件> #・終値が過去40日間で最小の終値を更新 #・購入から10日経過で売る # を満たしたとき、翌日の始値で売る #-------------------------------------------------- # written by グコウ, 2018/8/12 #================================================== #================================================== # 準備 #================================================== require "TIlib" codes = CodeList if $code_num && $code_num != Length(codes) Print("前回と異なる銘柄リストでは実行できません。") Dummy end $code_num = Length(codes) if ! $__INIT__ $budget = 10000000 # 投資総額 (1000万円) $set = [$code_num] $buy = [$code_num] $hold = [$code_num] $__INIT__ = 1 end #================================================== # 株数 #================================================== def Num(price) //株数 unit = Unit2(price) return (1000000 / (unit * price)) * unit end def Main(i) #================================================== # 条件(買条件, 売条件共通部分) #================================================== if Index == null return end #銘柄ごとのグローバル変数を初期化する。 if ! $__FLAG__ $hold[i]=0 $__FLAG__ = 1 return end #================================================== # 条件1 #================================================== if ! $hold[i] if ! Close return end # 初期化 cb = 0 high = 0 long = Num(Close) # 上場80日までは何もしない if Index < 80 return end # 100万円で買えないなら何もしない if long == 0 return end # 過去80日で終値がもっとも高値をつけた日が当日か while cb < 80 if {-cb}Close > high high = {-cb}Close end cb = cb+1 end #================================================== # 売買(買い) #================================================== # 条件を満たして、予算を超えない場合だけ買う if {1}Open if Close == high if long * {1}Open <= $budget //PrintLog(Year + " " + Month +" " + Day + " i = " + i ) $budget = $budget - long * {1}Open $hold[i] = long $buy[i] = {1}Open {1}Buy(Open, $hold[i]) //Print("B 予算残り =" + $budget) $set[i] = 0 else PrintLog("予算を超過しています") end end else return end #================================================== # 条件2 #================================================== elsif $hold[i] if ! Close return end sell = 0 cs = 0 low =100000 if $set[i] < 1 $set[i] = $set[i] + 1 return end $set[i] = $set[i] + 1 # 過去40日で終値がもっとも安値を付けた日が当日か while cs < 40 if {-cs}Close < low low = {-cs}Close end cs = cs+1 end if Close == low sell = 1 end # 10日経過したら売り if $set[i] > 10 sell = 1 end #================================================== # 売買(売り) #================================================== # sellの値が0以外なら売り指示 if {1}Open if sell != 0 {1}Sell(Open, $hold[i]) $budget = $budget + {1}Open * $hold[i] $hold[i] = 0 //Print("S 予算残り = " + $budget) end else return end end end //==================== // 銘柄コードを変えながらMain関数を実行 //==================== i = -1 while i + 1 < $code_num i = i + 1 {codes[i]}Main(i) // 文字列型at作用素を与えて実行する。 end |
購入資金が $budget に格納され、売買の結果に応じて更新するようになっています。
仕様上、銘柄コードが小さい順にチェックされることになりますので、優先して購入したい銘柄があれば別途条件を組み込む必要があります。
(追記)買い銘柄に優先順位をつける方法↓
コメント
銘柄が二つ以上になると、対象期間終了後再度その期間を実施するようで、
結果として同日売買で止まってしまいます。MA Cross with Capと見比べていますが理由にたどり着けません。
自己解決しました。
# loop-type: date-only
は#とlの間にスペースが要ります。少なくとも当方環境では。