编辑代码

# 导入函数库
from jqdata import *
import numpy as np
import talib as ta
from scipy.fftpack import fft


# 初始化函数,设定基准等等
def initialize(context):
    set_backtest()
    set_params()
  
    ## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)
      # 开盘前运行
    run_daily(onStart, time='before_open', reference_security='000300.XSHG')
    run_daily(onUpdate, 'every_bar')
    run_daily(onClose, time='after_close', reference_security='000300.XSHG')


def set_params():  # g -- 全局函数
    g.days = 0  # 起始日期为0
    g.refresh_rate = 10  # 调仓周期设置为10日
    g.last_dt = '9999-12-31' # 前一天的日期
    
    g.etfs = [
        '511380.XSHG', # 转债ETF
        '515220.XSHG', # 煤炭ETF
        '159980.XSHE', # 有色ETF
        '159985.XSHE', # 豆粕ETF
    ]


def set_backtest():
    set_benchmark('000300.XSHG')  # 设定沪深300作为基准
    set_option('use_real_price', True) # 开启动态复权模式(真实价格)
    log.set_level('order', 'error')  # 设置报错等级
     
     ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
def onStart(context):
    pass


def onUpdate(context):
    g.days += 1
    prePrx = getLastPrice(context, g.etfs) # DataFrame Object

    

def onClose(context):
    pass
        


def cull(context):   # 筛选标的物
    pass


def Strategy(context):  # 写策略
    pass


def getLastPrice(context, etfs):
    g.last_dt = (context.current_dt - datetime.timedelta(1)).strftime('%Y-%m-%d')
    result = get_price(etfs, g.last_dt, context.previous_date, frequency='1d', fields=['open', 'close', 'high', 'low'])
    return result