• 01.自动化交易综述


    算法交易的概念:

    利用自动化平台,执行预先设置的一系列规则完成交易行为。

    算法交易的优势

    1.历史数据评估
    2.执行高效
    3.无主观情绪输入
    4.可度量评价
    5.交易频率

    算法交易的劣势

    1.成本,成本低难以体现收益
    2.技巧

    算法交易流程

    大前提:基于某种平台(可自建)
    1.提出假设
    2.建立模型
    3.回测验证
    4.执行交易

    交易策略的来源(trading strategy)

    1市场微观结构研究(for HFT mostly)
    2.基金结构套利(fund structure arbitrage)
    3机器学习/人工智能(重点)

    机器学习的四个流派:

    离散的角度:符号主义(symbolism),可解释性好
    代表性算法领域 1:决策树,涉及到的学科知识:信息论;
    代表性算法领域 2:规则学习 (Rule),涉及到的学科知识:数理逻辑;

    连接主义(connectionism)
    代表性算法领域:神经网络,涉及到的学科知识:泛函分析。

    连续的角度:频率主义(frequentists)
    代表性算法领域:支持向量机 (SVM),涉及到的学科知识:统计学;

    概率角度:贝叶斯主义(bayesian)
    代表性算法领域:贝叶斯,例如朴素贝叶斯、概率图等,涉及到的学科知识:统计学、概率论;

    ML的核心三板斧:

    Data
    Model & Objective Function
    Optimization:寻找上面function的极值的方法

    ML+Trading

    限价委托单薄模型(Limit Order Book Modeling)
    基于价格的分类模型(Price-based Classification Models),最常用,吃价格,输出分类(买卖)
    基于文本的分类模型(Text-based Classification Models)基于高质量网站(Twitter)或股票评论网站(新浪财经新闻),采用自然语言处理方式进行选股票(信噪比较大,新闻来源,各种托)
    强化学习(Reinforcement Learning)

    ML+Trading建模四要素

    Good model and efficient trading algorithms
    Hardware( GPU/CPU)硬件要求
    High quality data,数据是模型精度的上限
    Platform(keras/tensorflow/sklearn) python为主

    交易策略的评估

    1.策略的基本假设
    2.Sharp Ratio
    3.杠杆
    4.频率
    5.风险
    6.W/L
    7.模型复杂度 VC dim
    8.最大亏损 Maximum drawdown
    9.Benchmarking

    回测

    1.回测是指将交易策略在历史数据中进行合理验证的过程。
    2.回测的意义:
    策略筛选
    策略优化
    策略验证
    3.错误的回测:
    乐观主义偏差 special look back region
    时间旅行
    ·程序bug
    ·train/val/test set
    幸存者误差(选股)

    搭建平台需要理解事件驱动的编程模型

    while True:
    	new_even = get_new_event()
    	if new_event.something='事件1':
    		do_something()
    	if new_event.something='事件2':
    		do_something_else()
    	
    	tick(50) #wait 50 milliseconds
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    金融时间序列数据统计分析(米筐)

    import warnings
    warnings.filterwarnings("ignore")
    import numpy as numpy
    import pandas as pd
    import matplotlib.pyplot as plt
    # matplotlib没有就 pip install matplotlib
    plt.style.use('seaborn')
    #将matplotlib的图表直接嵌入到Notebook之中,py文件不支持这个命令
    #%matplotlib inline
    
    '''
    导入数据
    1.以时间为索引
    2.将事件转换成标准格式
    3.绘制展示各个指标的走势图
    '''
    #指定第一列为索引列,并且自动将时间文本转化为日期类型
    data = pd.read_csv('stockdata.csv',index_col=0,parse_dates=True)
    data.head()
    
    data.plot(figsize = (10,12))
    
    #分开显示
    data.plot(figsize = (10,12),subplot = True)
    
    '''
    各个指标含义
    AAPL.O:Applo Stock
    MSFT.O:Microsoft Stock
    INTC.O:IntelStock
    AMZN.O:Amazon Stock
    GS.N:Goldman Sachs Stock
    SPY:SPDR S&P 500 ETF Trust 
    SPX:S&P 500 Index
    VIX:VIX Volatity Index
    EUR:EUR/USD Exchange Rate 
    XAU:Gold Price 
    GDX:VanEck Vectors Gold Miners ETF 
    GLD:SPDR Gold Trust
    '''
    
    # 统计分析
    data.info()
    
    data.describe().round(2)
    
    data.mean()
    
    data.aggregate([min,max,np.mean,np.std,np.median])
    
    • 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
    #示例程序,至少包含4个必须实现的方法
    import talib
    # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
    def init(context):
        context.s1 = "000001.XSHE"
        #实时打印日志
        logger.info("Interested at stock:" + str())
    
    # before_trading函数会在每天交易开始前被调用,当天仅会调用一次
    def before_trading(context, bar_dict)
    	pass
    	
    #
    
    # 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
    # 该策略执行的频率在右边可以选择:天、分钟
    def handle_bar(context, bar_dict):
        # 开始编写你的主要的算法逻辑
        pass
    
    # after_trading函数会在每天交易结束后被调用,当天只会被调用一次
    def after_trading(context):
        pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    从300支股票从选取10支收益率最高的股票,并买入;
    收益率从股票的财务数据中提取,然后排序;
    该策略每天执行,每天都会更新10支股票,需要将现有股票与排行榜中的股票进行比对,卖掉不在榜内的股票,买入在榜上的股票。

  • 相关阅读:
    【初赛题解】CSP-J 2022 入门级 第一轮 第16题
    [论文分享/阅读]Normalization/正则化分享总结
    【LeetCode】图解算法数据结构+java代码实现(数据结构篇)
    代码检视的新姿势!在IDEA中得到沉浸式Code Review新体验
    整理了一份ECS夏日省钱秘籍,这次@老用户快来领走
    【数据链路层】点对点协议PPP(湖科大慕课自学笔记)
    Leetcode日练笔记41 [二叉树recursion专题] #250 Count Univalue Subtrees /Medium {Python}
    代码随想录Day51 完结篇 LeetCode T84 柱状图的最大矩形
    Jquery,javascript 的处理机制
    AVL树大总结
  • 原文地址:https://blog.csdn.net/oldmao_2001/article/details/132766056