注:本内容为实盘模拟,切勿直接带入市场运行:)
新年新气象,开盘第一天九点,兴冲冲的颤颤巍巍的掏出捂在胸口的1W元,豪情投入至期货市场。作为一个精明的统计学人,深知一夜暴富绝无可能,我们赚点零花钱,每天需求购买一个开封菜全家桶就可以。脑门青筋暴露,跃跃欲试,静等开盘!
准时开盘,大盘全面飘红,任意挑选一个品种,热卷就是你了,迅速买入,不到15秒,净赚100元,卖出!再看看下一个品种,呦呵,玻璃品种(怨种!!!)涨势不错吗,1742买入,静等上涨。咦,怎么下降了,莫慌莫慌,战术下调,房地产市场静待全面复苏,我方玻璃必将全面突破天际!上午下降20点,不急;下午下降50点,不急;最终下降100点,慌了,血亏2000元匆忙卖出!身为一个资深的心理学人,其实有意识的在体验一个名词–“损失厌恶!”
爆亏后,仍不服气,你狂降我就反着来,继续买入多头,后面的故事答案写在标题的前半句。记得那几天,半夜做梦都是《波兰来客》–“那时我们有梦,关于暴富,关于自由,如今杯子碰到一起,都是梦(玻璃)破碎的声音!”
幸好我还有第三个身份–量化人(newbee:菜鸡)。决定研究这个品种,编写一个策略,为广大散户朋友“报仇雪恨!”
既然日内手动震荡玩不转,我们还是老老实实的跟踪大户走,进行趋势策略吧。打开优宽量化平台策略库,寻找一个策略下手,'MACD’老土,'RSI’晦涩,'大鲷鱼警报R3.0+柴金波动条件+TP RSI’策略,这看起来像是捕鱼的。
身为一个量化新手,还得靠的是原始方法,“瞪眼法!”。
从图中可以看出,基本以10天为一个波段进行上涨或者下跌的趋势,因此要在10天一个波动内判断进行“多仓”还是“空仓”,因此利用Pine语言,统计了10天内“涨(upcount)”还是“跌(downcount)”的次数。
int upcount = 0
int downcount = 0
for i = 2 to 10
if close[i] > close[i-1]
downcount += 1
else
upcount += 1
设想是这样的,如果10天内upcount的个数大于downcount一个固定的i_len1值(需要调参),我们就利用三元表达式设置一个多仓方向(uptradedir),进行开多仓;否则10天内upcount的个数小于downcount一个固定的i_len2值(需要调参),我们就进行开空仓(downtradedir)。调参就是为了提高预测结果,对于代码中的某些函数进行调整,通过优宽平台的控制台功能,可以很轻易实现。因为预测周期为10天,因此upcount和downcount两者的差必然在0和4之间,具体代码设置如下:
i_len1 = input.int(0, "Length 1", minval=0, maxval=4, step=1) //10天内两者之差必然在0和4之间
i_len2 = input.int(0, "Length 2", minval=0, maxval=4, step=1)
for i = 2 to 10
if close[i] > close[i-1]
downcount += 1
else
upcount += 1
uptradedir = (upcount - downcount >= i_len1) ? 1 : 0 //三元表达式如果大于i_len1,就设为1,否则设为0
downtradedir = (downcount - upcount >= i_len2) ? 1 : 0
然后根据开仓信号和空仓信号进行开平仓的操作,代码如下:
if uptradedir == 1 //多头信号,开多仓
strategy.entry("buy", strategy.long, qty=1)
if downtradedir == 1 //空头信号,开空仓
strategy.entry("short", strategy.short, qty=1)
在开仓信号设置好以后,为了避免“空头冲天炮”或者“多头瀑布”,我们还需要及时设置平仓信号,设想如下:为了避免未来函数(使用今天的值预测今天的方向)或者战术性的回调,因此当判断前日的收盘价(close[2])大于或者小于昨日的开盘价(open[1])某一固定值时(多头:i_len3,空头:i_len4),我们进行平仓操作。止损调参的范围我们设置为从5到50,即在多仓中,价格突然下降某一个值,或者在空仓中,价格突然上升某一个值,说明多空仓的“拐点”到了,我们需要及时的进行平仓操作。
i_len3 = input.int(10, "Length 3", minval=5, maxval=50, step=5)
i_len4 = input.int(10, "Length 4", minval=5, maxval=50, step=5)
if close[2] - open[1] > i_len3
strategy.close_all("buy", comment = "close long")//平多仓
if open[1] - close[2] > i_len4
strategy.close_all("short", comment = "close short")//平空仓
经过多次调参设置,i_len1的值为2,i_len2的值为1,i_len3的值为40,i_len4的值为5的组合时,在2022.2月份开始,到2023.2月份,该策略的预估收益最高为10585。
话说一段真挚的爱情应该穿越时间,那么一个量化的策略也应该经历时间的考验,因此将回测时间范围调整为2020.2到2023.2,观察一下回测结果,看我们的策略是否能经历时间的考验。
结果显示,经过三年时间,我们的策略预测收益为36593.925,证明策略是有效的。
当然不存在一个完美的策略,可以捕捉所有的趋势,但是我们可以改进,比如观察回测收益曲线,在5.26到9.22之间出现了较大的回撤(吐槽:亏损就亏损,还整一个专业名词,忽悠谁呢?),我们可以探索其原因。
结果发现,在5月份到9月份玻璃趋势比较平稳,因此我们的策略不能很好的捕捉盈利趋势。
如果想在后期改进的话,山人自有一计(收益提升至14000),当然如果大家感兴趣的话,在此留个关子,我们以后介绍。
本策略在玻璃品种是有效的,当放到其它的品种上时,是否依然有效呢,我们换一个甲醛主力(MA888)看下。
使用同样的策略,看来结果不妙哈(预估收益为负),说明并没有完美的策略适用于任何品种。本策略是在观察玻璃期货最近走势基础上编写的,因此可能存在过拟合的问题(说完黑子的话,让黑子无路可走),但是经过三年的检验,证明模型的生态效度还是可以的(心理学专业名词,就是抗造管用)。
在期货市场血亏确实时事实,花出半小时写出这个21行代码也是事实,但这是在认真学习Pine语言基础上和认真观察期货走势的基础上做完的。优宽平台确实很友好,策略回测简单方便还有免费,有的朋友可能又要质疑是“卖软件的”。其实看到挺伤心的,其实“成功的秘诀,是帮助他人,成就自己”。我也是经过多次尝试和验证后,努力学到更多的知识,找到更好的结果为大家进行讲解和呈现。如果大家真的对金融保佑一腔热忱的话,希望大家真的静下心来,简单的尝试一下,又不花钱是不。“白嫖啊,我们最喜欢了!”
再次提醒下:本策略为教学展示用,金融有风险,入市需谨慎!
1557614304 好·