EA邦程序化交易论坛

标题: Hedgeing ea反向对冲后立刻补多空单差功能 [打印本页]

作者: kkwang2005    时间: 2022-9-4 19:23
标题: Hedgeing ea反向对冲后立刻补多空单差功能
开发需求:
反向对冲后立刻补多空单差。下面以以下场景来具体说明。

场景:
马丁对冲ea,无脑开多空仓,逆势顺势同时按固定间隔加仓,只开反向对冲。没有止盈止损,单向盈利不对冲,整个ea只从每次反向对冲中提取盈利。震荡市,这个ea没有问题。大单边,基本会死。下面分析大单边市场。以单边下跌为例。

在单边下跌行情中,本策略多空同时开单的多空平衡的局面会被打破,反向对冲会用多个空单(假设空单加总后为n手)加总的盈利对冲掉少量的几个亏损的多单(假设多单加总后为m手),就是说这个数量基本一直是n>m的,经过多次对冲后,就会形成亏损的单单数和手数越积累越多,盈利始终只有1-2单和很少手数的局面。如下图1是典型的单边下跌后本ea的多空单的分布情况。
hh.png
大量的多单在上方,少量空单在下方。
照成这个局面的原因就是上面说的,因为空单对冲掉的数量多,多单对冲掉的数量少,时间一长,就会这样。一旦形成这样的局面,多空严重失衡,同时带有一个很大的浮亏,能否解套完全看运气,任何其他操作都会衍生出新的问题,而且不能对付所有的可能走势。


解决方案:
为了避免上图的局面出现,保持多空平衡,每次反向对冲发生后,立刻开(n-m)手,如果n-m是正数,开空单,如果n-m是负数,开多单。以上图为例,n>m, n-m后是正数,所以开空单。这样每次对冲后开单,多空单总手数恢复平衡,并且可以永远平衡下去。下面的图2说明一下,这样的操作后可能形成的局面。
Untitled-1.jpg
这个时候我们可以看到原本完全没有空单的位置,分布了一些补充的空单,大大缓解了多单过多的局面。
当然有人会说,你这些红线处的空单根本留不下来,因为他们也会被冲掉的。没错,但是同样他们被冲掉还会继续补单。如果我们脑补一下这个动态的过程,最后形成的局面应该是多单亏损的数量减少,手数减少,最上方的多个多单已经消失(被补出来的空单冲掉),而且在剩下的多单亏损区里面还有多个补出来的空单。上一个脑补后的图。
Untitled-ff1.jpg

(如果能脑补到这里,我想很多朋友会明白这个功能和锁仓的不同,锁仓是起不到这样的作用的)
当然了,市场会有各种变化,有人会说那如果市场立刻反转了怎么办。那没有任何关系,因为这时多空单手数是平衡的,记住这个策略的盈利模式是只从对冲中得到,市场怎么走都一样,只要多空平衡,可以保持一直对冲下去,就可以盈利。也不用说我这三个图是根据假设市场是下跌的做出来的,你也可以假设市场是上涨的,震荡的,V字,不管什么走势,最后的结果都是一样的,就是多空保持平衡。

具体的面板上的设计:
在反向对冲面板中,只需要加一个开关。反向对冲后补单差, 开,关。这样开发时简单,使用时也很简单。这个功能并不是说就不会亏损了,一定盈利了,但是会是一个很好的工具,适合各种对冲策略。

以上是我提交的开发需求,欢迎批评指正讨论。有同样需求的朋友请留言。

作者: 唐老师    时间: 2022-9-4 23:57
怎么又来了个帖子,有点复杂,要花点工夫看啊。

作者: kkwang2005    时间: 2022-9-5 00:46
唐老师 发表于 2022-9-4 23:57
怎么又来了个帖子,有点复杂,要花点工夫看啊。

嗯,两个不同的功能。

当两个独立的帖子就行。

作者: 唐老师    时间: 2022-9-5 01:19
补差单是什么意思,以上面帖子里的图,多单被套,是多单-空单吗?那这样不就成了锁仓?

作者: kkwang2005    时间: 2022-9-5 02:27
唐老师 发表于 2022-9-5 01:19
补差单是什么意思,以上面帖子里的图,多单被套,是多单-空单吗?那这样不就成了锁仓?
...

补单差:空单0.9手冲掉多单0.3手,单差0.6手,开空0.6.


这个在第二个图里我解释了,和锁仓不一样。因为补的单不锁,可以继续对冲,这个效果和锁仓完全不一样。而且现在的锁仓以是否亏损来加锁,但是这个和是否亏损无关,只是补单差,保持多空平衡。按照我的例子的设定,这个只有盈利后才开始补,没有盈利不会补。这个和锁仓区别很大了。


作者: 唐老师    时间: 2022-9-5 15:38
kkwang2005 发表于 2022-9-5 02:27
补单差:空单0.9手冲掉多单0.3手,单差0.6手,开空0.6.

是不是这个意思,多单1.2,空单0.9,空单盈利反向对冲多单,空单0.9全平,多单0.3对冲平仓,开仓空单0.9-0.3=0.6手。
下次0.6全平,对冲多单0.05手,开仓0.55手空单。
是这样吗?

就是用即将平仓的两边订单的差来补单。

作者: mchal    时间: 2022-9-5 15:47
唐老师 发表于 2022-9-5 15:38
是不是这个意思,多单1.2,空单0.9,空单盈利反向对冲多单,空单0.9全平,多单0.3对冲平仓,开仓空单0.9-0 ...

应该是空单0.9冲掉多单0.3,此时剩多单0.9,所以补空单0.9.

当然我还是不太明白这个和锁仓100%的区别在哪里。
因为根据我对对冲马丁EA的理解,现有的ea是没法做到区分这个空单是来自于顺势加仓,逆势加仓,还是反向对冲锁仓or补单的。对代码来说,它就是一个……空单。

作者: 唐老师    时间: 2022-9-5 15:51
mchal 发表于 2022-9-5 15:47
应该是空单0.9冲掉多单0.3,此时剩多单0.9,所以补空单0.9.

当然我还是不太明白这个和锁仓100%的区别在 ...

我觉得你理解成这样,跟锁仓就没区别了。
应该是空0.9对冲多0.3,开空0.6,这样才跟锁仓有区别。

作者: mchal    时间: 2022-9-5 16:13
唐老师 发表于 2022-9-5 15:51
我觉得你理解成这样,跟锁仓就没区别了。
应该是空0.9对冲多0.3,开空0.6,这样才跟锁仓有区别。
...

噢我又看了一遍,大概懂了。他的N&M指的是发生反向对冲的多空单手数,而不是对冲之后的剩下的多空单手数。

那这个等于是确保反向对冲前后净敞口不变。
这功能应该也不错,可以和我的需求里那个4 5 6结合起来操作应该效果不错。

作者: kkwang2005    时间: 2022-9-5 18:55
唐老师 发表于 2022-9-5 15:38
是不是这个意思,多单1.2,空单0.9,空单盈利反向对冲多单,空单0.9全平,多单0.3对冲平仓,开仓空单0.9-0 ...

唐老师理解的没错。


假如现在有1手空,1手多,没有其他的加仓,加入这个功能后,无论对冲多少次,一直保持多空是一样的手数。只要公式满足这个条件就可以了。

比如0.9手空对冲掉0.3手多,09.-0.3=0.6. 空单少了0.6,补0.6空单。补完之后,空0.7,多0.7.
接着再0.7手空冲掉0.2手多,补0.5手空,空单变成0.5手,多单0.5手。
如果再冲一次,最后可能变成空0.1,多0.1。在单边下跌行情中,套住的多单成功解套。

这里就可以看到如果没有这个补的过程,现在空单早就没了,多单还有很多。
用这个原理手动回测,当然手动的数量值很粗糙,效果极佳。



作者: kkwang2005    时间: 2022-9-5 18:57
mchal 发表于 2022-9-5 16:13
噢我又看了一遍,大概懂了。他的N&M指的是发生反向对冲的多空单手数,而不是对冲之后的剩下的多空单手数 ...

看我给唐老师的例子,这和锁仓完全不一样。
如果上线这个功能,再加上另外帖子的净仓管理功能,锁仓功能基本可以不需要了。


作者: mchal    时间: 2022-9-5 19:21
kkwang2005 发表于 2022-9-5 18:57
看我给唐老师的例子,这和锁仓完全不一样。
如果上线这个功能,再加上另外帖子的净仓管理功能,锁仓功能 ...

但需要改善现有的反向对冲方式,目前的反向对冲是用其中一个方向的全部单子去对冲另一方向的部分单子。换句话,如果多单成本价在1.03000,空单成本价在1.00000,只要现价在多空成本价之间来回震荡,是不会发生任何反向对冲的。

但如果改成用其中一个方向的全部盈利单子去对冲另一方向的部分单子,那估计情况就会好很多。

作者: wjwj999    时间: 2022-9-6 09:16
楼主你这个功能的效果和你上一个提的净仓量控制的功能是一样的,那个净仓量控制的功能就能实现这些补单的功能,只要把净仓量设置好,发生对冲后都会立即反向补齐的,那个功能是最核心的本质。
作者: mchal    时间: 2022-9-6 09:55
我的最新理解是:
反冲后补单这个功能如果单独使用,那么在大单边行情中,也依然会造成敞口逐步增大的。

因为这个功能相当于确保反向对冲前后,净敞口不变。而在单边行情不断逆势加仓敞口增大而反向对冲尚未满足条件触发的过程中,这个功能是不会介入的。

也就是可能第一次反向对冲前后,净敞口是0.5,到了第二次反向对冲的时候,可能由于单边过程中逆势加仓的原因,净敞口就变成了1了。

但如果两个功能配合使用的话,可能会引发如下问题:
假设在净仓位管理中,设定了敞口值是0.5,X是0.03,那么当敞口值大于0.5的时候(我们设当前敞口值为A-B),会立刻开反向单(A-B-0.5+0.03)。那么这时候敞口值会变成A-[B+(A-B-0.5+0.03)]=0.47。
我们用具体的数字来看,
当前多单1手,空单0.5手。净敞口0.5。发生了反向对冲:空0.5冲多0.2。冲完之后多单0.8,空单0,净敞口0.8。
那么对于净仓位管理,EA会判断需要补空单(0.8-0.5+0.03)=0.33手,于是EA发送了一个开空单0.33手的指令。
与此同时,反冲后补单这个功能,EA会判断需要补空单0.3,使得净敞口回到对冲之前0.5的状态。
而这两个指令是同时发出的,则此时会变成多单0.8,空单0.66(0.33+0.3)。

我无法确认这个仓位的变化是否满足用户的期待,如果要规避这种情况,可能编程的时候需要加一个判断先后顺序的前置条件。建议唐老师评估一下添加了这个之后会不会进一步引发别的问题。
但如果净仓位管理已经可以90%的实现反向对冲后补单的功能(无非是对净敞口在反向对冲前后的变化控制得不够精准),那似乎可以考虑把这两个功能合并成一个,没必要分开开发?
毕竟无论什么功能,最终的目的也都是让净敞口在震荡&单边行情中,都能维持在一个EA使用者可以接受的范围内而已。
(以上内容基于我对这两个功能&EA运作方式的理解,不能保证100%正确,若有偏差欢迎指出。)

作者: chaore987    时间: 2022-9-6 10:22
本帖最后由 chaore987 于 2022-9-6 10:25 编辑
mchal 发表于 2022-9-6 09:55
我的最新理解是:
反冲后补单这个功能如果单独使用,那么在大单边行情中,也依然会造成敞口逐步增大的。

大佬们说的都是对的,这个单独补单功能其实在楼主提的那个“净仓位控制”功能里就实现了,因为净仓位要想控制在设置范围内一定是在发生大的净仓位时自动补反向单拉回去的,这就是自动补单了,如果再加一个这个自动补单功能很可能把EA弄乱,把那个“净仓位控制”功能开发好就可以实现,可以根据功能的操作和自己的想法来设置你想要达到的效果。

作者: kkwang2005    时间: 2022-9-6 18:38
mchal 发表于 2022-9-6 09:55
我的最新理解是:
反冲后补单这个功能如果单独使用,那么在大单边行情中,也依然会造成敞口逐步增大的。

这贴同样回choren汇友

这两个功能我在之前有个帖子说了一下不同。最主要的不同是补仓的时机。其次我要说一点的是一个功能往往需要组合其他功能使用,净仓管理和对冲后补单功能在某些策略下的确类似,但是在另外一些策略中当和其他功能的配合使用的话就会发挥出不同的作用。
这里我在总结一些不同的地方

净仓量管理: 事后管理,被动触发,总量控制,更偏重于风险控制功能,需要人为设置触发值(这个值设的好不好非常有讲究),同时还要人为设置回归值,同样这个值设置多少也会有很大的不同。然后看触发启动后的点位,如果下跌行情,这个净仓管理只要触发启动了,基本就是目前行情的最低点,开仓后这个仓位处在行情的最低点。

反向对冲后补单: 实时管理,主动触发,微观控制,更偏重于积极的仓位管理功能,不需要认为设置触发值,不需要设定回归值。然后和净仓管理功能开仓后的点位比较一下。还是假设下跌,发生10次对冲后净仓管理功能触发,相对于净仓管理会开仓一笔在最低点的仓位,反冲补单的单会分布在不同的10个点位,而且都在净仓管理开仓单的上方!更关键的是,有了这些反冲后的实时补单,会发生更多次的对冲,多单的平均总成本下降了!

再来看看假设两者配合使用(当然也可以不配合使用,取决于策略和用户)
正如Mchal说的,如果下跌过程中因为条件不满足没有发生对冲,因为逆势补单,这时候净敞口变大了,这时候就可以使用净仓管理功能开仓。
如果距离净仓管理触发值还很遥远,那对冲后,就用反向对冲补单功能补单。两者同时使用,会大大减小净仓管理被触发的次数和概率,同时会增加盈利。

优先顺序问题(这点Mchal考虑的很周到)
反向对冲发生,取决于这次对冲具体的手数差值,可能会同时触发净仓管理功能,这时可能需要一个按钮,可以选择是优先使用净仓管理功能补单还是是反冲补单功能(或者同时使用),如果没有同时触发净仓管理功能,那就使用反冲补单。



作者: 唐老师    时间: 2022-9-7 19:39
kkwang2005 发表于 2022-9-6 18:38
这贴同样回choren汇友

这两个功能我在之前有个帖子说了一下不同。最主要的不同是补仓的时机。其次我要说 ...

做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

QQ图片20220907182225.png
QQ图片20220907182325.png
我按上面这样设置,没有平仓条件。
开仓量会越来越大,最后的结果是暴仓。
QQ图片20220907183105.png
刚开始是对的,像上图这样,后面就会失控。
QQ图片20220907183730.png
像上图这样,加仓上去后,可能是用一边的0.5手对冲另一边的0.01手,然后开0.49手,0.49手再加仓,仓位就越来越重,加两次就变成0.98手,用0.98手对冲反向0.01手,然后开仓0.97手,进入了恶性循环。
你这个策略我之前就想着觉得有点问题,现在看确实是有问题的,解决不了就不纠结了,不放到公共版本里。

作者: wjwj999    时间: 2022-9-7 21:45
唐老师 发表于 2022-9-7 19:39
做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

无所不能的唐老师,佩服,那个净仓位控制的功能怎么样?

作者: 唐老师    时间: 2022-9-7 22:10
wjwj999 发表于 2022-9-7 21:45
无所不能的唐老师,佩服,那个净仓位控制的功能怎么样?

净仓位也会有同样的问题,不能根本解决,我还要再想办法。
作者: kkwang2005    时间: 2022-9-7 22:23
唐老师 发表于 2022-9-7 19:39
做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

加仓条件里面要设置同时加仓另一个方向订单。不然的话这个策略的单是不平衡。就会越开越失衡。
唐老师能不能把这个版本发给我,我来测一下。
谢谢

作者: mchal    时间: 2022-9-7 22:26
唐老师 发表于 2022-9-7 19:39
做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

就像QQ里沟通的那样,这个问题主要是由于补单手数过重造成的。

解决方向有两个:
1是通过降低总补单手数。这个可以通过改善反向对冲的方式:对冲手数的话调大手数,或者改为对冲订单,或者用我提的需求里的仅盈利对冲或者反向末单对冲等等。从0.49手多单走100点冲掉0.01手空单 变为 0.24手 多单走400点冲掉0.02手空单,这里直接就能让补单手数下降50%了。

2是通过降低单笔补单手数。
这个我认为可以通过设置补单允许的单笔手数上限来解决。像您例子里提到的0.49手。我们如果设定单笔最高0.2手。让EA把这0.49手拆分成0.2 0.2 0.09(或者让EA分成X单,if补单总手数/X>设定单笔最高手数,则X=X+1)。这样在逆势加仓的时候,EA就会从从当前的 0.49 0.49 0.49这样一路加上去 变为 0.2 0.2 0.2加上去。

其实只要在大单边行情中为了避免爆仓而引入反向锁仓的操作,那么在趋势反转的时候,天地锁基本不可避免。毕竟这世界上并没有既要……又要的事情。
天地锁并不是绝对的可怕,可怕的是因为天地锁而让手数迅速螺旋上升导致敞口暴增从而导致爆仓。
希望这两个思路对唐老师有帮助。


作者: kkwang2005    时间: 2022-9-7 22:34
唐老师 发表于 2022-9-7 19:39
做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

这个策略的核心就是任何时候多空都是平衡的,从开始交易的第一分钟到最后一分钟,中间任何操作,都保持多空平衡。

理论上会爆仓。但是如果没有这个操作在单边行情中,下跌1万个点爆仓的话,加上这个可能可以撑2万点。对于等待时机或者风控都有很大的好处。

作者: kkwang2005    时间: 2022-9-7 22:46
mchal 发表于 2022-9-7 22:26
就像QQ里沟通的那样,这个问题主要是由于补单手数过重造成的。

解决方向有两个:

这个爆仓的主要原因是,没有设置加仓,首单,自定义首单仓位0.01.

所以现在这个0.53补单后,后面的加仓直接加0.53了,那肯定要爆。

作者: kkwang2005    时间: 2022-9-8 03:15
唐老师 发表于 2022-9-7 19:39
做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

193805ttxhp0x1oz000p1o.png

唐老师,看这张图片,这个补单的方向补反了。
上面是空单冲掉0.54,多单冲掉0.01,这样应该补0.53空单,不是补0.53多单。

作者: wjwj999    时间: 2022-9-8 08:46
kkwang2005 发表于 2022-9-8 03:15
唐老师,看这张图片,这个补单的方向补反了。
上面是空单冲掉0.54,多单冲掉0.01,这样应该补0.53空单, ...

真幸运有你们这些大咖在带领我们前进,紧紧抱住各位大咖的大腿

作者: kkwang2005    时间: 2022-9-8 21:14
唐老师 发表于 2022-9-7 19:39
做了补单版本,这个功能我这测试不怎么样,不知道你是怎么设置的。

不好意思,唐老师,因为我对MT5不熟悉,所以我搞错了。这个补的是对的。


我回测了一下,这个策略在震荡策略中的确会照成不断反复加仓的问题。使用Mchal的方法会减缓这个加仓速度。也许可以试试添加锁仓中的三个选项,双边锁仓,只空对多,只多对空,这样可能可以打破这个恶性循环。

另外,如果可以自动判断趋势方向来决定是否启用这个锁仓,这个反冲锁仓用在对冲趋势策略中,只用在趋势的方向,(或者反向),这样就不会产生天地锁的问题。也许这个功能更适合趋势策略。


作者: kkwang2005    时间: 2022-9-8 21:19
mchal 发表于 2022-9-7 22:26
就像QQ里沟通的那样,这个问题主要是由于补单手数过重造成的。

解决方向有两个:

你提的需求里的第五点非常有用,针对性地解决了目前反向对冲里的一个很大的不足,你和唐老师联系一下,我也愿意分担加急费用开发。

https://www.eabang.com/bbs/forum ... amp;extra=#pid51096

作者: 唐老师    时间: 2022-9-24 17:09
跟净仓位功能类似,下载3.8.8.8版本。

https://www.eabang.com/bbs/forum.php?mod=viewthread&tid=2627

作者: 七七招财猫    时间: 2022-10-4 01:28
围观各位大佬

作者: sutingfa    时间: 2022-11-28 07:42
本帖最后由 sutingfa 于 2022-11-28 07:43 编辑
kkwang2005 发表于 2022-9-5 18:55
唐老师理解的没错。


以无脑加仓,一轮单边下跌50个点单边为例。
EA想办法设置成无论多与空都是一定点数止盈
此时应该是多单被套,空单手数很少
解决方法:可以设置浮亏大于多少时反向对冲一定多单比例的空单,对冲的空单和EA加仓的单子一起止盈,然后EA再计算仓位继续对冲。如果行情反转,空单被套,EA加仓空单,带动对冲空单上移止盈线,直到空单浮亏一定比例,继续对冲一定仓位空单比例的多单,直到行情趋于震荡,这个方法不但能解决大单边被套,还能大盈利。




欢迎光临 EA邦程序化交易论坛 (https://www.eabang.com/bbs/) Powered by Discuz! X3.5