以前より作成していた投資シュミレーションツールが完成した。思っていたよりも規模が大きくなってしまい時間が掛かってしまった。
作成したモジュールは全部で6つとなったそれぞれの役割は↓な感じである。
- MoneyManage.py(購入資金管理用)
- Stock.py(株式購入判定情報取得用)
- Trade.py(株式購入判定用)
- dateTools.py(日付取得用)
- stockCode.py(証券コード取得用)
- stockPrice.py(証券価格取得用)
https://github.com/hatakazu/financeTools
処理内容はTrade.pyで対象期間分処理を繰り返し、その際に購入判定処理と売却判定処理を実施し条件に合致したら処理を実施するという内容である。今回は初期資金500万円で2015年1月1日〜8月1日までで処理を実施する事とした。なお、売買条件は株価が10日間の標準偏差より下がった場合に購入し、その後株価10%値上がりか、10%値下がりした際に売却を行う。Trade.pyの内容はこんな感じである。
from Stock import Stock
from MoneyManage import MoneyManage
from dateutil.relativedelta import *
from dateutil.rrule import *
from datetime import datetime
import dateTools
class Trade():
def __init__(self,funds):
self.money = MoneyManage(funds)
self.stock = Stock()
def buyDecision(self,code,day):
startPrice=self.stock.currentStartPrice(code,day)
endPrice=self.stock.currentEndPrice(code,day)
std=self.stock.singleStd(code,day,10)
if (startPrice-std) > endPrice:
buyDay = dateTools.dateNext(day)
buyCount = 100
buyPrice = self.stock.currentStartPrice(code,buyDay)
self.money.buy(buyDay,code,buyPrice,buyCount,1)
def sellDecision(self,day):
for key,value in self.money.stockHold().items():
currentStockPrice = self.stock.currentStartPrice(key[1],day)
if int(value[0])*int(value[1])*1.1 < int(currentStockPrice) * int(value[1]):
self.money.sell(key[0],key[1],currentStockPrice)
elif int(value[0])*int(value[1]) * 0.9 > int(currentStockPrice) * int(value[1]):
self.money.sell(key[0],key[1],currentStockPrice)
def main():
trade=Trade(5000000)
for day in dateTools.dateRangeWeekday(20150101,20150801):
trade.buyDecision(7203,day)
trade.sellDecision(day)
print trade.money.show()
if __name__ == '__main__':
main()
処理結果
***************************
money :435500
stockPrice :3970500
totalPrice :4406000
***************************
結果としては、現在の売買条件では60万程マイナスになる事が分かった。簡単に投資シュミレーションが出来るのは凄く便利である。勝てる条件を検討し今後の投資に役立てて行きたい。