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)
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
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
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)