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 #値を返す

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS