分析期货交割单

新手专区
标签: #<Tag:0x00007fb12c396ae0>

(hugo) #1

想要分析一下期货交割单信息,于是把股票交割单的模板改了一下
trade_data[‘买卖标志’] 为open,close,close_today
trade_data[‘成交数量’]根据方向为-1,1
但是在回测是没有生成回测收益曲线,也没有成交信息,请问是什么原因呢

# 本代码由可视化策略环境自动生成 2019年11月15日 12:25
# 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。


# 回测引擎:初始化函数,只执行一次
def m2_initialize_bigquant_run(context):
    context.trade_data = context.options['data']
    context.set_long_only()
    # 设置按制定价格交易
    from zipline.finance.slippage import SlippageModel
    class FixedPriceSlippage(SlippageModel):
        def process_order(self, data, order, bar_volume=0, trigger_check_price=0):
            if order.limit is None:
                price_field = self._price_field_buy if order.amount > 0 else self._price_field_sell
                price = data.current(order.asset, price_field)
            else:
                price = order.limit
            return (price, order.amount)
    fix_slippage = FixedPriceSlippage()
    fix_slippage._price_field_buy = 'low'
    fix_slippage._price_field_sell = 'high'
    fix_slippage = FixedPriceSlippage(price_field_buy='low', price_field_sell='high')
    context.set_slippage(us_equities=fix_slippage)
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
# 回测引擎:每日数据处理函数,每天执行一次

def m2_handle_data_bigquant_run(context, data):
    # 按日期过滤得到今日收盘后的下单股票
    trade_data = context.trade_data[context.trade_data['成交日期'] == data.current_dt.strftime('%Y-%m-%d')]

    if len(trade_data)>0:
        print('下单时间:%s'%data.current_dt.strftime('%Y-%m-%d'))
    for row,slice_data in trade_data.iterrows():
       
        volume = slice_data['成交数量']
        if slice_data['买卖标志'] in ['open']:
            effect='open'
        elif slice_data['买卖标志'] in ['close','close_today']:
            effect=slice_data['买卖标志']
        else:
            print('警告:未知的买卖标志 %s' % slice_data['买卖标志'])
        try:
            
            ''''''
            print('code:%s,开/平:%s,数量%s 金额%s'%(slice_data['证券代码'],
                                              effect,
                                             volume,
                                             slice_data['成交价格']))
            
            sid= context.future_symbol(slice_data['证券代码'])
            context.order(sid,volume,limit_price=slice_data['成交价格'],position_effect= effect)
            print(context.portfolio.positions[sid]['amount'])
                
        except Exception as e:
            pass
        
    
        
# 回测引擎:准备数据,只执行一次
def m2_prepare_bigquant_run(context):
    pass

# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。
def m2_before_trading_start_bigquant_run(context, data):
    '''
    open_orders = context.get_open_orders()
    print(open_orders)
    for orders in open_orders.values():
        for _order in orders:
            print('订单:', context.get_order(_order))
    '''
    pass

# 获取交割单
m4 = M.order_record_input.v5(
    trading_records_filename='fut_mark.csv',
    date_col='成交日期',
    instrument_col='证券代码',
    side_col='买卖标志',
    trade_price_col='成交价格',
    trade_volume_col='成交数量',
    m_cached=False
)

# 交易回测模块
m2 = M.trade.v4(
    instruments=m4.instruments_ds,
    options_data=pd.read_csv('fut_mark.csv'),
    start_date='',
    end_date='',
    initialize=m2_initialize_bigquant_run,
    handle_data=m2_handle_data_bigquant_run,
    prepare=m2_prepare_bigquant_run,
    before_trading_start=m2_before_trading_start_bigquant_run,
    volume_limit=0,
    order_price_field_buy='open',
    order_price_field_sell='close',
    capital_base=20000000,
    auto_cancel_non_tradable_orders=True,
    data_frequency='daily',
    price_type='真实价格',
    product_type='期货',
    plot_charts=True,
    backtest_only=False,
    benchmark=''
)


m5 = M.N_days_performance_statistics.v5(
    backtest_ds=m2.raw_perf,
    N=5
)
'''
m6 = M.daily_position_analysis.v6(
    backtest_ds=m2.raw_perf
)

m1 = M.Brinson.v7(
    backtest_ds=m2.raw_perf,
    benchmark='000300.HIX'
)

m3 = M.strategy_ret_risk_analysis.v1(
    backtest_ds=m2.raw_perf
)
'''

(iQuant) #3

您好,期货交割单功能暂时还不支持,因为目前平台还没有期货因子。


(hugo) #5

如果只是根据交割单生成收益曲线及回测风险收益信息应该不影响啊


(hugo) #6

我已经将需要因子分析的模块注释掉了 只保留了5日收益分析,这个应该不影响吧,而且“交易详情”中完全没有信息


(达达) #7

这个是针对股票的分析,比如买入、卖出的方向,以及代码的格式要求等等都是针对股票的。


(hugo) #9

谢谢 回复 我已经将m2_handle_data_bigquant_run中针对股票的部分改为了期货的,并且格式也做了调整,不知m2_initialize_bigquant_run中是否需要做相应的更改