0

我正在尝试在 amibroker 中使用 AFL 编码分歧。该程序是基于块的分歧。所以它应该遍历每个块并在搜索峰值和谷值时比较块的值。然后它将它们存储到峰值和谷值数组中。然后它将遍历数组并检查正负背离并发出买入和卖出信号。该程序应在负背离上放置买入信号,在正背离上放置卖出信号。现在,该程序将买卖信号放置在任何地方。任何帮助,将不胜感激。

indi= (MACD(12,26) - Signal(12,26,9));

indiPeakIndex =1;
indiPeakCounter = 1;
indiTroughIndex =1;
indiTroughCounter = 1;



for(i = 4; i < BarCount-1; i++)
{
    if((indi[i-1] > indi[i]) AND (indi[i-1] > indi[i-2]) AND (indi[i-2] > indi[i-3]))//Find Peaks
    {
        indiPeakIndex[indiPeakCounter] = i -1; //Store peaks
        indiPeakCounter++;
    }

    else if((indi[i-1] < indi[i]) AND (indi[i-1] < indi[i-2]) AND (indi[i-2] < indi[i-3])) //Find troughs
    {
        indiTroughIndex[indiTroughCounter] = i -1; //Store troughs
        indiTroughCounter++;
    }
}

for(i =1; i < indiPeakCounter-1; i++) //Loop through peaks and check for negative divergence
{
    if((indi[indiPeakIndex[i]] > indi[indiPeakIndex[i+1]]) AND (High[indiPeakIndex[i]] < high[indiPeakIndex[i+1]])) 
    {
        Buy[i] = Open[indiPeakIndex[i+1] + 1];  


    }
}
for(i =1; i < indiTroughCounter-1; i++) //Positive Divergence
{
    if((indi[indiTroughIndex[i]] < indi[indiTroughIndex[i+1]]) AND (High[indiTroughIndex[i]] > high[indiTroughIndex[i+1]])) //Loop through troughs and check for positive divergence
    {

        Sell[i] = Open[indiTroughIndex[i+1] + 1];   
    }
}


buy = ExRem( buy, sell );
sell = ExRem( sell, buy );
4

1 回答 1

0

如果可以的话,请远离循环。利用 Amibroker 在阵列上运行的事实。AFL 的工作原理

未经测试,但尝试类似:

//set the peak condition
peakCond= (Ref(indi,-1) > indi) AND (Ref(indi,-1) > Ref(indi,-2)) AND (Ref(indi,-2) > Ref(indi,-3));

//set all the places the peaks occur
indiPeaks = IIf(peakCond,1, 0);

然后

Buy = indiPeaks;  
于 2018-08-14T09:01:33.683 回答