Расхождение кодирования в AFL

Я пытаюсь закодировать дивергенцию, используя AFL в amibroker. Программа представляет собой блочную дивергенцию. Таким образом, он должен перебирать каждый блок и сравнивать значения блоков при поиске пиков и впадин. Затем он сохранит их в массивы пиков и впадин. Затем он просматривает массивы и проверяет положительное и отрицательное расхождение и размещает сигналы покупки и продажи. Программа должна размещать сигналы покупки при отрицательном расхождении и сигналы продажи при положительном расхождении. Прямо сейчас программа размещает сигналы покупки и продажи где угодно. Любая помощь будет оценена по достоинству.

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 );

person Rubiks    schedule 27.02.2018    source источник


Ответы (1)


Скорее держитесь подальше от петель, если можете помочь. Воспользуйтесь тем, что 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;  
person Sethmo011    schedule 14.08.2018