公式大概是这样的。我的思路,1·满足(bool_1)并且不是空仓的时候开仓。2·(bool_2)并且不是多仓的时候开仓。这是两个基础指令。现在可以实现。代码是下面的
3·增加计数器分别在多仓的时候i+1并且计数器清零,空仓的时候j+1并且计数器清零。这里看起来是对的,但可能逻辑上有点问题。
4·拿多仓的状态举例,多仓的状态下,求出hiduo-(0.1*chaduo)和hiduo-(0.2*chaduo)。然后当开盘价小于hiduo-(0.1*chaduo)或hiduo-(0.2*chaduo)的时候平仓,大于hiduo-(0.1*chaduo或hiduo-(0.2*chaduo的时候开仓,直到出现空头信号反手。然后hikong,lowkong,chakonng等参数完成和多仓时候一样的功能。但是我现在代码有点问题。请高手帮忙看一下。我没有把这两条的逻辑写出来因为是错的。
OnBar(ArrayRef<Integer> indexs)
{
ma=AverageFC(O, M);
IF(ma<ma[1]) PlotNumeric(\"mared\",Ma,Close,Green);
IF(ma>ma[1]) PlotNumeric(\"mared\",Ma,Close,red);
ma1=AverageFC(O, M/20);
ma2=ma1[1];
if(ma1>ma2) PlotNumeric(\"ma1\",Ma1,Close,White);
if(ma1<ma2) PlotNumeric(\"ma1\",Ma1,Close,blue);
bool_1=O>Ma and Ma1>Ma2 and ma>ma[1];
bool_2=o<Ma and Ma1<Ma2 and ma<ma[1];
Numeric n;
If(bool_1)
{
if (MarketPosition <>1)
{
// 如果当前不是多头状态,则买入并重置计数器j
Buy(1, Open);
//j = 0;
}
}
If(bool_2)
{
if( MarketPosition<>-1){SellShort(1,Open);}
}
if (MarketPosition <>- 1) {
i = i + 1;
j=0;
} else if (MarketPosition <> 1) {
j = j + 1;
i=0;
}
hiduo = HighestFC(Open, i);
loduo = LowestFC(Open, i);
hikong = HighestFC(Open, j);
lokong = LowestFC(Open, j);
chaduo = hiduo - loduo;
chakong = hikong - lokong;
}