葛蘭碧八法是根據移動平均線和股價之間的關係,來判斷買入,賣出
葛蘭碧八法並沒有明確指明要用哪個指標當移動平均線,短期價位,
長期價位,以下的設定是我自己設的,大家可以視自己的需求去修改,主要精神還是那八點
,突破,支撐,假跌破,反彈,跌破,阻力,假突破,反轉
簡單好用
訊號落後,急漲急跌不容易獲利,盤整多空雙巴
import backtrader as bt
import backtrader.Indicaters as btind
class RuleOfEight(bt.Strategy):
params = (
('defaultSize', 1000),
('printLog', False),
)
def log(self, txt, dt = None, doPrint = False):
if self.p.printLog or doPrint:
dt = dt or self.data.datetime.date(0)
print("%s %s" % (dt.isoformat(), txt))
def __init__(self):
self.sizer.setsizing(self.p.defaultSize)
self.sma_half = btind.SimpleMovingAverage(self.data, period = 120)
self.sma_long = btind.SimpleMovingAverage(self.data, period = 20)
self.sma_short = btind.SimpleMovingAverage(self.data, period = 5)
self.order = None
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if order.isbuy():
self.log("買入 價格: %.2f 成本: %.2f 手續費: %.2f" % (order.executed.price, order.executed.value, order.executed.comm))
elif order.issell():
self.log("賣出 價格: %.2f 成本: %.2f 手續費: %.2f" % (order.executed.price, order.executed.value, order.executed.comm))
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log("交易取消/餘額不足/拒絕交易")
self.order = None
def notify_trade(self, trade):
if not trade.isclosed:
return
self.log("交易收益: 毛利 %.2f 淨利: %.2f" % (trade.pnl, trade.pnlcomm), doPrint = True)
def next(self):
if self.order:
return
# 半年線趨勢向上 (5日內的半年線比較)
halfUp = self.sma_half[-5] < self.sma_half[0]
# 突破
breakThrough = (self.sma_short[-1] < self.sma_long[-1]) and (self.sma_short[0] > self.sma_long[0])
if not self.position:
if halfUp and breakThrough:
self.order = self.buy()
if self.order is not None:
self.log("買入: %.2f 股數: %d" % (self.dataclose[0], self.order.size), doPrint = True)
else:
if not breakThrough and not halfUp:
self.order = self.sell()
if self.order is not None:
self.log("賣出: %.2f 股數: %d" % (self.dataclose[0], self.order.size), doPrint = True)
def stop(self):
self.log("結束收益 %.2f" % self.broker.getvalue(), doPrint = True)
永豐金證券(2890) 2018-01-01 ~ 2020-12-31
可以看到在中間有一段急跌,這個策略就沒有辦法反應過來
永豐金證券(2890) 2019-01-01 ~ 2021-10-10
這種比較平穩的就很合適,不過 2021 台股大漲,基本上要獲利應該很簡單
今天就大致介紹一下一個簡單的交易策略,因為只有使用移動平均線,所以使用起來相對簡單,但是因為參數簡單,所以很難判斷遇到的狀況到底是不是合用,賠錢的機會也是蠻高的。不過有這個簡單的策略來熱身,之後可以找一些相對報酬率高的策略來使用