Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共7 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:cash和asset函数的非一致性?

1楼
choir2001 发表于:2010/6/10 3:00:15

期货交易公式中

1、费了好大功夫才弄清楚,在未开仓状态下,asset=cash*保证金率,因此cash比asset大很多倍。但按照常理未开仓时应该asset=cash。

既然设置中的初始资金是asset,那么以cash来计算应开仓量的话会高估很多,产生错误结果,比如系统自带的海龟交易法中。

 

2、bhwhui写的双向海龟交易法。即使按照asset来计算开仓量,在股指期货5分钟图上还是只能产生某个日期之前的信号,原因何在?明明是盈利的,不存在资金回撤到0的状态。保证金率设为18%,合约单位300。

2楼
admin 发表于:2010/6/10 9:27:03
可否写出一个测试公式给我们,另外指出比如那天的存在问题,方便我们迅速查找问题。
3楼
choir2001 发表于:2010/6/10 22:15:29

稍微修改了一下bhwhui写的海龟交易法,用Asset来计算开仓量。

费率设置,保证金率margin 10%,合约单位10,交易费用0.02%,初始资金100万。运行到白糖1007的5MIN结果如图..(图传不来)

 

1、图中直观看出未开仓时,asset=cash*margin的关系,是否此点设计有误?应该asset=cash

2、在5MIN图上只有在4月22日之前能产生信号,而15MIN图上所有日期都有信号,这点十分不理解。

 

======================================

input:trn(20,5,30),hn(20,5,30),lown(10,5,20);

VARIABLE:dayCount=1,PositionCount=1,SellSign=0,dK=0;//加多空标志,1:多,-1:空 0:空仓
VARIABLE:EntAndExitSign=1,EntPoint=0,ExitPoint=0;
VARIABLE:N=0;

margin:=0.1;//保证金率
value:=10;//合约单位

//现金:CASH(0)/1000*margin;//若输出此行,cash和asset相等
现金:CASH(0)/1000;//若输出此行,asset=cash*margin。处以1000是为了坐标比例与K线适应
资产:ASSET/1000;

N:=MA(TR,trn);
BUYHHV:=HHV(H,hn);
SELLLLV:=LLV(L,lown);

sellshortllv:=llv(l,hn);
buyshorthhv:=hhv(h,lown);

IF BARPOS>=hn THEN
BEGIN
 IF BARPOS=hn THEN
 IF DayCount=hn/2 OR BARPOS=hn  THEN
  BEGIN{hn/2天调整N值}
      N:=((hn-1)*N+TR)/hn;{计算N值}
      DayCount:=2;
  END
 
 DayCount:=DayCount+1;
 EntPoint:=ENTERBARS+1;
 
 IF EntPoint=EntAndExitSign THEN
     BEGIN{说明STOP指令买进头寸成功}
  PositionCount:=PositionCount+1;{头寸计数}
  SellSign:=True;{可以平仓信号,如果达到指定的价格}
   END
  
 IF PositionCount=1 THEN BEGIN{第一头寸}
  HOW:=ASSET*0.01/N/value;{波动性百分比决定头寸规模}
  if high=buyhhv then
   BEGIN
   dk:=1;
   多开1:BUY(1,HOW,STOP,BUYHHV);{在20日新高STOP指令买进}
   END;
  
  if low=sellshortllv then
   begin
   dk:=-1;
   空开1:buyshort(1,HOW,STOP,sellshortllv);{在20日新低STOP指令空开}
   end;
 END

 IF PositionCount=2 THEN BEGIN{如到第二头寸}
  HOW:=ASSET*0.01/N/value;{波动性百分比决定头寸规模}
  if dk=1 then 多开2:BUY(1,HOW,STOP,ENTERPRICE+0.5*N);{在上头寸(即第一头寸)+0.5个N以STOP指令买进}
  if dk=-1 then 空开2:buyshort(1,HOW,STOP,ENTERPRICE-0.5*N);
 END

 IF PositionCount=3 THEN BEGIN{如到第三头寸}
  HOW:=ASSET*0.01/N/value;
  if dk=1 then 多开3:BUY(1,HOW,STOP,ENTERPRICE+0.5*N);{在上头寸(即第二头寸)+0.5个N以STOP指令买进}
  if dk=-1 then 空开3:buyshort(1,HOW,STOP,ENTERPRICE-0.5*N);
 END

 IF PositionCount=4 THEN BEGIN
  HOW:=ASSET*0.01/N/value;
  if dk=1 then 多开4:BUY(1,HOW,STOP,ENTERPRICE+0.5*N);
  if dk=-1 then 空开4:buyshort(1,HOW,STOP,ENTERPRICE-0.5*N); 
 END

 IF SellSign=True THEN
  BEGIN
      ExitPoint:=EXITBARS+1;
      if dk=1 then
       begin
        IF ExitPoint=EntAndExitSign THEN
        BEGIN {说明卖出成功}
           PositionCount:=1;{头寸计算复原}
           SellSign:=False;
           dk:=0;
        END
    
        IF ENTERPRICE-2*N then
         SELL(1,100%,STOP,SELLLLV);{退出离盈利头寸}
        ELSE
         SELL(1,100%,STOP,ENTERPRICE-2*N);{退出亏损头寸}
       end;
      
      if dk=-1 then
        begin
       IF ExitPoint=EntAndExitSign THEN
        BEGIN
           PositionCount:=1;
           SellSign:=False;
           dk:=0;
        END
    
       IF ENTERPRICE+2*N then
        sellSHORT(1,100%,STOP,BUYSHORTHHV);
       ELSE
        sellSHORT(1,100%,STOP,ENTERPRICE+2*N);
      
       END;
     END
END;

4楼
admin 发表于:2010/6/10 22:49:45

asset=cash的问题,我们下个版本会按照你的方法进行输出修正,感谢提交此问题。

另外第二个问题,你可以看看是否因为资金不足无法后续开仓问题造成

5楼
choir2001 发表于:2010/6/10 23:23:02

关于第二个问题,我不太认为是资金不足无法开仓。或许正是因为cash和asset以及费率设置中的保证金率、合约单位、初始资金之间错综复杂的换算关系有瑕疵导致的。

 

或许第一个问题解决后,第二个问题自然解决...

[此贴子已经被作者于2010-6-10 23:26:05编辑过]
6楼
wattwei 发表于:2010/6/10 23:37:21
 此帖有点深度,不错
7楼
admin 发表于:2010/6/10 23:56:27

你可以通过

持仓:HOLDING,LINETHICK0;

 

这种方式打印出公式中的变量,然后通过十字光标查看每个周期的变化,最终查明原因。

共7 条记录, 每页显示 10 条, 页签: [1]


Powered By Dvbbs Version 8.3.0
Processed in 0.01563 s, 3 queries.