相似K线技术实践

        今天盯盘的时候偶然间发现一款meme币竟然有高达88%的涨幅,所以决定应用相似K线技术对其做空。

        因为考虑到(1)购买合约每4小时就需要缴纳资金费(2)这种meme币段时间的波动就较大。所以我接入API获取所有种类5min级别的数据 (High、Low、Open、Close、Volume)。

绘制当下时间以及过去1500(300*5)分钟的 K线图:

end = '2025-02-08 23:40:00'
end = datetime.datetime.strptime(end, "%Y-%m-%d %H:%M:%S") 

start = get_previous_trading_hour(end,300)
stock_a = merged_df.loc['GODS-USDT'].loc[start:end]
mpf.plot(stock_a, type='candle', volume=True,style='yahoo')

注:这里的时间为UTC时间 

 要找到与目标相似形态的K线,除了上文获取到的5个量价指标外,还可以构建别的特征:

def get_dev_feature(df):

    df_tmp = df.copy()
    # 价格变化率
    df_tmp['pct'] = df_tmp['close'].pct_change()                                                  
    # 振幅
    df_tmp['hl'] = df_tmp['high']/df_tmp['low'] - 1
    # 上影线                                       
    df_tmp['hc'] = (df_tmp['high']/df_tmp[['close','open']].max(axis = 1)) - 1  
    # 下影线     
    df_tmp['lc'] = (df_tmp['low']/df_tmp[['close','open']].min(axis = 1)) - 1             

    return df_tmp

之后再查找过去历史中,与这段时间内该币相似度较高的时间段和币种:

def get_match_hist_kline(price,stock,end):
    dt = pd.DataFrame(columns=['stock','startdate','enddate','T'])
    start = get_previous_trading_min(end,39)
    stock_a = get_dev_feature(price.loc[stock].loc[start:end])
    stock_a = stock_a.reset_index().drop(['timestamp'],axis = 1)

    stocklist = sorted(set(price.index.get_level_values(0)))
    datelist = sorted(set(price.index.get_level_values(1)))
    datelist = datelist[:datelist.index(get_previous_trading_min(end,5))]

    y = 0
    for stock in tqdm(stocklist):
        stock_b = price.loc[stock]
        for d in datelist[8:-8:3]:
            s = get_previous_trading_min(d,39)
            stock_b_tmp = get_dev_feature(stock_b.loc[s:d])
            if len(stock_b_tmp) == 8:
                stock_b_tmp = stock_b_tmp.reset_index().drop(['timestamp'],axis = 1)
                T = stock_b_tmp.corrwith(stock_a).fillna(0).mean()
                dt.loc[y] = [stock,s,d,T]
                y += 1

    dt = dt.sort_values(by='T',ascending=False).dropna()
    
    return dt

将数据带入后得到相似度排序,取相似度最高的来进行比较分析:

注:GODS-USDT为我们要预测的种类

只选一种比较得出的结论较为片面,我们进一步绘制了上涨中继买入后25分钟的收益率随相似度衰减图:

fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 1, 0.618])
x1_list = list(highdt['ret_5'])
y=np.array(x1_list)
x=np.array(range(0,len(x1_list)))
axes.plot(x, y, 'r')
axes.set_xlabel('相似度递减',fontsize=10)
axes.set_ylabel('收益率',fontsize=10)
axes.set_title('上涨中继买入后25分钟收益率',fontsize=10)

        由这张图可以看出数据呈现出偏态,但大部分都是涨幅小于0,即意味着在25min内就会下跌,所以果断小额买入进行实践,最终在15内获得了5%的收益。

改进与反思:

1、从发现机会到跑代码之间消耗了一定时间,导致没有找到最优买入点

2、K线相似技术只能大致预判未来的涨跌,但是无法预测具体涨跌的幅度,导致在我平仓后的半小后又出现一波更大的跌幅

3、接入API获取的数据具有局限性,不论是1min/5min/1day都只能获取前300个单位的,这导致能学习的样本较少,相似度不够高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值