예제 #1
0
def sample_b3_4():
    """
    【示例4】abu量化系统选股结合相关性,编写相关性选股策略
    AbuPickSimilarNTop源代码请自行阅读,只简单示例使用。
    :return:
    """
    from abupy import AbuPickSimilarNTop
    from abupy import AbuPickStockWorker
    from abupy import AbuBenchmark, AbuCapital, AbuKLManager

    benchmark = AbuBenchmark()

    # 选股因子AbuPickSimilarNTop, 寻找与usTSLA相关性不低于0.95的股票
    # 这里内部使用以整个市场作为观察者方式计算,即取值范围0-1
    stock_pickers = [{
        'class': AbuPickSimilarNTop,
        'similar_stock': 'usTSLA',
        'threshold_similar_min': 0.95
    }]

    # 从这几个股票里进行选股,只是为了演示方便,一般的选股都会是数量比较多的情况比如全市场股票
    choice_symbols = [
        'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
        'usVIPS'
    ]

    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)
    stock_pick = AbuPickStockWorker(capital,
                                    benchmark,
                                    kl_pd_manager,
                                    choice_symbols=choice_symbols,
                                    stock_pickers=stock_pickers)
    stock_pick.fit()
    print('stock_pick.choice_symbols:\n', stock_pick.choice_symbols)
    """
        通过选股因子first_choice属性执行批量优先选股操作,具体阅读源代码
    """
    # 选股因子AbuPickSimilarNTop, 寻找与usTSLA相关性不低于0.95的股票
    # 通过设置'first_choice':True,进行优先批量操作,默认从对应市场选股
    stock_pickers = [{
        'class': AbuPickSimilarNTop,
        'first_choice': True,
        'similar_stock': 'usTSLA',
        'threshold_similar_min': 0.95
    }]
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)
    stock_pick = AbuPickStockWorker(capital,
                                    benchmark,
                                    kl_pd_manager,
                                    choice_symbols=None,
                                    stock_pickers=stock_pickers)
    stock_pick.fit()
    print('stock_pick.choice_symbols:\n', stock_pick.choice_symbols)
예제 #2
0
파일: p7.py 프로젝트: fuimaz/abu
def sample_821_2():
    """
    8.2.1_2 ABuPickStockExecute
    :return:
    """
    stock_pickers = [{
        'class': AbuPickRegressAngMinMax,
        'threshold_ang_min': 0.0,
        'threshold_ang_max': 10.0,
        'reversed': False
    }]

    choice_symbols = [
        '601398', '601988', '601939', '603993', '600999', '300059', '600900',
        '601328', '601288', '600887', '600029', '000002'
    ]
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)

    print(
        'ABuPickStockExecute.do_pick_stock_work:\n',
        ABuPickStockExecute.do_pick_stock_work(choice_symbols, benchmark,
                                               capital, stock_pickers))

    kl_pd_sfun = kl_pd_manager.get_pick_stock_kl_pd('601398')
    print('sfun 选股周期内角度={}'.format(
        round(ABuRegUtil.calc_regress_deg(kl_pd_sfun.close), 3)))
예제 #3
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_823():
    """
    8.2.3 使用并行来提升回测运行效率
    :return:
    """
    from abupy import EMarketSourceType
    abupy.env.g_market_source = EMarketSourceType.E_MARKET_SOURCE_tx
    abupy.env.disable_example_env_ipython()

    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)

    # 首先随抽取50支股票
    choice_symbols = ABuMarket.choice_symbols(50)
    # 股价在15-50之间
    stock_pickers = [{
        'class': AbuPickStockPriceMinMax,
        'threshold_price_min': 15.0,
        'threshold_price_max': 50.0,
        'reversed': False
    }]
    cs = AbuPickStockMaster.do_pick_stock_with_process(capital, benchmark,
                                                       stock_pickers,
                                                       choice_symbols)
    print('len(cs):', len(cs))
    print('cs:\n', cs)
예제 #4
0
    def __init__(self, read_cash, buy_factors, sell_factors):
        # self.read_cash = read_cash
        # self.read_cash = 200000
        # 买入因子使用60日向上和42日突破因子
        # self.buy_factors = [{'fast': 5, 'slow': 20, 'class': AbuDoubleMaBuy}, {'xd': 60, 'class': AbuFactorBuyBreak},
        #             {'xd': 42, 'class': AbuFactorBuyBreak,
        #              'position': {'class': AbuKellyPosition}, }]
        self.buy_factors = buy_factors

        # 趋势跟踪策略止盈要大于止损设置值,这里1.0,3.0
        # 卖出因子并行生效
        # self.sell_factors = [
        #     {'stop_loss_n': 1.0, 'stop_win_n': 3.0,
        #      'class': AbuFactorAtrNStop},
        #     {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5},
        #     {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
        # ]
        self.sell_factors = sell_factors

        # self.sell_factors = [{'fast': 5, 'slow': 20, 'class': AbuDoubleMaSell},
        #                 {'stop_loss_n': 1.0, 'stop_win_n': 3.0,
        #                  'class': AbuFactorAtrNStop},
        #                 {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5},
        #                 {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}]

        abupy.env.g_enable_ml_feature = True
        abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
        self.commission_dict = {
            'buy_commission_func': self.buy_commission_ch,
            'sell_commission_func': self.sell_commission_ch
        }
        self.benchmark = AbuBenchmark()
        self.capital = AbuCapital(self.read_cash, self.benchmark,
                                  self.commission_dict)
        self.kl_pd_manager = AbuKLManager(self.benchmark, self.capital)
예제 #5
0
def sample_821_1():
    """
    8.2.1_1 选股使用示例
    :return:
    """
    # 选股条件threshold_ang_min=0.0, 即要求股票走势为向上上升趋势
    stock_pickers = [{'class': AbuPickRegressAngMinMax,
                      'threshold_ang_min': 0.0, 'reversed': False}]

    # 从这几个股票里进行选股,只是为了演示方便
    # 一般的选股都会是数量比较多的情况比如全市场股票
    choice_symbols = ['usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG',
                      'usTSLA', 'usWUBA', 'usVIPS']
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)
    stock_pick = AbuPickStockWorker(capital, benchmark, kl_pd_manager,
                                    choice_symbols=choice_symbols,
                                    stock_pickers=stock_pickers)
    stock_pick.fit()
    # 打印最后的选股结果
    print('stock_pick.choice_symbols:', stock_pick.choice_symbols)

    # 从kl_pd_manager缓存中获取选股走势数据,注意get_pick_stock_kl_pd为选股数据,get_pick_time_kl_pd为择时
    kl_pd_noah = kl_pd_manager.get_pick_stock_kl_pd('usNOAH')
    # 绘制并计算角度
    deg = ABuRegUtil.calc_regress_deg(kl_pd_noah.close)
    print('noah 选股周期内角度={}'.format(round(deg, 3)))
예제 #6
0
def sample_815():
    """
    8.1.5 自定义仓位管理策略的实现
    :return:
    """
    metrics = sample_814(False)
    print('\nmetrics.gains_mean:{}, -metrics.losses_mean:{}'.format(metrics.gains_mean, -metrics.losses_mean))

    from abupy import AbuKellyPosition
    # 42d使用AbuKellyPosition,60d仍然使用默认仓位管理类
    buy_factors2 = [{'xd': 60, 'class': AbuFactorBuyBreak},
                    {'xd': 42, 'position': AbuKellyPosition, 'win_rate': metrics.win_rate,
                     'gains_mean': metrics.gains_mean, 'losses_mean': -metrics.losses_mean,
                     'class': AbuFactorBuyBreak}]

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {'stop_loss_n': 0.5, 'stop_win_n': 3.0, 'class': AbuFactorAtrNStop}
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    benchmark = AbuBenchmark()
    choice_symbols = ['usTSLA', 'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usWUBA', 'usVIPS']
    capital = AbuCapital(1000000, benchmark)
    orders_pd, action_pd, all_fit_symbols_cnt = ABuPickTimeExecute.do_symbols_with_same_factors(choice_symbols,
                                                                                                benchmark, buy_factors2,
                                                                                                sell_factors, capital,
                                                                                                show=False)
    print(orders_pd[:10].filter(['symbol', 'buy_cnt', 'buy_factor', 'buy_pos']))
예제 #7
0
def sample_816():
    """
    8.1.6 多支股票使用不同的因子进行择时
    :return:
    """
    # 选定noah和sfun
    target_symbols = ['usSFUN', 'usNOAH']
    # 针对sfun只使用42d向上突破作为买入因子
    buy_factors_sfun = [{'xd': 42, 'class': AbuFactorBuyBreak}]
    # 针对sfun只使用60d向下突破作为卖出因子
    sell_factors_sfun = [{'xd': 60, 'class': AbuFactorSellBreak}]

    # 针对noah只使用21d向上突破作为买入因子
    buy_factors_noah = [{'xd': 21, 'class': AbuFactorBuyBreak}]
    # 针对noah只使用42d向下突破作为卖出因子
    sell_factors_noah = [{'xd': 42, 'class': AbuFactorSellBreak}]

    factor_dict = dict()
    # 构建SFUN独立的buy_factors,sell_factors的dict
    factor_dict['usSFUN'] = {'buy_factors': buy_factors_sfun, 'sell_factors': sell_factors_sfun}
    # 构建NOAH独立的buy_factors,sell_factors的dict
    factor_dict['usNOAH'] = {'buy_factors': buy_factors_noah, 'sell_factors': sell_factors_noah}
    # 初始化资金
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    # 使用do_symbols_with_diff_factors执行
    orders_pd, action_pd, all_fit_symbols = ABuPickTimeExecute.do_symbols_with_diff_factors(
        target_symbols, benchmark, factor_dict, capital)
    print('pd.crosstab(orders_pd.buy_factor, orders_pd.symbol):\n', pd.crosstab(orders_pd.buy_factor, orders_pd.symbol))
예제 #8
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_812():
    """
    8.1.2 卖出因子的实现
    :return:
    """
    # 120天向下突破为卖出信号
    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    # 趋势跟踪策略止盈要大于止损设置值,这里0.5,3.0
    sell_factor2 = {
        'stop_loss_n': 0.5,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }
    # 暴跌止损卖出因子形成dict
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    # 保护止盈卖出因子组成dict
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    # 四个卖出因子同时生效,组成sell_factors
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    # buy_factors 60日向上突破,42日向上突破两个因子
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]
    benchmark = AbuBenchmark()

    capital = AbuCapital(1000000, benchmark)
    orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(
        ['usTSLA'], benchmark, buy_factors, sell_factors, capital, show=True)
예제 #9
0
def sample_814(show=True):
    """
    8.1.4 对多支股票进行择时
    :return:
    """

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {'stop_loss_n': 0.5, 'stop_win_n': 3.0, 'class': AbuFactorAtrNStop}
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    benchmark = AbuBenchmark()
    buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
                   {'xd': 42, 'class': AbuFactorBuyBreak}]

    choice_symbols = ['usTSLA', 'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usWUBA', 'usVIPS']
    capital = AbuCapital(1000000, benchmark)
    orders_pd, action_pd, all_fit_symbols_cnt = ABuPickTimeExecute.do_symbols_with_same_factors(choice_symbols,
                                                                                                benchmark, buy_factors,
                                                                                                sell_factors, capital,
                                                                                                show=False)

    metrics = AbuMetricsBase(orders_pd, action_pd, capital, benchmark)
    metrics.fit_metrics()
    if show:
        print('orders_pd[:10]:\n', orders_pd[:10].filter(
            ['symbol', 'buy_price', 'buy_cnt', 'buy_factor', 'buy_pos', 'sell_date', 'sell_type_extra', 'sell_type',
             'profit']))
        print('action_pd[:10]:\n', action_pd[:10])
        metrics.plot_returns_cmp(only_show_returns=True)
    return metrics
예제 #10
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_811():
    """
    8.1.1 买入因子的实现
    :return:
    """
    # buy_factors 60日向上突破,42日向上突破两个因子
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)
    # 获取TSLA的交易数据
    kl_pd = kl_pd_manager.get_pick_time_kl_pd('usTSLA')
    abu_worker = AbuPickTimeWorker(capital, kl_pd, benchmark, buy_factors,
                                   None)
    abu_worker.fit()

    orders_pd, action_pd, _ = ABuTradeProxy.trade_summary(abu_worker.orders,
                                                          kl_pd,
                                                          draw=True)

    ABuTradeExecute.apply_action_to_capital(capital, action_pd, kl_pd_manager)
    capital.capital_pd.capital_blance.plot()
    plt.show()
예제 #11
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_822():
    """
    8.2.2 多个选股因子并行执行
    :return:
    """
    # 选股list使用两个不同的选股因子组合,并行同时生效
    stock_pickers = [{
        'class': AbuPickRegressAngMinMax,
        'threshold_ang_min': 0.0,
        'reversed': False
    }, {
        'class': AbuPickStockPriceMinMax,
        'threshold_price_min': 50.0,
        'reversed': False
    }]

    choice_symbols = [
        'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
        'usVIPS'
    ]
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)

    print(
        'ABuPickStockExecute.do_pick_stock_work:\n',
        ABuPickStockExecute.do_pick_stock_work(choice_symbols, benchmark,
                                               capital, stock_pickers))
예제 #12
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_821_2():
    """
    8.2.1_2 ABuPickStockExecute
    :return:
    """
    stock_pickers = [{
        'class': AbuPickRegressAngMinMax,
        'threshold_ang_min': 0.0,
        'threshold_ang_max': 10.0,
        'reversed': False
    }]

    choice_symbols = [
        'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
        'usVIPS'
    ]
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)

    print(
        'ABuPickStockExecute.do_pick_stock_work:\n',
        ABuPickStockExecute.do_pick_stock_work(choice_symbols, benchmark,
                                               capital, stock_pickers))

    kl_pd_sfun = kl_pd_manager.get_pick_stock_kl_pd('usSFUN')
    print('sfun 选股周期内角度={}'.format(
        round(ABuRegUtil.calc_regress_deg(kl_pd_sfun.close), 3)))
예제 #13
0
def batchpick():
    start = '20190101'
    end = '2020-11-06'
    # 策略 选取符合基本财务业绩指标,且短期与相关系数为负的,思路,庄股,跟大盘反着来的。这种策略适合在大盘下跌时买入
    stock_pickers = [{
        'class': KPickStockValue,
        'first_choice': True,
        'start': start,
        'end': end.replace('-', ''),
        'roe_dt_2': 13,
        'grossprofit_margin': 20,
        'ocf_to_opincome': 0.7
    }, {
        'class': KPickStockStrongShake,
        'first_choice': True,
        'start': start,
        'end': end.replace('-', ''),
        'short_relation': -0.25,
        'short_range': 30,
        'long_range': 300,
        'short_scope': 1.15,
        'long_scope': 1.7,
        'short_range_deg': 5
    }]

    # 策略 选取符合基本财务业绩指标,最近1,2,3周成交量较大盘放大的,思路,选取资金涌入个股,改进(根据涌入个股分析所属板块,再延申选取相应板块优秀个股),自上而下的顺势根据当前资金涌入板块选择标的冲浪
    stock_pickers = [{
        'class': KPickStockValue,
        'first_choice': True,
        'start': start,
        'end': end.replace('-', ''),
        'roe_dt_2': 8,
        'grossprofit_margin': 18,
        'ocf_to_opincome': 0.5
    }, {
        'class': KPickStockVolume,
        'first_choice': True,
        'start': '20200801',
        'end': end.replace('-', '')
    }]

    fin_manager = KFinManager()
    choice_symbols = fin_manager.get_stock_basic().ts_code
    #choice_symbols = ['688179.SH']
    benchmark = AbuBenchmark(start='2018-01-01', end=end)
    capital = AbuCapital(1000000, benchmark)

    print(
        'ABuPickStockExecute.do_pick_stock_work:\n',
        ABuPickStockExecute.do_pick_stock_work(choice_symbols, benchmark,
                                               capital, stock_pickers))
예제 #14
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_817():
    """
    8.1.7 使用并行来提升择时运行效率
    :return:
    """
    # 要关闭沙盒数据环境,因为沙盒里就那几个股票的历史数据, 下面要随机做50个股票
    from abupy import EMarketSourceType
    abupy.env.g_market_source = EMarketSourceType.E_MARKET_SOURCE_tx

    abupy.env.disable_example_env_ipython()

    # 关闭沙盒后,首先基准要从非沙盒环境换取,否则数据对不齐,无法正常运行
    benchmark = AbuBenchmark()
    # 当传入choice_symbols为None时代表对整个市场的所有股票进行回测
    # noinspection PyUnusedLocal
    choice_symbols = None
    # 顺序获取市场后300支股票
    # noinspection PyUnusedLocal
    choice_symbols = ABuMarket.all_symbol()[-50:]
    # 随机获取300支股票
    choice_symbols = ABuMarket.choice_symbols(50)
    capital = AbuCapital(1000000, benchmark)

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {
        'stop_loss_n': 0.5,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]

    orders_pd, action_pd, _ = AbuPickTimeMaster.do_symbols_with_same_factors_process(
        choice_symbols, benchmark, buy_factors, sell_factors, capital)

    metrics = AbuMetricsBase(orders_pd, action_pd, capital, benchmark)
    metrics.fit_metrics()
    metrics.plot_returns_cmp(only_show_returns=True)

    abupy.env.enable_example_env_ipython()
예제 #15
0
def sample_821_3():
    """
    8.2.1_3 reversed
    :return:
    """
    # 和上面的代码唯一的区别就是reversed=True
    stock_pickers = [{'class': AbuPickRegressAngMinMax,
                      'threshold_ang_min': 0.0, 'threshold_ang_max': 10.0, 'reversed': True}]

    choice_symbols = ['usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG',
                      'usTSLA', 'usWUBA', 'usVIPS']
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)

    print('ABuPickStockExecute.do_pick_stock_work:\n',
          ABuPickStockExecute.do_pick_stock_work(choice_symbols, benchmark, capital, stock_pickers))
예제 #16
0
파일: c8.py 프로젝트: fuimaz/abu
def sample_813():
    """
    8.1.3 滑点买入卖出价格确定及策略实现
    :return:
    """
    from abupy import AbuSlippageBuyBase

    # 修改g_open_down_rate的值为0.02
    g_open_down_rate = 0.02

    # noinspection PyClassHasNoInit
    class AbuSlippageBuyMean2(AbuSlippageBuyBase):
        def fit_price(self):
            if (self.kl_pd_buy.open /
                    self.kl_pd_buy.pre_close) < (1 - g_open_down_rate):
                # 开盘下跌K_OPEN_DOWN_RATE以上,单子失效
                print(self.factor_name + 'open down threshold')
                return np.inf
            # 买入价格为当天均价
            self.buy_price = np.mean(
                [self.kl_pd_buy['high'], self.kl_pd_buy['low']])
            return self.buy_price

    # 只针对60使用AbuSlippageBuyMean2
    buy_factors2 = [{
        'slippage': AbuSlippageBuyMean2,
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {
        'stop_loss_n': 0.5,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    benchmark = AbuBenchmark()
    capital = AbuCapital(1000000, benchmark)
    orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(
        ['usTSLA'], benchmark, buy_factors2, sell_factors, capital, show=True)
예제 #17
0
   sell_factors = [{
       'xd': 120,
       'class': AbuFactorSellBreak
   }, {
       'stop_loss_n': 0.5,
       'stop_win_n': 3.0,
       'class': AbuFactorAtrNStop
   }, {
       'pre_atr_n': 1.0,
       'class': AbuFactorPreAtrNStop
   }, {
       'close_atr_n': 1.5,
       'class': AbuFactorCloseAtrNStop
   }]
   benchmark = AbuBenchmark()
   capital = AbuCapital(1000000, benchmark)
   # assign money
   '''
 # 1) tedious way
 from abupy import AbuPickTimeWorker;
 from abupy import AbuKLManager;
 kl_pd_manager = AbuKLManager(benchmark, capital);
 kl_pd = kl_pd_manager.get_pick_time_kl_pd('usTSLA'); # load k line of Tesla
 # simulate with buy factor and sell factor
 abu_worker = AbuPickTimeWorker(capital, kl_pd, benchmark, buy_factors = buy_factors, sell_factors = sell_factors);
 abu_worker.fit();
 # visualize orders
 from abupy import ABuTradeProxy;
 orders_pd, action_pd, _ = ABuTradeProxy.trade_summary(abu_worker.orders, kl_pd, draw = True, show_info = False);
 # visualize capitalism
 from abupy import ABuTradeExecute;
예제 #18
0
    def __init__(self, symbol, period, money):

        self.symbol = symbol
        self.buy_factors = [{'xd': period, 'class': AbuFactorBuyBreak}]
        self.benchmark = AbuBenchmark()
        self.capital = AbuCapital(money, self.benchmark)
예제 #19
0
파일: p7.py 프로젝트: fuimaz/abu
def sample_821_3():
    """
    8.2.1_2 ABuPickStockExecute
    :return:
    """
    stock_pickers = [{
        'class': abupy.FuWeekVolumeBoll,
        'threshold_ang_min': 0.0,
        'threshold_ang_max': 10.0,
        'reversed': False
    }]

    choice_symbols = [
        '601398', '601988', '601939', '603993', '600999', '300059', '600900',
        '601328', '601288', '600887', '600029', '000002'
    ]
    choice_symbols = [
        'sz000983', 'sh600338', 'sh600511', 'sh600196', 'sh600423', 'sz399136',
        'sz002044', 'sh601800', 'sz300132', 'sz300133', 'sh000821', 'sz300003',
        'sz300009', 'sz200045', 'sh600998', 'sz300313', 'sh601607', 'sz002644',
        'sh600697', 'sz000627', 'sh000003', 'sz399302', 'sh600984', 'sz399301',
        'sz000916', 'sz000911', 'sz000912', 'sz000688', 'sh600079', 'sh601101',
        'sz000861', 'sz000736', 'sz002053', 'sz000048', 'sh600703', 'sh000814',
        'sz300015', 'sh000818', 'sz399352', 'sz399356', 'sh900911', 'sh600395',
        'sh000075', 'sz002323', 'sh000101', 'sh600285', 'sh600882', 'sz000789',
        'sh601398', 'sz000898', 'sh601390', 'sh601009', 'sh601001', 'sz000525',
        'sh600713', 'sh601628', 'sz399299', 'sz399298', 'sh600800', 'sh000808',
        'sh900909', 'sh900908', 'sh000061', 'sh000068', 'sh000116', 'sz000617',
        'sh600535', 'sz000792', 'sz000889', 'sz000065', 'sh601015', 'sz000089',
        'sh600871', 'sz002412', 'sz399400', 'sz399402', 'sz399404', 'sh000057',
        'sh900930', 'sh900936', 'sh900934', 'sh900935', 'sh600267', 'sz000650',
        'sz399978', 'sh600485', 'sh601021', 'sh601601', 'sh600208', 'sh601288',
        'sh600062', 'sh600015', 'sh600016', 'sz300197', 'sz300199', 'sz399413',
        'sz399411', 'sz399416', 'sh000134', 'sh000136', 'sh000139', 'sz002007',
        'sh600258', 'sh600123', 'sz000511', 'sh601618', 'sh600745', 'sz399170',
        'sh000923', 'sz399319', 'sz399554', 'sz399555', 'sz002530', 'sh000145',
        'sz002070', 'sh000149', 'sz399220', 'sh601998', 'sh600111', 'sh600023',
        'sz000560', 'sh601699', 'sz399305', 'sz399431', 'sz000766', 'sz399436',
        'sz399230', 'sz399237', 'sz002661', 'sz002599', 'sh000155', 'sh000152',
        'sh000151', 'sh600806', 'sh601988', 'sh600693', 'sh600699', 'sh600582',
        'sz000995', 'sh600566', 'sh601318', 'sz399150', 'sz399441', 'sz399200',
        'sh000841', 'sh600917', 'sz002128', 'sh600176', 'sz000968', 'sh600771',
        'sh600579', 'sh600578', 'sh600572', 'sh600681', 'sh600680', 'sz399140',
        'sz000540', 'sz000545', 'sz200022', 'sz200026', 'sz200025', 'sz399210',
        'sz200029', 'sz002601', 'sz002656', 'sz002204', 'sz002737', 'sz000748',
        'sh600965', 'sz002135', 'sh000934', 'sh601169', 'sh601899', 'sh601898',
        'sh600549', 'sh600546', 'sh600545', 'sz000778', 'sh600141', 'sh600145',
        'sh601231', 'sz399139', 'sz000630', 'sz000613', 'sz399137', 'sz399130',
        'sz399131', 'sz399132', 'sz399133', 'sz200019', 'sz300146', 'sz300144',
        'sz399661', 'sz002701', 'sh600971', 'sz002382', 'sz002385', 'sh600085',
        'sh603158', 'sz002602', 'sh601939', 'sh600007', 'sz399645', 'sh600000',
        'sh601339', 'sh601336', 'sh000125', 'sz399674', 'sh000974', 'sz399160',
        'sz002653', 'sz002717', 'sz200726', 'sz399647', 'sz300294', 'sh000100',
        'sz300347', 'sh600348', 'sh000933', 'sh600401', 'sh000109', 'sz000034',
        'sh600623', 'sz000581', 'sz000672', 'sz300028', 'sh603368', 'sh000023',
        'sh000021', 'sz002198', 'sh600432', 'sh603989', 'sz000937', 'sh600508',
        'sh600500', 'sh000159', 'sz000732', 'sh600188', 'sz000598', 'sz000029',
        'sz000028', 'sz399394', 'sh000832', 'sz300036', 'sz200053', 'sz300326',
        'sz002742', 'sz300253', 'sh000013', 'sh000011'
    ]
    # choice_symbols = ['002656', '000903']
    benchmark = AbuBenchmark(n_folds=15)
    capital = AbuCapital(1000000, benchmark)
    kl_pd_manager = AbuKLManager(benchmark, capital)

    stock_pickers = ABuPickStockExecute.do_pick_stock_work(
        None,
        benchmark,
        # stock_pickers = ABuPickStockExecute.do_pick_stock_work(choice_symbols, benchmark,
        capital,
        stock_pickers)
    print('ABuPickvStockExecute.do_pick_stock_work:\n', stock_pickers)
    for stock_symbol in stock_pickers:
        if ~fetch_stock_base_info(stock_symbol):
            continue
        draw_candle(stock_symbol, 15)
예제 #20
0
파일: ln1.py 프로젝트: momantang/cobrass
    }
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_art_n': 1.0}

    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    # buy_factors 60日向上突破,42日向上突破两个因子
    buy_factors = [{
        'slippage': AbuSlippageBuyMean2,
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]
    # 只使用120天向下突破为卖出因子
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    benchmark = AbuBenchmark()

    # 构造一个字典key='buy_commission_func', value=自定义的手续费方法函数
    commission_dict = {'buy_commission_func': calc_commission_us}
    # 将commission_dict做为参数传入AbuCapital
    capital = AbuCapital(1000000,
                         benchmark,
                         user_commission_dict=commission_dict)
    print(benchmark.__str__())

    orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(
        ['usTSLA'], benchmark, buy_factors, sell_factors, capital, show=False)
    print(orders_pd)
    print(action_pd)
    print(capital.commission.commission_df)