ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法交易 | ATS-SMART算法

2020-12-17 16:00:06  阅读:485  来源: 互联网

标签:00 id 算法 ATS time order SMART algo


ATS-SMART算法

根据用户委托交易特征,通过对市场高频数据的实时分析和处理,利用程序化分析动态选择最优算法执行用户委托。具有高完成度,高稳定性,高隐蔽性,低敞口等特点,在不同持仓风格场景下,中长期均体现出稳定超越TWAP/VWAP基准的效果;

ATS-SMART算法参数

开始时间(P1):策略开始执行的时间(剔除非交易时间段)。如果开始时间早于策略下达时间点时,则使用下达时间作为开始时间
结束参考时间(P2): 结束参考时间,和结束时间一致
结束时间(P3):策略停止执行的时间(剔除非交易时间段)。过了结束时间还未完成的数量,将会自动释放到指令。算法执行的区间段,时间越短,任务执行强度(委托频率和单笔委托量)越高
结束时间是否有效:算法在结束时间是否有效,如设为无效,则以收盘时间为结束时间
涨停时是否停止卖出:标的在涨停时是否需要停止卖出
跌停时是否撤单:标的在跌停时是否需要撤单
最小交易金额:控制子单单笔委托的最小金额 该参数只适用于股票。A股单位为元
基准价格:此算法不生效

注意:p3必须晚于p2,p2必须晚于p1,交易时长必须大于3分钟,不得晚于14:55,交易数据不应该早于当前时间

ATS-SMART算法示例源码

# coding=utf-8
from gm.api import *
from gm.model import DictLikeAlgoOrder
from gm.pb.account_pb2 import AlgoOrder
from datetime import timedelta
"""
算法单新增api在 sdk 的 gm.api.trade.py 文件里, 有如下函数, 具体函数签名可点进去看api文档
algo_order
algo_order_cancel
algo_order_pause
get_algo_child_orders
get_algo_orders
start_time    str    开始时间
end_time_referred    str    结束参考时间(不能超过14:55:00)
time_end    str    结束时间(不能超过14:55:00)
end_time_valid    int    结束时间是否有效,如设为无效,则以收盘时间为结束时间, 1为有效, 0为无效
stop_sell_when_DL    int    涨停时是否停止卖出, 1为是,0为否
cancel_when_PL    int    跌停时是否撤单, 1为是, 0为否
min_trade_amount    int    最小交易金额
"""
# ATS-SMART算法示例, 仅接口使用示例
def init(context):
    time = (context.now + timedelta(seconds=3)).strftime('%H:%M:%S')
    schedule(schedule_func=algo, date_rule='1d', time_rule=time)
def algo(context):
    # 算法名
    algo_name = 'ATS-SMART'
    # 算法参数格式如下
    algo_param = {'start_time': '13:00:00', 'end_time_referred': '15:00:00', 'end_time': '14:00:00', 'end_time_valid': 1, 'stop_sell_when_DL': 1,
                  'cancel_when_PL': 0, 'min_trade_amount': 100000}
    symbol = 'SHSE.600008'
    # 基准价, 算法母单需要是限价单
    price = current(symbol)[0]['price']
    aorder = algo_order(symbol=symbol, volume=2000, side=OrderSide_Buy, order_type=OrderSide_Buy,
               position_effect=PositionEffect_Open, price=price, algo_name=algo_name, algo_param=algo_param)
    # 提取算法单的 cl_ord_id 委托客户端ID, 用于其它api的查询, 或者撤单时用
    context.algo_order_id = aorder[0]['cl_ord_id']
    #  撤销指定cl_ord_id的算法母单
    # aorders = get_algo_orders(account='')
    # wait_cancel_orders = [{'cl_ord_id': aorders[0]['cl_ord_id'], 'account_id': aorders[0]['account_id']}]
    # algo_order_cancel(wait_cancel_orders)
def on_order_status(context, order):
    # 算法子单已成
    if order['status'] == 3:
        # 查询指定cl_ord_id算法母单的所有子单
        child_order = get_algo_child_orders(context.algo_order_id, account='')
        print('算法子单: child_order ={}'.format(child_order))
def on_algo_order_status(context, algo_order):
    # type: (Context, DictLikeAlgoOrder) -> NoReturn
    """
    算法单状态事件. 参数algo_order为算法单的信息
    响应算法单状态更新事情,下算法单后状态更新时被触发
    3.0.125 后增加.
    """
    print('算法单状态变化: algo_order={}'.format(algo_order))
    # 算法母单已报
    if algo_order['status'] == 1:
        # 查询算法母单, 默认账户account填空
        aorders = get_algo_orders(account='')
        print('算法母单: aorders ={}'.format(aorders))
if __name__ == '__main__':
    '''
    strategy_id策略ID,由系统生成
    filename文件名,请与本文件名保持一致
    mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
    token绑定计算机的ID,可在系统设置-密钥管理中生成
    backtest_start_time回测开始时间
    backtest_end_time回测结束时间
    backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
    backtest_initial_cash回测初始资金
    backtest_commission_ratio回测佣金比例
    backtest_slippage_ratio回测滑点比例
    '''
    run(strategy_id='3acc8b6e-af54-11e9-b2de-00163e0a4100',
        filename='main.py',
        mode=MODE_LIVE,
        token='2c4e3c59cde776ebc268bf6d7b4c457f204482b3',
        backtest_start_time='2020-11-02 08:00:00',
        backtest_end_time='2020-11-02 16:00:00',
        backtest_adjust=ADJUST_PREV,
        backtest_initial_cash=10000000,
        backtest_commission_ratio=0.0001,
        backtest_slippage_ratio=0.0001)

掘金量化智能算法交易:https://bbs.myquant.cn/topic/2016

标签:00,id,算法,ATS,time,order,SMART,algo
来源: https://blog.csdn.net/zk168_net/article/details/111317067

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有