Top > pyStockTrader > TradeAlgorithm
*売買アルゴリズム [#c46a5a0c] -売買アルゴリズム「algorithm」ディレクトリの中に置きます。~ -最低必要な関数は、sell()とbuy() -sell() --stock,dtが引数 ---stock : 株のデータが入っている ---dt : 日時のデータ --希望価格と売買方法(成り、指値)を返す -buy() --stocke,dtが引数 ---stock : 株のデータが入っている ---dt : 日時のデータ --希望価格と売買方法(成り、指値)を返す このルールに従えばどんなアルゴリズムにも対応するはず。~ 計算にめちゃめちゃ時間がかかると実用的ではないと思うけど 一般的なものは以下のモジュールを使えるかも -[[TA-lib>http://ta-lib.org/]] -[[TA-libを使わない>https://www.quantopian.com/posts/technical-analysis-indicators-without-talib-code]] *特殊な変数 [#uf0ccf49] -trade.price --一番新しい株価が入っている -trade.price_history --株価の履歴(配列) --trade.price_history[-1] = trade.price -stock.algorithm_vals --アルゴリズムで使う数値が入っている --設定ファイル(「[[プロジェクトファイル>pyStockTrader/EditConfig]]」などで設定) -trade.buy_price,trade.sell_price --直近の売買値 *例「simple.py」 [#g5623046] 単純な売買ルール。前の日より安くなったら買い、買った値段より高くなったら売る方式 #!/usr/bin/python3 # coding: UTF-8 import numpy as np #買い def buy(stock,dt): data_num = 3 trade=stock.trade tmp=np.where(stock.simulation.date<=dt) epos=np.max(tmp) if epos < data_num: return 0,0 spos=epos-data_num #過去3個の株価をとってくる trade.price = stock.simulation.close[epos] #最後の株価=最新の株価 last_price = int(stock.simulation.close[epos-1]) #最後から2番目の株価 last_last_price = int(stock.simulation.close[epos-2]) #最後から3番目の株価 buy_rate = stock.algorithm_vals[0] #比率、値は設定ファイルで設定 if(float(last_price) < float(last_last_price * buy_rate)): #ある比率より安くなっていたら買う price = float(last_price) * buy_rate #買値の設定 if(float(stock.simulation.close[epos]) < price): #今の値の方が安かったら、その値段に設定 price = float(stock.simulation.close[epos]) buy_type = 0 #指値で買う return price,buy_type return 0,0 #ある比率より安くなかったら買わない #売り def sell(stock,dt): data_num = 3 sell_type = 0 trade=stock.trade tmp=np.where(stock.simulation.date<=dt) epos=np.max(tmp) if epos < data_num: return 0,0 spos=epos-data_num trade.price = stock.simulation.close[epos] #最後の株価=最新の株価 sell_rate = stock.algorithm_vals[1] #比率、値は設定ファイルで設定 now_rate = float(stock.simulation.open[epos]) / float(trade.buy_price) wish_sell_price = int(trade.buy_price)*sell_rate #希望価格の設定。買った値段のsell_rate倍 if(int(stock.simulation.close[epos]) > wish_sell_price): #希望価格より高かったら sell_type = 0 #指値で売る wish_sell_price = int(stock.simulation.close[epos]) #希望価格は最新価格 elif(now_rate < stock.algorithm_vals[2]) #ある比率より安くなっていたら損切り sell_type = 1 #成り売り wish_sell_price = int(stock.simulation.close[epos]) #成りなので意味がないが一応 return wish_sell_price,sell_type #値を返す |