Я пытаюсь закодировать дивергенцию, используя 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 );