在实盘中,以动态权益的百分比来确定首次开仓的手数,首次开仓的手数记为lot1,后续的第二次或者第三次第N次加仓或平仓都以lot1这个手数为基础进行计算的,怎么才能让这个lot1在持仓过程中成为一个定值,不再变化呢。实盘过程中发现,动态权益是变化的,所以这个lot1也是变化的,在后续加仓诃平仓过程中信号持仓手数和实际持仓手数就不一致了,想请教一下怎么能让lot1在该品种有持仓过程中成为一个定值,另外这个动态权益是用哪一个比较合适1.dynamicAmount 2.Portfolio_CurrentEquity,谢谢。
你给定条件满足时再赋值
而不是每次都赋值
现在是这样写的,你方便的时候帮忙看一下怎么弄合适一些,谢谢
OnBar(ArrayRef<Integer> indexs)
{
//一个品种最多占有总资金的60%保证金----------Begin
if( ATRDate <> Date*100 + Hour + Minute*0.01)
{
MarginRate mRate;//获取账户对应合约的保证金率
Bool ret = A_GetMarginRate(tmpMSyms2, mRate);
Numeric ValueSZ=( C[1] / Rollover())*ContractUnit*BigPointValue; //当前下一手的市值
Numeric bond = ValueSZ*mRate.longMarginRatio; //1手所需保证金(元)
Commentary("1手所需保证金(元):"+text(bond));
//单品能开总手数的上限
if(longCurrentContracts == 0)
{
Account acc;
Bool ret2 = A_GetAccount(acc, 0);
if(ret2)
{
if(1 == 1)
{
lots_tmp1 = max(1,RoundDown(acc.dynamicAmount * risk * 0.01 / bond,0));
lot_x = max(1,RoundDown(acc.dynamicAmount * 3 * 0.01 / bond,0)); //初始开单手数需小于资金总量的3%
}
}Else
{
if(1 == 1)
{
lots_tmp1 = max(1,RoundDown(Portfolio_CurrentEquity() * risk * 0.01 / bond,0));
lot_x = max(1,RoundDown(Portfolio_CurrentEquity() * 3 * 0.01 / bond,0)); //初始开单手数需小于资金总量的3%
}
}
}
}
这个初始开仓手数能在持仓过程中固定下来吗,完成平仓后,随着权益的变化,下次开仓的时候重新计算初始的开仓手数,根据当前的权益增加或者减少初始开仓手数,一但有持仓,就固定下来,这个理论上可以实现吗,怎么一个逻辑呢?请解答一下谢谢
可以只在每次开第一仓的时候,用当时的权益计算后,保存到一个序列变量中,就可以达到您说的固定。动态权益,应该用portfolio_CurrentEquity,这个是对应图表信号的权益。