移動平均については以下の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 件のコメント:
コメントを投稿