当前位置:   article > 正文

自己做量化交易软件(43)小白量化实战16--利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计_ptrade量化回测策略

ptrade量化回测策略

自己做量化交易软件(43)小白量化实战16–利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计

量化产品PTrade(Personalise Trade)交易系统采用事件驱动式回测平台,与聚宽量化平台类似的量化框架,内置Ta-lib金融模块,除了Ta-lib提供的金融指标外,用户无法直接使用仿大智慧自编公式,需要采用类似C++的算法来实现指标策略。
众所周知,Python如何使用C++的程序算法流程,包含大量嵌套循环,效率极其低下。以此方法实现的自编策略,回测1个月,可能需要数小时才能完成。因此在做设计策略时,尽量依赖C++的Python模块开发的numpy和pandas库实现,同样的回测工作,数十秒完成。
小白量化金融模块仿大智慧指标系统,主要依赖numpy库和pandas库,因此计算速度很快。此外后期版本将一些numpy库和pandas库没有的大智慧和通达信函数都转化为C++的Python模块,提高仿大智慧和仿通达信自编指标回测速度,也可以实现因子矩阵自编公式运算。目前是个别函数以Python代码实现的,使用这些函数调用,将降低回测速度,例如SMA(),WMA(),ZIG()等函数,这些是用纯Python代码实现的,因使用了嵌套循环计算,所以速度比较慢。后期计划都转化为C++的Python模块,达到与numpy库和pandas库一样的计算速度。
其他不多说了,下面直接给出PTrade(Personalise Trade)交易系统上自编公式MACD交易策略的实现代码,读者可以仿造此程序,替换为自己的自编指标公式,在PTrade上实现仿大智慧和仿通达信自编指标回测和实战交易。

import pandas as pd  
import numpy  as np


global CLOSE,LOW,HIGH,OPEN,VOL
global C,L,H,O,V
##从小白量化公式函数库中复制.
## 函数来源 HP_formula
def ABS(Series):  #绝对值 
    return abs(Series)

def SUM(Series, N):
    if N<=0:
        N=len(Series)
    sum_=pd.Series.rolling(Series, N).sum()
    return pd.Series(sum_,name='sums')
    

def EMA(Series, N):
    return pd.Series.ewm(Series, span=N, min_periods=N - 1, adjust=True).mean()

def HHV(Series, N):
    if N==0:
        return Series.cummax()
    else:
        return pd.Series(Series).rolling(N).max()

def LLV(Series, N):
    if N==0:
        return Series.cummin()
    else:
        return pd.Series(Series).rolling(N).min()

def CROSS(A, B):
    A2=np.array(A)
    var = np.where(A2<B, 1, 0)
    return (pd.Series(var, index=A.index).diff()<0).apply(int)


def IF(COND, V1, V2):
    var = np.where(COND, V1, V2)
    return pd.Series(var)

def REF(Series, N,sign=0):
    #sign=1表示保留数据,并延长序列
    if sign==1:
        for i in range(N):
            Series=Series.append(pd.Series([0],index=[len(Series)+1]))
    return Series.shift(N)


#来源于网上自编指标公式,或股票软件中公式源代码
#MACD 指数平滑移动平均线
def MACD(SHORT=12, LONG=26, M=9):
    """
    MACD 指数平滑移动平均线
    """
    DIFF = EMA(CLOSE, SHORT) - EMA(CLOSE, LONG)
    DEA = EMA(DIFF, M)
    MACD = (DIFF - DEA) * 2

    return DIFF,DEA,MACD

#Ptrade交易策略编写
def initialize(context):
    # 初始化此策略
    # 设置我们要操作的股票池, 这里我们只操作一支股票
    g.security = '600519.SS'
    set_universe(g.security)
    
#当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
def handle_data(context, data):
    global CLOSE,LOW,HIGH,OPEN,VOL
    security = g.security
    
    # 得到十日前的历史价格
    mydf= get_price(g.security, count=300, frequency='1d',fields=['open','close','low','high','volume'])
    
    #小白量化数据规格化
    mydf['date']=mydf.index
    mydf=mydf.reset_index(level=None, drop=True ,col_level=0, col_fill='')  
    CLOSE=mydf['close']
    LOW=mydf['low']
    HIGH=mydf['high']
    OPEN=mydf['open']
    VOL=mydf['volume']
   
    #计算MACD指标
    diff,dea,macd=MACD()
    mydf['diff']=diff
    mydf['dea']=dea
    mydf['macd']=macd
    
    #交易策略,仅供演示
    #买点:MACD指标diff上穿dea数值,并且diff小于0
    mydf['B']=CROSS(mydf['diff'],mydf['dea'])*IF(mydf['diff']<0,1,0)
    
    #卖点:MACD指标diff下穿dea数值
    mydf['S']=CROSS(mydf['dea'],mydf['diff'])

    # 取得昨天收盘价
    price = data[security]['close']

    # 得到当前资金余额
    cash = context.portfolio.cash
    
    # 如果出现买点
    if mydf['B'].iloc[-1] > 0:
        # 用所有 cash 买入股票
        order_value(security, cash)
        # 记录这次买入
        log.info("Buying %s" % (security))
        
    # 如果出现卖点
    elif mydf['S'].iloc[-1]>0 and get_position(security).amount > 0:
        # 全部卖出
        order_target(security, 0)
        # 记录这次卖出
        log.info("Selling %s" % (security))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120

程序回测结果如下图.
在这里插入图片描述
在PTrade交易软件上回测,如果没问题,能够赢利,可以直接启动策略交易进行交易实战。

请持续关注我的博客,我的进步,就是你的进步!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/607637
推荐阅读
相关标签
  

闽ICP备14008679号