开拓者期货期权程序化系统交易论坛

标题: 请教关于海龟的修改 [打印本页]

作者: skyline    时间: 2008-1-6 14:40:47     标题: 请教关于海龟的修改

Params
        Numeric RiskRatio(0.1);
Vars
        Numeric TotalEquity;
Begin               
        TotalEquity = CurrentCapital()+ Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio());
        lots = (TotalEquity*RiskRatio) /(Close[1]*ContractUnit()*BigPointValue());
        lots = IntPart(lots);


        If(condition1 and condition5 And MarketPosition ==0 )
        {
                Buy(lots,0);
        }
End

模仿海龟写的,主要想表达 将账户总额的一个百分比用于下单

1..当账户上持有多个品种合约时是否有效?
CurrentContracts()*Close*ContractUnit()
记得楼主说TB只讲公式应用到当前的品种和账户上,所以不知道这里是否会计算所有合约?

2.红色部分为什么不用 A_CurrentEquity() ?
能否解释下

3.查询持有合约品种个数时该用哪个系统函数?

[ 本帖最后由 skyline 于 2008-1-6 14:45 编辑 ]
作者: skyline    时间: 2008-1-6 15:17:54

在测试中常常出现只下单一手的状况,不知道什么原因
感觉有很大的问题
作者: jvya    时间: 2008-1-6 18:13:56

TB我还没有完全学明白
仅供参考吧

按资金固定比例下单,不一定非要写那些代码啊。
在交易设置中,在 初始资金 ,写上你的可用资金。 保证你的帐户资金和交易设置同步。
然后选择以固定资金比例。
不过,这用于历史数据的统计上。完全没问题。

如果嫌手动设置麻烦。
那你的这段代码中
lots = (TotalEquity*RiskRatio) /(Close[1]*ContractUnit()*BigPointValue());
没写上保证金比例。MarginRatio()   我好象没理解错吧。
这个问题,不太严重。不打算保证金杠杆而已。
作者: 孤舟骑浪    时间: 2008-1-7 08:28:11

看得明白这段代码,就可以了.onemargin指的是一手时所需保证金,onelostpercent指的是假若一次交易是亏损,可以承受的亏损百分比,stopset指的是止损点.
oneMargin = open*ContractUnit()*BigPointValue()*MarginRatio();
TotalEquity = CurrentCapital()+ Abs(CurrentContracts())*oneMargin;
lots=intpart((TotalEquity*(onelostpercent/1000))/(ContractUnit()*BigPointValue()*stopset*minmove*pricescale));
Entryratio=(lots*oneMargin)/TotalEquity;
从代码中可看出,是先求可做的手数,然后求百分比,当然也可以用百分比作参数来反求手数,上述代码指的均是回测帐户的情况,真实帐户还要另外使用行情函数和帐户函数.
作者: 孤舟骑浪    时间: 2008-1-7 08:31:51

lots = (TotalEquity*RiskRatio) /(Close[1]*ContractUnit()*BigPointValue());
这里的riskratio显然就是用一手可承受的百分比作为参数来反求可做的手数.onelostpercent/1000
就相当于riskratio.
作者: 孤舟骑浪    时间: 2008-1-7 08:35:18

CurrentContracts()*Close*ContractUnit()
这里指的是一个图表上的回测帐户中的商品合约数,品种只是一个,不能反映很多个.
不用 A_CurrentEquity() ,是因为程序要表达的是回测帐户的情况,当用到同步交易时,在最后一个bar就要使用这个函数了.
作者: skyline    时间: 2008-1-7 08:42:17

原帖由 jvya 于 2008-1-6 18:13 发表
TB我还没有完全学明白
仅供参考吧

按资金固定比例下单,不一定非要写那些代码啊。
在交易设置中,在 初始资金 ,写上你的可用资金。 保证你的帐户资金和交易设置同步。
然后选择以固定资金比例。
不过,这用于历史数据的统 ...


我本来想让自己的交易程式更完整点,设置更少点。但没法实现,就只好在手工计算了。

我在想这个totalequity计算是否正确?当帐户上有多个合约时


感觉是少个 MarginRatio(),但好像不加测试时也正确
作者: skyline    时间: 2008-1-7 08:44:55

原帖由 孤舟骑浪 于 2008-1-7 08:35 发表
CurrentContracts()*Close*ContractUnit()
这里指的是一个图表上的回测帐户中的商品合约数,品种只是一个,不能反映很多个.
不用 A_CurrentEquity() ,是因为程序要表达的是回测帐户的情况,当用到同步交易时,在最后一个 ...

就是说我真是帐户应该用A_CurrentEquity()来求总资产?
作者: 孤舟骑浪    时间: 2008-1-7 10:11:53

就是说我真是帐户应该用A_CurrentEquity()来求总资产?
在最后一根bar上有真实帐户时,就用这个.
作者: jvya    时间: 2008-1-7 17:37:52

要不
你试试,别用总资产来计算 开仓手数,
用可用资金来算
试试。
没看到你的运行情况,不好说
是不是已经持仓,可用资金不足。
你试试 把可用资金输出,看看是不是余额不足
作者: jvya    时间: 2008-1-7 17:42:27

Commentary("可用资金:"+Text(CurrentCapital));

大概是  这么个 东西
你试吧,我没用过。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2