|
代码我已经想出来了,如下:
SetCustomBacktestProc("");
if(Status("action") == actionPortfolio)
{
bo = GetBacktesterObject();
bo.PreProcess();
for (i= 0; i < BarCount; i++)
{
MinPctProfit = 100; //open position中某个position的最小浮盈,初始值
HaveOpenPos = 0; //是否持有position,初始值
for (trade = bo.GetFirstOpenPos(); trade; trade = bo.GetNextOpenPos())
{
MinPctProfit = Min(trade.GetPercentProfit, MinPctProfit); //求最小浮盈
HaveOpenPos = Max(trade.GetEntryValue, HaveOpenPos); //求某个position的最大成本值,以此判断是否持有position。本来打算用bo.GetOpenPosQty()来判断持仓情况的,但发现好像不行
}
MaxPosScore = 0; //取所有buy signal的positionScore中的最大值,初始值
for (sig = bo.GetFirstSignal(i); sig; sig = bo.GetNextSignal(i))
{
MaxPosScore = Max(sig.PosScore, MaxPosScore); //求positionScore的最大值
}
for (sig = bo.GetFirstSignal(i); sig; sig = bo.GetNextSignal(i))
{
if (sig.PosScore == MaxPosScore) //只买入positionScore最大的那一只股票
{
if (HaveOpenPos > 0 AND MinPctProfit >= 10)
sig.PosSize = -10; //如果持仓,且所有仓位中浮盈最少的股票>=10%,则买入
if (HaveOpenPos == 0)
sig.PosSize = -10; //如果没有持仓,买入
}
}
bo.ProcessTradeSignals(i);
}
bo.PostProcess();
}
PositionSize = 0; //对所有的position的数量大小设置为0,只有满足以上条件的,才有买入动作
PositionScore = ... //你自己设定的排序方式
//以下是你的主代码部分...
以上已经测试过了,符合我的要求。 |
評分
-
查看全部評分
|