2934 1

[交易策略] KDJ指标在数字货币的量化交易中有效么? [推广有奖]

  • 0关注
  • 0粉丝

小学生

42%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
59 点
帖子
5
精华
0
在线时间
5 小时
注册时间
2018-8-30
最后登录
2018-9-4

楼主
等待戈多宽客 发表于 2018-8-31 15:39:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

前言:KDJ又称随机指标,属于短期波动性技术指标。D低于20时,属于超卖,D大于80时,属于超买。当K指标在超买区间上穿D指标时,意味着短期出现上涨的概率高,买入标的;当K指标在超卖区间下穿D指标时,意味着出现下跌的概率高,卖出标的。

KDJ指标怎么计算?

KDJ指标的计算比较复杂,首先需要计算周期的RSV值,然后计算K、D、J值等。以周期为n的KDJ指标计算为例:

其中,Closen表示第n日收盘价,min(Lown)表示n日内的最低价,max(Highn)表示n日内的最高价。

然后,计算K和D值,

当日K值=2/3*前一日K值+1/3*当日RSV

当日D值=2/3*前一日D值+1/3*当日K值

J值=3*当日K值-2*当日K值

我去~~~,是不是看着很复杂,告诉你一个计算KDJ方便的python库--talib。

下图时数字资产BINANCE.BTCUSDT KD图,没有画出J指标(因为一般之判断K和D即可),可以看出指标在0-100之间不断波动,不断的出现金叉和死叉。不要问在哪里找数字资产的行情数据,去币宽哦(币宽-数字货币量化)。

KDJ真的有效吗?

下面进行第一个KDJ策略(超买区K、D金叉买入,超买区K、D死叉时卖出)。回测交易币对BTC/USDT,回测平台是币宽,不了解怎么使用币宽的朋友可以访问“”进行学习。以下默认您已经初步学会如何使用币宽(www.nextfintech.io)平台了。

策略相关说明:

  • 回测时间:2018-01-01至2018-07-01
  • K线频率:60s
  • 初始资金:10000 USDT
  • 交易手续费率:0.2%
  • KDJ参数:9,3,3
  • 回测交易所和币对:BINANCE的BTC/USDT

策略代码如下:

  1. # -*- coding: utf-8 -*-
  2. from __future__ import print_function, absolute_import
  3. from nf.api import *
  4. import talib as ta
  5. import pandas as pd
  6. def init():
  7.     global exchange #交易所
  8.     global front #交易币对前项币
  9.     global base #交易币对后项币
  10.     global symbol #交易标的
  11.     global freq #频率
  12.     global count
  13.     global fastk
  14.     global slowk
  15.     global slowd
  16.     global trade
  17.     exchange='BINANCE'
  18.     front='btc'
  19.     base='usdt'
  20.     symbol=get_symbol(market=exchange,front=front,rear=base)
  21.     freq='60s'
  22.     fastk=9
  23.     slowk=3
  24.     slowd=3
  25.     count=fastk+slowd+2
  26.     trade=False
  27.     #订阅函数
  28.     print(symbol)
  29.     print('----------------------------------------------------------')
  30.     subscribe(symbols=symbol,frequency=freq,count=count,wait_group=True)

  31. def on_bar(bars):
  32.     global exchange #交易所
  33.     global front #交易币对前项币
  34.     global base #交易币对后项币
  35.     global symbol #交易标的
  36.     global freq #频率
  37.     global count
  38.     global fastk
  39.     global slowk
  40.     global slowd
  41.     global trade

  42.     records=context.data(symbol,freq,count)
  43.     k,d=ta.STOCH(records['high'],records['low'],records['close'],fastk_period=fastk,slowk_period=slowk,slowd_period=slowd)
  44.     if len(records)==count:
  45.         if trade==False and k.iloc[-2] <d.iloc[-2] and k.iloc[-1] >d.iloc[-1] and d.iloc[-2]<=20:
  46.             if get_positions(exchange,base)[0]['available'] > records['close'].iloc[-1]:
  47.                 vol_buy=get_positions(exchange,base)[0]['available']/records['close'].iloc[-1]*0.7
  48.                 print(bars[0]['eob'],'买入%.4f个'%vol_buy,front)
  49.                 order_buy=order_volume(symbol,vol_buy,side=1,order_type=2)
  50.                 trade=True

  51.         if trade==True and k.iloc[-1]>=80 and k.iloc[-2]>d.iloc[-2] and k.iloc[-1]<d.iloc[-1] :
  52.             if len(get_positions(exchange,front))!=0:
  53.                 print(bars[0]['eob'],'清仓',front)
  54.                 order_buy=order_volume(symbol,get_positions(exchange,front)[0]['available'],side=2,order_type=2)
  55.                 trade=False

  56. def on_execution_report(execrpt):
  57.     print('打印交易回执:',execrpt)

  58. def on_error(code,info):
  59.     print('错误代码:',code,'错误代码说明:',info)

  60. def on_backtest_finished(indicator):
  61.     print('回测结果显示:',indicator)

  62. if __name__ == '__main__':
  63.     run(strategy_id='f35bf0f6-a69e-11e8-8643-00ffa9185dbb',
  64.     filename='main.py',
  65.     mode=MODE_LIVE,
  66.     token='6778ebc60a3b004bcc7286a5566a28df')
复制代码

回测结果如下(所有结果按每日公允汇率币/USD结算):

累计收益率:-55.05%

年化收益率:-66.85%

基准收益率:-79.03%

最大回撤:49.90%

Alpha:-0.60

Beta:0.12

从回测结果可以看出,相对于基准BTC/USD来说,KDJ策略实现了超额收益,但是绝对收益不佳。这是因为价格短期波动太剧烈时,KD值容易出现高位或者低位钝化,也就是说快速上涨时,K值在超卖区出现钝化,但是上涨趋势并没有结束,这是会出现“卖的早”现象。价格下跌时,K值在超买区出现钝化,但是下跌趋势并没有结束,这是会出现“卖的早”现象。

思考优化:由于数字资产价格波动剧烈,能否通过频率较慢的价格进行KDJ策略?基于此,在3600s频率的行情中进行回测。回测结果如下(所有结果按每日公允汇率币/USD结算):

累计收益率:-29.63%

年化收益率:-44.80%

基准收益率:-79.03%

最大回撤:33.49%

Alpha:-0.31

Beta:0.20

从回测结果可以看出,策略的超额收益有了明显的提高,最大回撤也明显降低,虽然绝对收益有所回升,但是仍然取得了比较差的收益。

小结:KDJ策略容易收到短期价格剧烈波动的影响,同时存在“钝化”现象,因此单纯使用KDJ指标进行交易风险时很大的,需要结合其他方法减少误信号和钝化的影响。读者有兴趣可以自己回测以下其他的频率下KDJ策略结果。


声明:本文主要用于共同探讨和学习,请勿直接用于实盘交易。

后续将推出更多系列的量化策略,欢迎大家关注,共同交流。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:操作策略

沙发
戴维投顾 发表于 2018-9-3 10:49:23
KDJ做高频交易回测请不要用传统的J<20做开多依据。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-28 13:07