その1「【Protra】共通コードを関数化して可読性を向上させる」
その2「【Protra】共通コードを関数化して可読性を向上させる その2」
のおまけです。
【免責事項】
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。
・本ブログの内容において、正当性を保証するものではありません。
・本ブログを利用して損失を被った場合でも一切の責任を負いません。
・最終的な決定は、ご自身の判断(自己責任)でお願い致します。
おまけ
全てのストラテジで、買い,売りの仕方が同じであれば、以下のコードをUtility.ptに押し込んで、ストラテジ本体をすっきりさせます。
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 |
#================================================== # 売買(買い) #================================================== if 0==PricedataExistCheck({1}Open) BuyingOpen(i,1) else if 1==PricedataExistCheck({2}Open) BuyingClose(i,0) else BuyingOpen(i,2) end end #================================================== # 売買(売り) #================================================== if 0==PricedataExistCheck({1}Open) SellingOpen(i,1) else if 1==PricedataExistCheck({2}Open) SellingClose(i,0) else SellingOpen(i,2) end end |
改良したUtility.ptは以下の通り。便宜上 Ver3とします。
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 |
#================================================== # 株数 #================================================== def Num(buyUnit,price) unit = Unit2(price) return (buyUnit / (unit * price)) * unit end #================================================== # データの有無を確認 #================================================== def PricedataExistCheck(data) return !data #存在する場合 0を返す end #================================================== # 買い(共通条件) #================================================== def Buying(i) if 0==PricedataExistCheck({1}Open) BuyingOpen(i,1) else if 1==PricedataExistCheck({2}Open) BuyingClose(i,0) else BuyingOpen(i,2) end end end #================================================== # 売り(共通条件) #================================================== def Selling(i) if 0==PricedataExistCheck({1}Open) SellingOpen(i,1) else if 1==PricedataExistCheck({2}Open) SellingClose(i,0) else SellingOpen(i,2) end end end #================================================== # 終値買い #================================================== def BuyingClose(i,d) #資金が不足している場合は何もしない if $long == 0 return end #予算を超えない場合だけ買う if $long * {d}Close <= $budget //PrintLog(Year + " " + Month +" " + Day + " i = " + i ) if $Interest == 1 || $Interest == 2 $budget = $budget - $long * {d}Close end $hold[i] = $long $buy[i] = {d}Close {d}Buy(Close, $hold[i]) //Print("B 予算残り =" + $budget) $set[i] = 0 else PrintLog("予算を超過しています") end end #================================================== # 始値買い #================================================== def BuyingOpen(i,d) #資金が不足している場合は何もしない if $long == 0 return end #予算を超えない場合だけ買う if $long * {d}Open <= $budget //PrintLog(Year + " " + Month +" " + Day + " i = " + i ) if $Interest == 1 || $Interest == 2 $budget = $budget - $long * {d}Open end $hold[i] = $long $buy[i] = {d}Open {d}Buy(Open, $hold[i]) //Print("B 予算残り =" + $budget) $set[i] = 0 else PrintLog("予算を超過しています") end end #================================================== # 終値売り #================================================== def SellingClose(i,d) //PrintLog(Year + " " + Month +" " + Day + " i = " + i ) {d}Sell(Close, $hold[i]) if $Interest == 2 $budget = $budget + {d}Close * $hold[i] elsif $Interest == 1 $budget = $budget + $buy[i] * $hold[i] //$budget = $budget + {d}Close * $hold[i] //if $budget > $budgetIni // $budget = $budgetIni //end end $hold[i] = 0 //Print("S 予算残り = " + $budget) end #================================================== # 始値売り #================================================== def SellingOpen(i,d) //PrintLog(Year + " " + Month +" " + Day + " i = " + i ) {d}Sell(Open, $hold[i]) if $Interest == 2 $budget = $budget + {d}Open * $hold[i] elsif $Interest == 1 $budget = $budget + $buy[i] * $hold[i] //$budget = $budget + {d}Open * $hold[i] //if $budget > $budgetIni // $budget = $budgetIni //end end $hold[i] = 0 //Print("S 予算残り = " + $budget) end |
新しくBuying(i)と、Selling(i)を定義しました。コード内容は同一なので説明は割愛。
これでストラテジ本文で、
1 2 3 |
Buying(i) Selling(i) |
を呼び出すだけになります。