蜡烛图对于直观理解很重要. mpl.finance早已迁移至mpl_finance, 此外在有时画蜡烛图需要涉及时间格式的处理(请参考这里)
import matplotlib.pyplot as plt import mpl_finance as mpf fig, ax = plt.subplots() #mpf.candlestick_ochl(ax, quotes) #涉及对时间的不必要处理, 不好用 mpf.candlestick2_ochl(ax, k['open'], k['close'], k['high'], k['low'], width=1, colorup='r',colordown='g')这里将使用talib talib的安装与简易使用, BBANDS函数解析之后再写 民工三连: MA, MACD, BBANDS
from talib import MA,MACD,BBANDS u,m,l = BBANDS(k['close']) ma5 = MA(k['close'], 5) ma10 = MA(k['close'], 10) fig, axs = plt.subplots(2,1) mpf.candlestick2_ochl(axs[0], k['open'], k['close'], k['high'], k['low'], width=1, colorup='r',colordown='g') axs[0].plot(ma5, color='b') axs[0].plot(ma10, color=(0.1, 0.2, 0.5)) axs[0].plot(u, color='y') axs[0].plot(l, color='y') macd, macdsignal, macdhist = MACD(k['close'], fastperiod=12, slowperiod=26, signalperiod=9) axs[1].plot(macd) axs[1].plot(macdsignal) axs[1].bar(range(len(macdhist)),macdhist)根据经验观测, 尝试构造以下简单策略:
BBANDS反转策略: 在BBANDS下界多单,上界空单, 当超出时按比例加仓(需要小仓位, 否则容易爆仓)超过MA30后加仓, 相反则减仓MA5>MA10时加仓,相反则减仓macd上突后加仓, 相反则减仓实现(理想情况)(用于回测):
stackmalong = (k['close']>ma30)*1.0 stackmashort = (ma5>ma10)*2.0 stackmacd = (mahist>0)*2.0 #bbands 策略略微复杂一些,决策(用于交易)(伪代码) 具体的实现将在下一篇文章里
stackc = current_stack = hold/asset+1 stackr = recommended_stack = f(k) if stackr-stackc>0: tobuy = (stackr-stackc)*asset*p/100 equprice = f2(depth) api_buy(tobuy, equprice) else: tosell = (stackr-stackc)*asset*p/100 equprice = f2(depth) api_sell(tosell, equprice)此外, k线并非只由close构成, 尤其是合约中由于止损/爆仓的存在, 会出现上下插针的情况, 对于简单策略影响很大 将盘口纳入考量也十分必要, 限于篇幅暂不表述 在high/low中经常会触发策略,而等k线结束通常早就凉了, 长线可能还好, 短线会哭的**都不认识的