PSY(心理线)因子升级与改造

Author: 作手君TradeMan, Created: 2023-11-04 11:12:42, Updated: 2023-11-06 19:39:11

img

Hello~Welcome come to my channel!

欢迎各位交易者来到我的频道,我是作手君,一名Quant Developer,全栈开发CTA & HFT & Arbitrage等交易策略。 感谢FMZ平台,我会在我的量化频道多多分享量化开发相关内容,同各位交易者共同维护量化社区的繁荣。

更多信息,移步我的频道哦~在这等你来撩【作手君量化小屋】

今天作手君量化小屋给大家带来的是PSY(心理线)因子升级与改造,如何从一个简单的因子视角,添加更多的市场信息,进行一步步的改造,最终变成更有解释性逻辑性的强力因子!!!当然,看完本篇后,你可以把改造后的PSY因子纳入自己的因子库,成为强有力的武器哦~

PART1 【初始PSY因子】

PSY因子(心理线)是一种技术分析指标,用来衡量市场参与者的情绪对价格走势的影响,是研究投资者对市场涨跌产生心理波动的情绪指标,是一种能量类和涨跌类指标。它对市场短期走势的研判具有一定的参考意义。

PSY因子最早由王亚伟博士在1991年提出,他认为市场的心理变化与价格走势密切相关,并将心理变化量化为PSY因子。作为分析市场的涨跌指标,PSY因子是在时间的角度上计算N根K线内的多空总力量,来描述市场目前处于强势或弱势,是否处于超买或超卖状态。它主要是通过计算N根K线内上涨K线的多少来衡量投资者的心理承受能力,为投资者进行买卖操作提供参考。

PSY因子是以一段时间收盘价涨跌天数的多少为依据,其计算方法很简单,计算公式如下:PSY=(N根K线内上涨天数/N)*100,其中,N周期代表选定的计算周期,可以是几天、几周或几个月等。上涨天数是指在N周期内出现上涨价格的交易日数。基于FMZ平台的初始PSY因子函数源码:

function calculatePSY(data, n) {
  let count = 0;
  for (let i = data.length - n; i < data.length; i++) {
    if (data[i] > data[i - 1]) {
      count++;
    }
  }
  return (count / n) * 100;
}

// 使用示例
let closePrices = [10, 12, 13, 11, 14, 15, 16, 17, 18, 20];
let nPeriod = 5;
let psyFactor = calculatePSY(closePrices, nPeriod);
Log(psyFactor);

PART2 【增强PSY因子(PSY+PRICE)】

PSY因子本质是一个动量因子,方法衡量过去一段时间内涨跌力量根数的比较,目的是寻找过去一段时间力量更大的一方。但是仔细观察可以发现,PSY因子仅考虑BAR线是上涨还是下跌,缺乏对BAR本身的描述无法对行情的强度进行判断,造成了以下这种情况。

img

如上图所示,大阳线的特殊性并没有在PSY指标里体现,仅是当作了一个上涨的线和前面的小阴线并无差别。这就是问题所在了,上涨和下跌次数并不能完整的描述出价格变化的幅度和方向。因此我们第一次改进的思路是对每一根BAR加权价格的变化Abs(C-C[1]),以反应涨跌力量的幅度。基于FMZ平台的初始PSY+PRICE因子函数源码:

img

PART3 【最终PSY因子(PSY+PRICE+VOL)】

经过上一步的改造,改造后的PSY因子更能反映出过去一段时间的强弱力量,但如果过去一段时间内上涨与下跌幅度基本一致的情况下就不能有很好的分辨了。这时我们继续加入交易量因子,在动量效应中,放量代表市场更加活跃,放量情况更能确认动量方向。如下图所示:

img

因此在最终的PSY因子中,我们继续加入成交量因子加权,VOLUME*Abs(C-C[1]),基于FMZ平台的初始PSY+PRICE因子函数源码:

img

PART4 【PSY因子交易信号构造】

基于上篇构造的最终PSY+PRICE+VOL因子,我们尝试提出如下几种动量信号的构建:

  • psy[0] > X (过去一段时间内,多方力量比值大于X值)
  • psy[0] < Y (过去一段时间内,多方力量比值小于Y值)
  • psy[0] > psy[1] or psy[0] > psyma (过去一段时间内,多方力量比值变大)
  • psy[0] < psy[1] or psy[0] < psyma(过去一段时间内,多方力量比值减少)

我们用信号设计一个简单的动量策略以检测因子

  • 做多:PSY[0] > 70; 平多:PSY[0] < 30;
  • 做空:PSY[0] < 30; 平空:PSY[0] > 70;

采用币安U本位合约,PSY因子参数设计为12,BTC-USDT、ETH-USDT合约回测,期限为2020-02-01至2021-12-31,滑点10,手续费万5,10倍杠杆,每次仓位剩余本金5%:

BTC-USDT:

img

ETH-USDT:

img

PART5 【总结】

本篇量化小屋对传统的psy因子做了升级和改造,最终得到的psy+price+vol因子可以在量价层面衡量过去一段周期中多空双方力量的强弱,使用固定数值比较或自身强弱比较可以构建相应的动量/反转信。本文最终建立了一个固定数值信号,进行了简单的策略回测,发现psy+price+vol因子可以在波动大的市场中捕捉动量运动,一定层面上获取了正期望收益。之后可以构造更多形式的信号,进行更多类别的因子检验,最终加入已有策略库。

欢迎再来作手君的量化小屋~

感谢FMZ这个平台,没有关起门来造轮子,为广大交易者提供如此好的交流圣地。交易之路很坎坷,交易者们有温暖,在FMZ平台不断学习各位前辈大佬们的分享才能不断成长。祝愿FMZ越来越好,祝愿各位交易者收益长存。


More