Beispiel #1
0
def main(ifcode, period_short, period_long):
    rs = []
    total = 0
    pos_num = 0
    nag_num = 0
    date_list = ifcode_day_map(ifcode)
    for day in date_list:
        df = get_data(ifcode, day)
        #df = point_prosess_v2(_df, 30)
        df['ema_short'] = Indicator.ewma_metric(period_short, df[['price']],
                                                'price')
        df['ema_long'] = Indicator.ewma_metric(period_long, df[['price']],
                                               'price')

        sig_infos = SellSignal.compare_ema(df, period_short, offset=5)
        profit_infos = SellSignal.profit_infos(sig_infos)
        profit_all = 0
        trans_num = (len(profit_infos) + 1) / 2
        for item in profit_infos:
            if item['gain'] != '-':
                profit_all += int(item['gain'])
        rs.append({day: profit_all, 'trans_num': trans_num})
        total += profit_all
        if profit_all >= 0:
            pos_num += 1
        elif profit_all < 0:
            nag_num += 1

    pprint(rs)
    print '%s total: %s' % (ifcode, total)
    print '%s profit rate: %.2f' % (ifcode, pos_num * 1.0 / nag_num)
def save_df(df_list, ifcode, today, period_short, period_long):
    df = pd.DataFrame(df_list, columns=['time_index', 'price', 'volume'])
    price = list(df['price'])
    df['ema_short'] = Indicator.ema_metric(period_short, price)
    df['ema_long'] = Indicator.ema_metric(period_long, price)

    #macd
    macd_df = point_prosess_v3(df, 8)
    macd_df['ma_short'] = Indicator.ewma_metric(12, macd_df[['price']], 'price', False)
    macd_df['ma_long'] = Indicator.ewma_metric(26, macd_df[['price']], 'price', False)
    macd_df['macd_dif'] = macd_df['ma_short'] - macd_df['ma_long']
    macd_dif = list(macd_df['macd_dif'])
    macd_df['macd_dem'] = Indicator.ewma_metric(9, macd_df[['macd_dif']], 'macd_dif')

    _macd_file = '%s/%s_%s_macd' % (validate_df_dir, ifcode, today)
    macd_df.to_csv(_macd_file, index=False)

    sig_infos = PushSellSignal.compare_sig(macd_df, 'macd_dif', 'macd_dem', 16)
    profit_infos = PushSellSignal.profit_infos(sig_infos)
    print '*******macd******'
    print profit_infos
    print len(profit_infos)

    _file = '%s/%s_%s' % (validate_df_dir, ifcode, today)
    df.to_csv(_file, index=False)

    sig_infos = PushSellSignal.compare_sig(df, 'ema_short', 'ema_long')
    profit_infos = PushSellSignal.profit_infos(sig_infos)
    print '*******ema*******'
    print profit_infos
    print len(profit_infos)
Beispiel #3
0
def macd_df(_df, period_short, period_long, period_dif=9):
    df = point_prosess_v2(_df, 59)
    df['ma_short'] = Indicator.ewma_metric(period_short, df[['price']],
                                           'price')
    df['ma_long'] = Indicator.ewma_metric(period_long, df[['price']], 'price')
    df['macd_dif'] = df['ma_short'] - df['ma_long']
    df['macd_dem'] = Indicator.ewma_metric(period_dif, df[['macd_dif']],
                                           'macd_dif')

    return df
Beispiel #4
0
 def macd_df(cls, date, ifcode, period_short, period_long, period_dif,
             pre_point, pre_time):
     data = BacktestData.get_macd_data_by_ifcode(date, ifcode, pre_time)
     if not data:
         return pd.DataFrame()
     _df = pd.DataFrame(data, columns=['time_index', 'price', 'volume'])
     df = point_prosess_v3(_df, pre_point)
     #df = point_prosess_v2(_df, pre_point)
     df['ma_short'] = Indicator.ewma_metric(period_short, df[['price']],
                                            'price', False)
     df['ma_long'] = Indicator.ewma_metric(period_long, df[['price']],
                                           'price', False)
     df['macd_dif'] = df['ma_short'] - df['ma_long']
     df['macd_dem'] = Indicator.ewma_metric(period_dif, df[['macd_dif']],
                                            'macd_dif', True)
     return df
Beispiel #5
0
def push_signal(df_list,
                code,
                ifcode,
                today,
                period_short=12,
                period_long=26,
                period_dif=9):
    df = pd.DataFrame(df_list, columns=['time_index', 'price', 'volume'])
    #macd
    macd_df = point_prosess_v3(df, 8)
    macd_df['ma_short'] = Indicator.ewma_metric(period_short,
                                                macd_df[['price']], 'price',
                                                False)
    macd_df['ma_long'] = Indicator.ewma_metric(period_long, macd_df[['price']],
                                               'price', False)
    macd_df['macd_dif'] = macd_df['ma_short'] - macd_df['ma_long']
    macd_df['macd_dem'] = Indicator.ewma_metric(period_dif,
                                                macd_df[['macd_dif']],
                                                'macd_dif')

    sig_infos = PushSellSignal.compare_sig(macd_df, 'macd_dif', 'macd_dem', 14)
    profit_infos = PushSellSignal.profit_infos(sig_infos)

    trans_session = get_trans_session(ifcode, today)

    if is_push(profit_infos, ifcode, today):
        if len(profit_infos) == 1:
            print 'init message~!'
            time_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            info_dict = profit_infos[0]

            theevent = info_dict.get('event', '')
            is_success = 'failed'
            r = 'init info'
            #添加交易接口
            if theevent == '卖出信号':
                r = trans_short_start(trans_session, code, ifcode.upper())
                if 'error_info' not in r:
                    is_success = '交易成功'
            elif theevent == '买入信号':
                r = trans_long_start(trans_session, code, ifcode.upper())
                if 'error_info' not in r:
                    is_success = '交易成功'

            tip = 'macd 策略: \n%s, 交易价格: %s; 时间: %s; %s' % (info_dict.get(
                'event', ''), info_dict.get('price', 0), time_str, is_success)
            push_sig(tip, r)
        elif len(profit_infos) >= 2:
            print 'push message~!'
            time_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            info_dict_1 = profit_infos[-2]
            info_dict_2 = profit_infos[-1]
            _p = info_dict_2.get('price', 0)
            trading_fee = cal_fee(_p)
            _g = info_dict_1.get('gain', 0)
            gain = _g - trading_fee

            theevent = info_dict_2.get('event', '')
            is_success = 'failed'
            r = 'init info'
            #添加交易接口
            if theevent == '卖出信号':
                r1 = trans_short_close(trans_session, code, ifcode.upper())
                r2 = trans_short_start(trans_session, code, ifcode.upper())
                r = r1 + r2
                if ('error_info' not in r1 and 'error_info' not in r2) or (
                        'error_no":"30' in r1 and 'error_info' not in r2):
                    is_success = '交易成功'
            elif theevent == '买入信号':
                r1 = trans_long_close(trans_session, code, ifcode.upper())
                r2 = trans_long_start(trans_session, code, ifcode.upper())
                r = r1 + r2
                if ('error_info' not in r1 and 'error_info' not in r2) or (
                        'error_no":"30' in r1 and 'error_info' not in r2):
                    is_success = '交易成功'
            elif theevent == '收盘平仓':
                _event = profit_infos[-3]
                if _event.get('event', '') == '买入信号':
                    r = trans_short_close(trans_session, code, ifcode.upper())
                    if 'error_info' not in r:
                        is_success = '交易成功'
                elif _event.get('event', '') == '卖出信号':
                    r = trans_long_close(trans_session, code, ifcode.upper())
                    if 'error_info' not in r:
                        is_success = '交易成功'

            tip = 'macd 策略: \n%s, 盈利: %s, 实际盈利: %s, 交易费用: %s; \n%s, 交易价格: %s; 时间: %s; %s' % (
                info_dict_1.get('event', ''), _g, gain, trading_fee,
                info_dict_2.get('event', ''), _p, time_str, is_success)
            push_sig(tip, r)