以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  此种资金管理模式有什么错?  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=160634)

--  作者:jjjfk
--  发布时间:2017/12/25 9:06:05
--  此种资金管理模式有什么错?

目标:资金权益回撤幅度在15%以内,则风险暴露为2%;当回撤幅度在15%-25%之间,则风险暴露为1%;当回撤幅度大于25%,则停止交易。


代码:

n:=barpos();

maxasset:=hhv(asset,n);    //历史最高平仓权益

if asset>0.85*maxasset,then a1:=0.02*asset;   //回撤幅度在15%以内

if asset<=0.85*maxasset and asset>0.75*maxasset,then a1:=0.01*asset;   //回撤幅度在15%-25%之间

if asset<=0.75*maxasset,then a1:=0*asset;    //回撤幅度大于25%

SS:=floor(a1/(multiplier*atr));    //开仓手数

 

回测结果:



此主题相关图片如下:1.png
按此在新窗口浏览图片


请问为什么回撤幅度会远超控制?哪里有错?如何正确编写想要实现的目标?



--  作者:yukizzc
--  发布时间:2017/12/25 9:27:03
--  

你的回撤只是控制在开仓数量上,这个和你之前的回撤有没有关系

比如你说我亏损100就下次开1手,但这个又不能控制你不会亏10000的


--  作者:jjjfk
--  发布时间:2017/12/25 9:42:52
--  
我明白你的意思。但我的首仓风险暴露都控制在2%以内,不可能出现上面的短期内的大幅回撤。我觉得是不是“if asset<=0.75*maxasset,then a1:=0*asset; ”这里错了?是不是这里的“0*asset”是指全仓介入而不是不买入? 
还请您看一下我编辑的代码是否有错吧,我主要是想知道我的代码是否体现了我的目标?

--  作者:yukizzc
--  发布时间:2017/12/25 9:56:37
--  
你开仓手数如果是0,那么是全部买入
--  作者:jjjfk
--  发布时间:2017/12/25 10:04:57
--  
好的。
这样吧,请问你会如何写“资金权益回撤幅度在15%以内,则风险暴露为2%;当回撤幅度在15%-25%之间,则风险暴露为1%;当回撤幅度大于25%,则停止交易。

--  作者:banzhuan
--  发布时间:2017/12/25 10:30:03
--  
您可以在开仓条件中加入,回测幅度小于25%;  风险暴露只是指显示一下数值对吧? 
--  作者:yukizzc
--  发布时间:2017/12/25 10:31:57
--  

你要停止交易只要在开仓条件里加一个控制就好了

比如加上if a>0这样就不会全仓买入


--  作者:jjjfk
--  发布时间:2017/12/25 13:31:47
--  
搞好了,谢谢!
--  作者:jjjfk
--  发布时间:2017/12/25 13:32:21
--  
按照你说的,我改了一下,编辑目标已经完成了,谢谢!
--  作者:jjjfk
--  发布时间:2017/12/25 13:37:09
--  
我贴出来,让有需要的人看到:

tr1 : =max(max((high-low),abs(ref(close,1)-high)),abs(ref(close,1)-low));
atr : =ma(tr1,20);                               //atr公式
atr1:ref(atr,1);


n:=barpos();
maxasset:=hhv(asset,n);
if asset>0.85*maxasset,then a1:=0.02*asset;
if asset<=0.85*maxasset and asset>0.75*maxasset,then a1:=0.01*asset;
if asset<=0.75*maxasset and asset>0.4*maxasset,then a1:=0.005*asset;
if asset<=0.4*maxasset,then a1:=-1*asset;            //资金管理  
                                      
a2:=floor(a1/(j*multiplier*atr1));                         //开仓手数

//然后,在每个开仓条件中加入"a1>0"即可 ^_^