Example #1
0
        self.detailDf = single_trade_details(self.df,
                                             poChgCol=poChgCol,
                                             originSignal=originSignal,
                                             at_once=at_once,
                                             mode=mode)
        self.evalSer = overall_eval(self.df, self.detailDf)
        self.yearDf = year_month_analysis(self.detailDf)
        self.plot_equity_curve(period=period, contrast=contrast, labels=labels)


#################### Single_Proportion用于日线策略的回测例子 #############################################################
# 这个是single_proportion_backtest的使用例子,以及在图上显示回测结果,参数是at_once=True,mode='longshort'
if __name__ == '__main__':
    import talib as ta
    from tools.data import fetch
    df = fetch.index_one('000001.SH', endTime='2010-12-31')  # 短一点,避免卡
    # 计算DEA指标
    df['DIFF'], df['DEA'], df['MACD'] = ta.MACD(df['CLOSE'])
    df.dropna(axis=0, inplace=True)
    df['MACD'] = df['MACD'] * 2

    from tools.backtest import signal
    # 生成原始信号和买卖标记
    signal.up_cross(df, fastline='DIFF', slowline='DEA')  # 多了一列signal
    signal.signal2position_single(df,
                                  signalCol='signal',
                                  at_once=True,
                                  mode='longshort')  # 仓位:即期,多空,止损,保证金

    # 单个品种的回测
    btest = Single_Proportion(df,
Example #2
0
# 第一个划分牛熊的想法
if __name__ == '__main__':
    from tools.data import fetch
    import datetime as dt
    import pandas as pd
    from tools.tinytools import pandas_related, group_method

    df = fetch.index_one('000001.SH', startTime='2000-01-01')

    df['6_month_peak'] = df['HIGH'].rolling(130).max()
    df['1_month_peak'] = df['HIGH'].rolling(22).max()

    df['3_month_bottom'] = df['LOW'].rolling(65).min()
    df['12_month_bottom'] = df['LOW'].rolling(250).min()
    df['24_month_bottom'] = df['LOW'].rolling(510).min()
    df['3_month_std'] = df['CLOSE'].rolling(65).std()

    df['bb_tag'] = None

    pandas_related.cal_intraperiod_return(df)

    # 分牛熊
    for index in df.index[1:]:
        preIndex = pandas_related.previous_index(df, index)
        # if index[0] == dt.datetime(2009, 4, 24):
        #     pass
        if df.at[index, 'monthly_return'] > 0.1 \
                and df.at[index, 'CLOSE'] / df.at[index, '3_month_bottom'] > 1.4 \
                and df.at[preIndex, 'bb_tag'] is None:
            df.at[index, 'bb_tag'] = '牛市'
            _base = df.at[index, '3_month_bottom']
Example #3
0
if __name__ == '__main__':
    import pandas as pd
    from tools.data import fetch
    from tools.backtest import timing, signal

    dfzz500 = fetch.index_one('000905.SH',startTime='2007-01-15')
    dfsz50 = fetch.index_one('000016.SH',startTime='2007-01-15')

    df = pd.DataFrame()
    df['target'] = dfsz50.reset_index(level=1)['PCTCHANGE'] - dfzz500.reset_index(level=1)['PCTCHANGE']
    df['sz50'] = dfsz50.reset_index(level=1)['CLOSE']
    df['zz500'] = dfzz500.reset_index(level=1)['CLOSE']
    df['return_sz50'] = dfsz50.reset_index(level=1)['PCTCHANGE'] / 100
    df['return_zz500'] = dfzz500.reset_index(level=1)['PCTCHANGE'] / 100


    signal.up_cross(df, 'target')
    signal.signal2position_multi(df, signalCol='signal',
                                 mode='longshort', )

    timing.multi_proportion_backtest(df,['sz50','zz500'],[1,-1],[0.5,0.5],tCost=0.0002,)
    detailDf = timing.multi_trade_details(df,originSignal='signal',pxColList=['sz50','zz500'],longshortList=[1,-1],proportionList=[0.5,0.5])
    evalSer = timing.overall_eval(df,detailDf)
    yearDf = timing.year_month_analysis(detailDf)


Example #4
0
                        f"self.window.{minIndex}.patches.remove(self.allDf.at['{minIndex}', 'musk'])"
                    )
                    self.allDf.at[minIndex, 'musk'] = None

        self.window.fig.canvas.draw_idle()


if __name__ == '__main__':
    # intradayWindow = Intraday_General()
    dfDay = fetch.stock_one('601318',
                            startTime='2014-04-28',
                            endTime='2018-08-10')
    df1min = fetch.n_min('601318', 1)
    intraday = Intraday_General(dfDay=dfDay, df1min=df1min)

    dftechMin = fetch.n_min('000001.SH',
                            startTime='2014-04-28',
                            endTime='2018-08-10')
    dftechDay = fetch.index_one('000001.SH',
                                startTime='2014-04-28',
                                endTime='2018-08-10')
    intraday.attach_min_data(dfminTech=dftechMin,
                             axName='tech1',
                             className='Intraday_Close',
                             precloseSrcDf=dftechDay)
    intraday.attach_day_data(dfdayTech=dftechDay,
                             axName='tech2',
                             className='Candle')

    intraday.musk(if_day=False, if_min=False)
Example #5
0
            df['poChg'] = df['poChg_real']

            if df.at[df.loc[df['poChg'] != 0.0].index[0], 'poChg'] \
                    * df.at[df.loc[df['poChg'] != 0.0].index[-1], 'poChg'] < 0:
                pass
            else:
                df.at[df.loc[df['poChg'] != 0.0].index[-1], 'poChg'] = 0
            df.drop('poChg_real', axis=1, inplace=True)


#################### 产生信号函数的使用范例 ##############################################################################
if __name__ == '__main__':
    # 这个是up_cross的使用例子
    import talib as ta
    from tools.data import fetch
    df = fetch.index_one('000001.SH', endTime='2010-12-31') # 短一点,避免卡
    # 计算DEA指标
    df['DIFF'], df['DEA'], df['MACD'] = ta.MACD(df['CLOSE'])
    df.dropna(axis=0, inplace=True)
    df['MACD'] = df['MACD'] * 2
    # 生成买卖标记
    up_cross(df, fastline='DIFF', slowline='DEA') # 多了一列signal

    del df


if __name__ == '__main__':
    # 这个是long_short_signal的使用例子
    import talib as ta
    from tools.data import fetch
    df = fetch.index_one('000001.SH', endTime='2010-12-31') # 短一点,避免卡
Example #6
0
    groupCopy.dropna(inplace=True)
    return groupCopy


def groupFunc_find_updown_ratio(group):
    return pd.DataFrame([
        len(group.loc[group['确认点'] == 1].index),
        len(group.loc[group['确认点'] == -1].index)
    ],
                        index=['up', 'down']).T


# 下面是日线级别的行业趋势度的计算
if __name__ == '__main__':
    from tools.data import fetch
    dfAllA = fetch.index_one('881001.WI')
    # 取中信二级行业来代替原报告中申万二级行业
    dfCiticslvl2 = fetch.index_industry_list('all', citicslevel=2)
    dfCiticslvl2.dropna(inplace=True)
    dfCiticslvl2.drop(['S_INFO_NAME', 'S_INFO_INDUSTRYCODE', 'level'],
                      axis=1,
                      inplace=True)

    # 对中信2级行业中每个行业计算DEA分段新逻辑的买卖确认点
    dfCiticslvl2 = dfCiticslvl2.groupby(
        level=1).apply(groupfunc_find_subindustry_buysell)
    dfCiticslvl2.reset_index(level=0, inplace=True, drop=True)
    dfCiticslvl2.sort_index(level=[0, 1], inplace=True)

    # 由于数据原因,前面的日期处于状态内的行业数只有少数几个,后面有些行业处于状态数也比较小,一个简单的标准是取大于40的日期。
    _groupCountTemp = dfCiticslvl2.groupby(level=0)['CLOSE'].count()