精华内容
下载资源
问答
  • 2022-03-19 17:10:35

    这个可转债的策略并不复杂,由于是交易在1分钟上,所以交易特别频繁,对交易手续费特别敏感,如果不考虑手续费,曲线特别好,考虑过手续费(万分之二)之后,亏的很惨。如果在这种频繁交易的话,需要考虑和券商协商下是否能降低一些手续费;如果不能,需要考虑在更大的周期上进行交易,以降低交易频率,减少部分手续费。

    策略逻辑

    1. 在1分钟的可转债上进行交易,只能做多,可以T+0平仓。
    2. 遍历所有可交易的可转债,如果同时满足下面的五个条件,就准备用40%的资金进行买入,同一时间最多持有两个可转债
      1. 当前价格大于20均线
      2. 当前价格大于分时均价
      3. 当前涨幅小于1%,大于-1%
      4. 最近没有大于30分钟均量4倍以上的K线(策略中只判断了最近的一根,根据自己的需要循环几根K线判断最近是否满足)
      5. 近期20均线上移降速 但是并没有向下
    3. 平仓条件
      1. 当价格跌破 前期低点平仓(用20周期的最低价替代低点)
      2. 当盈利3%的时候止盈
      3. 当持有超过10分钟的时候平仓

    策略代码

    from __future__ import (absolute_import, division
    更多相关内容
  • %作者:Moeti Ncube %这是可用于回测交易策略的代码。 所使用的示例策略部分用于开发中频算法交易策略; 这是我们用来分析刻度数据的一些回测编码。 此代码可用于回测时间序列的交易策略,该时间序列的第一列是价格...
  • 数量 执照 版权所有(C)2011 Michael Ihde 该程序是免费软件; 您可以根据自由软件基金会发布的GNU通用... Quant的目标是提供一个有用的实验框架,以探索适用于管理401k,IRA或其他长期投资的临时投资者的交易策略
  • Excel-VBA 股票网格交易策略回测

    万次阅读 2021-11-28 17:32:31
    网格交易策略百分百不会亏钱吗? 结果是不会骗人! 我们今天就拿历史数据来测试一下!

    大家好,我是陈小虾,是一名自动化方向的IT民工。写博客是为了记录自己的学习过程,通过不断输出倒逼自己加速成长。功能说明:由于水平有限,博客中难免会出现一些BUG,或者有更优方案恳请各位大佬不吝赐教!微信公众号:万能的Excel

    ​​​​​​​

    网格交易策略百分百不会亏钱吗?

    结果是不会骗人!

    我们今天就拿历史数据来测试一下!

    受股神巴菲特的影响,现如今很多人都是价值投资的拥护者。投资和投机要区分开,这个道理谁都懂,但是因为市场的变化莫测,谁都没办法预测股票中短期的走势,对于长期的预测,只要基本面不变,长期的趋势基本可以很大概率可以看出来。但,谁都不知道这个长期是多长,涨跌的幅度是多大? 看着其他版块的股票此起彼伏陆续飘红,不知道你是否还能坚持拿住?

    网格策略就是一种在震荡市中获取一定收益,以及极大缓解焦虑的优质策略。将中短期策略与长期策略组合,来应对未来可能发生的事。小编根据E大的网格交易策略1.0,用Excel 做了一个自动回测的表格,找了顺鑫农业(000860)近一年的历史数据,做了一次回测测试(E大在文中着重强调了,个股不适合用网格策略)。因此运行的结果仅供实验参考!

    制定网格交易策略

    这个设置的网格大小是 5%,也就是涨5%就卖掉这一笔股票,跌5%就再买一笔。

    每一笔交易的金额我设定的是 10000元,总共设定了10个交易区间。那么压力测试就是10W。买入的金额以实际计算的为主,我这里写的10000仅为了方便计算。具体的网格大小,网格数要根据自己的策略去设定,我这里只是将E大的策略复现。

    导入历史数据

    因为只是简单的策略测试,我这边取的是个股每日的收盘价来作为交易参考。个股的历史数据可以去网易财经下载(http://quotes.money.163.com/trade/lsjysj_000860.html#06f01)。

    这里要注意的是下载的数据时间排序,因为策略是模拟交易所以日期要由远到近。日期和收盘价要一一对应。

    交易策略实现

    关于策略实现的部分,我用的是Excel VBA. 日期和收盘价是需要靠手动导入,程序会自动计算当前价位下的持仓位,成本,市值等

    持仓数:根据估价当前的价格,严格按照网格策略中制定的持仓数来执行仓位情况。

    成本:为了简单计算,我直接用1W来作为参考,实际价格会比这个低。

    可用资金:这个是根据10个网格,每个网格是1W而计算出来的全部本金扣除当前的持仓成本;

    市值:是根据当前股票的市值加上可用资金,可以明显看出当前的盈利情况。

    测试结果

    这里的折线图是自动生成的,并且会在图中标明操作的情况。因为是第一版,还没加入交易的手续费,后期会继续优化这个交易策略。

    源文件下载

    关注公众号:万能的Excel  回复【网格策略回测】,立即领取!

    展开全文
  • Python交易策略回测器 支持主动,被动或混合策略。 积极策略占领市场 被动策略造就了市场 混合策略可以是主动的也可以是被动的 依存关系: Pandas , Numpy , Python ,这些东西都需要,例如Cython等。
  • 快速回测器 基于pandas/matplotlib等的快速Python交易策略回测平台,支持多工具策略。
  • 将您的工作目录设置为“TradingStrat > CSV”(CSV 文件夹包含使用回测器所需的逗号分隔值数据) 3. 通过在 Matlab 提示符下键入 runCSV 来运行文件“runCSV.mat”。 4.将打开一个新窗口。 在“输入:”窗口中,...
  • 本文探讨了使用机器学习模型来构建市场生成器。... 然后,文章提出了一种估计回测统计概率分布的新方法。 最终目标是开发一个框架来改进量化投资策略的风险管理,特别是在聪明贝塔、因子投资和另类风险溢价空间。
  • 博文《Python量化交易策略及回测系统》详细的介绍了Python量化交易策略编写的全过程,包括: ...2、量化交易策略回测系统的编写 3、量化交易策略的设计 4、使用量化交易策略及回测系统对多个股票进行回测,计算收益率
  • 1.Matlab交易策略回测模板for i=1::length(data)if MarketPosition==0LongMargin(i)=0;%多头保证金ShortMargin(i)=0;%空头保证金StaticEquity(i)=StaticEquity(i-1);%静态权益DynamicEquity(i)=StaticEquity(i);%...

    1.

    Matlab交易策略回测模板

    for i=1::length(data)

    if MarketPosition==0

    LongMargin(i)=0; %多头保证金

    ShortMargin(i)=0; %空头保证金

    StaticEquity(i)=StaticEquity(i-1); %静态权益

    DynamicEquity(i)=StaticEquity(i); %动态权益

    Cash(i)=DynamicEquity(i); %可用资金

    end

    if MarketPosition==1

    LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;

    StaticEquity(i)=StaticEquity(i-1);

    DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;

    Cash(i)=DynamicEquity(i)-LongMargin(i);

    end

    if MarketPosition==-1

    ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;

    StaticEquity(i)=StaticEquity(i-1);

    DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;

    Cash(i)=DynamicEquity(i)-ShortMargin(i);

    end

    %开仓模块

    %开多头

    if MarketPosition~=1 && 请输入相关触发条件  %用i-1,避免未来函数

    %平空开多

    if

    MarketPosition==-1

    MarketPosition=1;

    ShortMargin(i)=0; %平空后空头保证金为0了

    MyEntryPrice(i)=UpperLine(i-1);

    if

    Open(i)>MyEntryPrice(i) %考虑是否跳空

    MyEntryPrice(i)=Open(i);

    end

    MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格(也是平空仓的价格)

    ClosePosNum=ClosePosNum+1;

    ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格

    CloseDate(ClosePosNum)=Date(i);%记录平仓时间

    OpenPosNum=OpenPosNum+1;

    OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格

    OpenDate(OpenPosNum)=Date(i);%记录开仓时间

    Type(OpenPosNum)=1; %方向为多头

    StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum-1)-ClosePosPrice(ClosePosNum))...

    *TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...

    -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益

    DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;

    end

    %空仓开多

    if

    MarketPosition==0

    MarketPosition=1;

    MyEntryPrice(i)=UpperLine(i-1);

    if

    Open(i)>MyEntryPrice(i) %是否跳空

    MyEntryPrice(i)=Open(i);

    end

    MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格

    OpenPosNum=OpenPosNum+1;

    OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格

    OpenDate(OpenPosNum)=Date(i);%记录开仓时间

    Type(OpenPosNum)=1; %方向为多头

    StaticEquity(i)=StaticEquity(i-1);

    DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;

    end

    LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio; %多头保证金

    Cash(i)=DynamicEquity(i)-LongMargin(i);

    end

    %开空头

    %平多开空

    if MarketPosition~=-1 &&请输入相关触发条件

    if

    MarketPosition==1

    MarketPosition=-1;

    LongMargin(i)=0; %平多后多头保证金为0了

    MyEntryPrice(i)=LowerLine(i-1);

    if Open(i)

    MyEntryPrice(i)=Open(i);

    end

    MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;%建仓价格(也是平多仓的价格)

    ClosePosNum=ClosePosNum+1;

    ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格

    CloseDate(ClosePosNum)=Date(i);%记录平仓时间

    OpenPosNum=OpenPosNum+1;

    OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格

    OpenDate(OpenPosNum)=Date(i);%记录开仓时间

    Type(OpenPosNum)=-1; %方向为空头

    StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum-1))...

    *TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...

    -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益

    DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;

    end

    %空仓开空

    if

    MarketPosition==0

    MarketPosition=-1;

    MyEntryPrice(i)=LowerLine(i-1);

    if Open(i)

    MyEntryPrice(i)=Open(i);

    end

    MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;

    OpenPosNum=OpenPosNum+1;

    OpenPosPrice(OpenPosNum)=MyEntryPrice(i);

    OpenDate(OpenPosNum)=Date(i);%记录开仓时间

    Type(OpenPosNum)=-1; %方向为空头

    StaticEquity(i)=StaticEquity(i-1);

    DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;

    end

    ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;

    Cash(i)=DynamicEquity(i)-ShortMargin(i);

    end

    %如果最后一个Bar有持仓,则以收盘价平掉

    if i==length(data)

    %平多

    if MarketPosition==1

    MarketPosition=0;

    LongMargin(i)=0;

    ClosePosNum=ClosePosNum+1;

    ClosePosPrice(ClosePosNum)=Close(i);%记录平仓价格

    CloseDate(ClosePosNum)=Date(i);%记录平仓时间

    StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum))...

    *TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...

    -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB

    DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等

    Cash(i)=DynamicEquity(i); %空仓时可用资金等于动态权益

    end

    %平空

    if MarketPosition==-1

    MarketPosition=0;

    ShortMargin(i)=0;

    ClosePosNum=ClosePosNum+1;

    ClosePosPrice(ClosePosNum)=Close(i);

    CloseDate(ClosePosNum)=Date(i);

    StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum)-ClosePosPrice(ClosePosNum))...

    *TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...

    -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益,算法参考TB

    DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等

    Cash(i)=DynamicEquity(i); %空仓时可用资金等于动态权益

    end

    end

    pos(i)=MarketPosition;

    end

    展开全文
  • 01引言Ichimoku Kinko Hyo,简称Ichimoku,是...该指标将各种技术策略组合成一个易于实现和解释的指标。“ichimoku”翻译成中文是“一目”的意思,相当于交易者只需要看一眼图表就能确定价格动量走势、支撑和阻力位...

    01

    引言

    3e34d24d858cfbd6ff303eedf4f2c161.png

    Ichimoku Kinko Hyo,简称Ichimoku,是一名日本报纸作家提出的,用于衡量动量以及未来价格支撑和阻力区域的技术分析指标,目前被广泛用于判断外汇、期货、股票、黄金等投资品种的趋势和动量。该指标将各种技术策略组合成一个易于实现和解释的指标。“ichimoku”翻译成中文是“一目”的意思,相当于交易者只需要看一眼图表就能确定价格动量走势、支撑和阻力位。下面首先为大家介绍Ichimoku指标的基本原理,其次使用Python计算该指标并对其云图进行可视化,最后使用backtrader对该指标进行简单的历史回测。

    02

    Ichimoku指标计算与可视化

    90412a0b2213deef2153406141179e15.png

    Ichimoku指标由五条线组成:

    • Tenkan-sen:转折线,通过在过去9交易日最高价和最低价之和除以2,用来表示关键支撑和阻力位,以及反转信号线。

    • Kijun-sen:基准线,通过在过去26个交易日最高价和最低价之和除以2,表示关键支撑位和阻力位,是趋势变化的确认,可用作追踪止损点。

    • Senkou Span A:前导跨度A或先行上线A,通过将tenkan-sen和kijun-sen相加除以2,由此产生的线形成了kumo(或云)的一个边缘,用于识别未来的支撑和阻力区域。

    • Senkou Span B:前导跨度B或先行上线B,通过将过去52个交易日最高价和最低价之和除以2,形成了kumo的另一个边缘,用于识别未来的支撑和阻力区域。

    • Chikou Span:滞后跨度或延迟线是当前周期的收盘价,在图表上显示往前30天的收盘价。该线用于显示可能的支撑和阻力区域。

    使用Python计算Ichimoku指标,并对该指标的云图进行可视化。

    导入Python相关模块

    import pandas as pd
    import matplotlib.pyplot as plt
    #正常显示画图时出现的中文和负号
    from pylab import mpl
    mpl.rcParams['font.sans-serif']=['SimHei']
    mpl.rcParams['axes.unicode_minus']=False
    import tushare as ts
    import backtrader as bt
    import pyfolio as pf

    以Python的class类对数据获取、指标计算和可视化进行封装。

    class cal_ichimoku(object):
        def __init__(self,code='cyb',start='2019-01-01',end='2022-06-01'):
            self.code=code
            self.start=start
            self.end=end
            self.data=self.get_data()
    
        def get_data(self):
            df=ts.get_k_data(self.code,self.start,self.end)
            df.index=pd.to_datetime(df.date)
            return df[['open','high','low','close','volume']]
    
        def ichimoku(self,cl_period=9,bl_period=26,lag_span_period=26,lead_span_b_period=52):
            # 计算转换线
            high_1 = self.data['high'].rolling(cl_period).max()
            low_1 = self.data['low'].rolling(cl_period).min()
            #Tenkan-sen:转换线
            self.data['conversion_line'] = (high_1 + low_1) / 2
            # 计算基准线
            high_2 = self.data['high'].rolling(bl_period).max()
            low_2 = self.data['low'].rolling(bl_period).min()
            self.data['base_line'] = (high_2 + low_2) / 2
            #计算前导跨度A
            self.data['lead_span_A'] = ((self.data.conversion_line + self.data.base_line) / 2).shift(lag_span_period)
            # 计算前导跨度A
            high_3 = self.data['high'].rolling(lead_span_b_period).max()
            low_3 = self.data['high'].rolling(lead_span_b_period).min()
            self.data['lead_span_B'] = ((high_3 + low_3) / 2).shift(lead_span_b_period)
            # 滞后跨度
            self.data['lagging_span'] = self.data['close'].shift(-lag_span_period)
            # 删除缺失值
            self.data.dropna(inplace=True) 
    
        def graph_ichimoku(self):
            fig, ax = plt.subplots(1, 1, sharex=True, figsize=(15, 7))
            ax.plot(self.data.index, self.data['close'], linewidth=2,label='收盘价')
            ax.plot(self.data.index, self.data['lead_span_A'],label='前导跨度A',color='k')
            ax.plot(self.data.index, self.data['lead_span_B'],label='前导跨度B',color='y')
            ax.fill_between(self.data.index, self.data['lead_span_A'], self.data['lead_span_B'],
                    where=self.data['lead_span_A'] >= self.data['lead_span_B'], color='lightcoral')
            ax.fill_between(self.data.index, self.data['lead_span_A'], self.data['lead_span_B'],
                    where=self.data['lead_span_A'] < self.data['lead_span_B'], color='lightgreen')
            plt.legend(loc=0)
            plt.grid()
            plt.show()

    以‘600000’个股为例,其Ichimoku云图如下所示,

    ich=cal_ichimoku(code='600000')
    ich.ichimoku()
    ich.graph_ichimoku()

    fc3bf632a833cf8f9b2a60e66300ddab.png

    图中红色和绿色区域就是云图指标的主要元素。A线和B线形成云图指标的阻力水平和支撑水平。一般而言,绿色的云彩变成红色代表上升趋势内的横盘,红色的云彩变成绿色则代表下跌趋势内的横盘。当转折线由下向上穿过基准线时是买入信号,当转折线由上向下穿过基准线时是卖出信号。下面根据买入卖出信号利用backtrader进行量化回测。

    03

    Ichimoku交易策略回测

    da60d177626458c0b13f1cdfb8cdceae.png

    交易策略:当收盘价在云层上方、转换线从下往上穿过基准线与其云层上方、延迟线位于云层上方时,买入做多;反之,当收盘价在云层下方、转换线从上往下穿过基准线与其云层下方、延迟线位于云层下方时,卖出做空。

    class IchimokuStrategy(bt.Strategy):
        params = ( ('cl_period',9),
                   ('bl_period',26),
                   ('lag_span_period',26),
                   ('lead_b_period',52),)   
    
        def __init__(self):        
            self.dataclose = self.datas[0].close      
            self.datahigh = self.datas[0].high        
            self.datalow = self.datas[0].low     
            self.order = None      
            self.buyprice = 0      
            self.buycomm = 0      
            self.newstake = 0      
            self.buytime = 0       
            # 参数计算
            #计算转换线
            self.Highest_high1 = bt.indicators.Highest(self.datahigh(-1), period=self.params.cl_period, subplot=False)        
            self.Lowest_low1 = bt.indicators.Lowest(self.datalow(-1), period=self.params.cl_period, subplot=False)     
            self.Conversion_line=(self.Highest_high1+self.Lowest_low1)/2
            #计算基准线
            self.Highest_high2 = bt.indicators.Highest(self.datahigh(-1), period=self.params.bl_period, subplot=False)        
            self.Lowest_low2 = bt.indicators.Lowest(self.datalow(-1), period=self.params.bl_period, subplot=False)     
            self.Base_line=(self.Highest_high2+self.Lowest_low2)/2
            #计算前导跨度A
            self.lead_span_A=((self.Conversion_line+self.Base_line)/2)(-self.params.lag_span_period)
            #计算前导跨度B
            self.Highest_high3 = bt.indicators.Highest(self.datahigh(-1), period=self.params.lead_b_period, subplot=False)        
            self.Lowest_low3 = bt.indicators.Lowest(self.datalow(-1), period=self.params.lead_b_period, subplot=False)     
            self.lead_span_B=((self.Highest_high3+self.Lowest_low3)/2)(-self.params.lead_b_period)
            #计算价格的滞后值
            self.lagging_span= self.dataclose(-self.params.lag_span_period)    
            self.Crossover = bt.ind.CrossOver(self.dataclose, self.lead_span_A)         
    
        def next(self): 
            if self.order:
                return        
            #入场        
            # 得到当前的账户价值
            total_value = self.broker.getvalue()*0.9
            if self.Crossover > 0 and self.buytime == 0:                                           
                self.buytime = 1        
                size=int(total_value/100/data.close[0])*100
                self.order = self.buy(size = size)        
            #出场        
            elif self.Crossover < 0 and self.buytime > 0:            
                self.order = self.close()            
                self.buytime = 0

    使用tushare获取交易数据。

    #获取数据在backtrader上回测
    df=cal_ichimoku(code='600000',start='2012-01-01').data
    df['openinterest']=0
    df=df[['open','high','low','close','volume','openinterest']]
    #df.head()

    backtrader回测系统设置。

    #初始化回测系统
    cerebro = bt.Cerebro(cheat_on_open=True)
    #添加策略
    cerebro.addstrategy(IchimokuStrategy)
    #添加数据
    data=bt.feeds.PandasData(dataname=df)
    cerebro.adddata(data)
    #初始资金设置
    startcash = 1000000
    cerebro.broker.setcash(startcash)
    # 设置佣金为0.08%
    cerebro.broker.setcommission(commission=0.0008)
    
    #运行回测系统
    cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
    results = cerebro.run()
    strat = results[0]
    pyfoliozer = strat.analyzers.getbyname('pyfolio')
    returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
    
    #获取回测结束后的总资金
    portvalue = cerebro.broker.getvalue()
    pnl = portvalue - startcash
    #打印结果
    print(f'初始资金:{startcash}')
    print(f'总资金: {round(portvalue,2)}')
    print(f'净收益: {round(pnl,2)}')
    初始资金:1000000
    总资金: 3828151.48
    净收益: 2828151.48

    backtrader回测图

    plt.rcParams['figure.figsize']=[18, 8]
    cerebro.plot(iplot=False)

    249417972f48f31f28fc3e0128e41485.png

    下面进一步使用pyfolio展示更详细的量化回测结果。在2012-2022.06交易期间内,年化回报率为14.5%,总收益率283%,年化波动率36.5%,夏普比率只有0.55,最大回撤高达53.5%,各项指标显示该交易策略效果并没有特别好。

    #使用pyfolio展示回测结果
    pf.create_full_tear_sheet(returns)

    ab932a4a06fc583f03c7337a2a0eefa7.png

    0f6c263cdd11ec813973364edd314dc7.png

    05bf3c21e7bfe94324e1c5b454080ca1.png

    538cdc1dc6464967da43081e001bc658.png

    aeab218d8be61aea721ae2bd5f88b4b6.png

    94b6624e3b7beeba03ff4909ca12bb35.png

    3722d6539018ecdc3259d757b183659c.png

    a4c3ebee9e63e763b7cb2fd904930294.png

    04

    结语

    bb8fbb3f0a9a15ebc3134260f8756c2d.png

    本文简单介绍了Ichimoku指标的基本原理,重点展示了如何使用Python计算该指标并对其云图进行可视化,以及利用该指标构建交易策略并通过backtrader进行历史回测。值得注意的是,本文只是以某个特例(‘600000’)进行回测,得到的结果好坏与否并不能简单代表该指标是否有效,还需要更多样本和案例的支持。动量和趋势是金融市场价格常常表现出来的一种现象,Ichimoku指标与其他动量指标一样,当价格形成一种相对稳定的趋势时(大牛市或大熊市),其预测能力较强,但当价格处于震荡状态时往往失效。此外,技术指标局限于历史价格本身,有点类似温度计,能够一定程度上测量过去和当前的温度,但无法给出明天的温度(无法解释动量如何产生,何时停止)。

    91121cafc0caae50deb5d7321f379fb0.png

    关于Python金融量化

    e659c54d2cd8e2a858d01730de0a28ef.png

    专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、量化投资前沿分析框架,与博主直接交流、结识圈内朋友等。

    7f29ed12d798691fc0cc3dd35771788f.png

    展开全文
  • Python量化交易策略回测系统

    千次阅读 热门讨论 2022-03-11 20:30:37
    目录前言:行文思路1、模块导入2、数据获取3、股票数据类型转换4、策略编写5、回测系统编写6、实例化策略非面向对象的编程 前言:行文思路 由于本文篇幅较长,而且文中关于python数据分析的知识点、python金融量化的...
  • 等期货回测器的cta分支没问题后,再测试该模型; PS: 为了方便模型的回测, 价格设置上确实有不合理的地方, 勿用于实盘, 请见谅; """ from tqz_strategy.template import CtaTemplate from public_module.object ...
  • 这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的朋友可以看一看。1.获取证券数据本文以A股市场为例,先获取A股近10年的数据并保存到数据库。1.1.安装数据库(MongoDB)为了提升运行...
  • 我们可以尝试做这样的改进:在股票a,b,c……的历史数据上分别进行策略回测,找到一个能够稳定收益策略B,来避免时间成本浪费的问题。但是这样仍然存在问题,在等待股票a出现买点的时候,股票b,c……的买点可能也...
  • 1、具体流程 1。利用Python编写好策略,选择选好的股票池。 2。设置开始和结束的时间点,然后设定资金池 ...回测结束后,画出收益和基准收益曲线,列出每日持仓,每日交易和一 些列风险数据。 风险指标学习 ...
  • 算法交易策略的成功回测

    千次阅读 2019-06-28 10:49:02
    本来来自英文网站 QuantStart 中对于算法交易策略回测描述的一篇文章,原文可以参见脚注。[ Successful Backtesting of Algorithmic Trading Strategies - Part I] 市面上介绍算法交易的文章虽然不算多,但也不少,...
  • Python-回测简单的交易策略

    千次阅读 2020-12-11 03:38:11
    这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的初学者可以看一看。文章主要分为以下几个部分:1.获取证券数据2.编写交易逻辑3.模拟交易操作4.统计结果和绘图1.获取证券数据创建...
  • 我们今天来介绍几个经典的策略模型,在数字货币市场中的表现, 基本参数: (1)回测区间:2016-01-01至2016-12-31 (2)行情订阅:bitcoin(频率:日) (3)初始资金:1000000 数据来源:matrixdata.io ...
  • 策略回测 实盘交易 历史数据均免费来自于网络 Wind免费个人接口 TuShare 实盘微信提醒及交互 一键挂机 全自动交易 模拟交易,支持9个模拟账号 实盘和回测共用同一策略代码 实盘策略编写模板 选股策略编写模板 自动...
  • 均线交易策略回测 rR Programming language is an open-source software developed by statisticians and it is widely used among Data Miners for developing Data Analysis. R can be best programmed and ...
  • 交易自动回测工具Backtrader简介

    千次阅读 2019-09-19 22:22:04
    因为最近自己在研究怎么样做期货和股票的交易,其中涉及到对交易系统的测试。可以直接做手工测试,但是为了提高效率还是想要研究一下怎么做到自动来做历史数据的回测。通过网上搜索找到了Backtrader 这个工具。下面...
  • 使用了新浪接口,对获取的历史数据XML进行解析。...根据快线上传慢线买入,快线下穿慢线卖出的原则制作的策略。 参数可以自己手动输入,包括,快线天数、慢线天数、数据区间、股票代码 盈亏自负哈~
  • 点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤桃李春风一杯酒,江湖夜雨十年灯。一、简介大家好,我是Snowball。今天...
  • 量化回测思路与图解

    2018-09-10 00:14:38
    什么是量化回测,简单定义: 用量化策略对过去指定时间段进行模拟交易,从而得到收益以及净值变化情况等统计数据。...量化回测起到为量化策略进入实盘交易提供一定的依据的作用, 只是判断量化策略好坏的第一个门槛。
  • 本系列文章将会介绍如何使用DolphinDB优雅而高效的实现量化交易策略回测。本文将介绍在华尔街广泛应用的多因子Alpha策略的回测。多因子模型是量化交易选股中最重要的一类模型,基本思路是找到某些和回报率最相关的...
  • ./backtest包含一些策略回测示例。 ./notebook存放策略研究相关文件,如.ipynb文件 ./web量化交易接口API(纯websocket版),利用此接口可以支持C / C ++,Go,Java,Javascript等语言进行策略开发 快速体验 框架...
  • backtrader程序介绍-策略回测用法

    千次阅读 2022-01-21 21:02:14
    backtrader的策略回测初尝 前言 backtrader作为能够在自己的python环境运行的回测程序之一,不得不说很好用。今天进行了初步的学习,稍微进行分享。 一、回测基础步骤 应用backtrader进行回测,首先需要了解...
  • 回测时ag净值曲线无最大回撤值,也就是说明ag在双均线策略上无回撤,理论上这是不可能的; 所以, 一层层剥开代码来排查后发现问题在vnpy自带的双均线策略的更新bar上除了问题; 慢均线的指标值一直都是nan, 也就是说...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,697
精华内容 2,278
关键字:

交易策略回测