移動平均については以下の4つをサポートしているが、SMAとEMA以外は呼び出し方が違う。
- SMA(Simple Moving Average)・・・単純移動平均線
- EMA(Exponential Moving Average)・・・指数移動平均線
- WMA(Weighted Moving Average)・・・加重移動平均線
- VWAP (Volume Weighted Average Price) 出来高加重移動平均
SMA->EMA->WMAの順に直近の価格が優先される。このソフトの場合のWMAは比率を自分で決めることができる。
たとえば、昨日:一昨日を3:1で平均を取ったのが以下のサンプル。とはいえほぼ昨日の株価になってしまうので、10日分ぐらいはブレンドするよね。
VMAPは所属しているライブラリが違う。また、引数としては株価データを全部渡す。計算には価格と出来高が必要だから。ちなみに読み方は「ブイワップ」でかっこいい。
株価がVWAPを上回っている時は、今日買った人全員の損益を合計したらプラス、逆に株価がVWAPを下回っている場合はマイナスになる。
それでは、全部計算してみましょう
#!/usr/bin/python # -*- coding: utf-8 -*- import logging from pyalgotrade.technical import ma from pyalgotrade.technical import vwap from pyalgotrade import strategy from pyalgotrade.barfeed import yahoofeed logging.basicConfig(filename='/tmp/exec.log') class MyStrategy(strategy.BacktestingStrategy): def __init__(self, feed, instrument): strategy.BacktestingStrategy.__init__(self, feed) self.__sma = ma.SMA(feed[instrument].getCloseDataSeries(), 15) self.__ema = ma.EMA(feed[instrument].getCloseDataSeries(), 15) self.__wma = ma.WMA(feed[instrument].getCloseDataSeries(), (1,2)) self.__vwap =vwap.VWAP(feed[instrument], 15) self.__instrument = instrument def onBars(self, bars): bar = bars[self.__instrument] self.info("%f sma:%s ema:%s wma:%s vwap:%s " % (bar.getClose(),self.__sma[-1],self.__ema[-1],self.__wma[-1],self.__vwap[-1])) # Load the yahoo feed from the CSV file feed = yahoofeed.Feed() feed.addBarsFromCSV("orcl", "orcl-2000.csv") # Evaluate the strategy with the feed's bars. myStrategy = MyStrategy(feed, "orcl") myStrategy.run()次はRSIなどのモメンタムかな。
0 件のコメント:
コメントを投稿