Top > pyStockTrader > TradeAlgorithm

売買アルゴリズム

  • 売買アルゴリズム「algorithm」ディレクトリの中に置きます。
  • 最低必要な関数は、sell()とbuy()
  • sell()
    • stock,dtが引数
      • stock : 株のデータが入っている
      • dt : 日時のデータ
    • 希望価格と売買方法(成り、指値)を返す
  • buy()
    • stocke,dtが引数
      • stock : 株のデータが入っている
      • dt : 日時のデータ
    • 希望価格と売買方法(成り、指値)を返す

このルールに従えばどんなアルゴリズムにも対応するはず。
計算にめちゃめちゃ時間がかかると実用的ではないと思うけど

一般的なものは以下のモジュールを使えるかも

特殊な変数

  • trade.price
    • 一番新しい株価が入っている
  • trade.price_history
    • 株価の履歴(配列)
    • trade.price_history[-1] = trade.price
  • stock.algorithm_vals
  • trade.buy_price,trade.sell_price
    • 直近の売買値

例「simple.py」

単純な売買ルール。前の日より安くなったら買い、買った値段より高くなったら売る方式

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

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Thu, 28 Jun 2018 23:28:37 HADT (818d)