#syntax-error #amibroker
#синтаксическая ошибка #amibroker
Вопрос:
Я пытаюсь решить этот код, но я не понимаю, что не так с кодом. Я получаю "Syntax Error, unexpected FUNCTION"
, что это распространенная ошибка, но ее не должно быть, и из-за этой ошибки я получаю еще 5 ошибок в коде. Проверьте, можете ли вы решить
Вот скриншот ошибок при отладке
Вот скриншот ошибок при проверке синтаксиса
/////////////////////////////
// Supertrend - Translated from Kolier MQ4
// see: http://kolier.li/indicator/kolier-supertrend-indi
// translation in Amibroker AFL code by E.M.Pottasch, 2011
global buffer_line_down;
global buffer_line_up;
procedure calcTrend_proc(ATR_Period,tr,ATR_Multiplier,TrendMode,CalcPrice)
{
buffer_line_down = Null;
buffer_line_up = Null;
PHASE_NONE = 0;
PHASE_BUY = 1;
PHASE_SELL = -1;
phase=PHASE_NONE;
band_upper = 0;band_lower = 0;
for(i = ATR_Period 1; i < BarCount; i )
{
band_upper = CalcPrice[i] ATR_Multiplier * tr[i];
band_lower = CalcPrice[i] - ATR_Multiplier * tr[i];
if(phase==PHASE_NONE)
{
buffer_line_up[i] = CalcPrice[i];
buffer_line_down[i] = CalcPrice[i];
}
if(phase!=PHASE_BUY amp;amp; Close[i]>buffer_line_down[i-1] amp;amp; !IsEmpty(buffer_line_down[i-1]))
{
phase = PHASE_BUY;
buffer_line_up[i] = band_lower;
buffer_line_up[i-1] = buffer_line_down[i-1];
}
if(phase!=PHASE_SELL amp;amp; Close[i]<buffer_line_up[i-1] amp;amp; !IsEmpty(buffer_line_up[i-1]))
{
phase = PHASE_SELL;
buffer_line_down[i] = band_upper;
buffer_line_down[i-1] = buffer_line_up[i-1];
}
if(phase==PHASE_BUY amp;amp; ((TrendMode==0 amp;amp; !IsEmpty(buffer_line_up[i-2])) || TrendMode==1) )
{
if(band_lower>buffer_line_up[i-1])
{
buffer_line_up[i] = band_lower;
}
else
{
buffer_line_up[i] = buffer_line_up[i-1];
}
}
if(phase==PHASE_SELL amp;amp; ((TrendMode==0 amp;amp; !IsEmpty(buffer_line_down[i-2])) || TrendMode==1) )
{
if(band_upper<buffer_line_down[i-1])
{
buffer_line_down[i] = band_upper;
}
else
{
buffer_line_down[i] = buffer_line_down[i-1];
}
}
}
}
SetBarsRequired(sbrAll,sbrAll);
TrendMode = ParamToggle("TrendMode","Off|On",1);
ATR_Multiplier = Param("ATR_Multiplier",2,0.1,10,0.1);
ATR_Period = Param( "ATR_Period",5,1,20,1);
tr = ATR(ATR_Period);
CalcPrice = (H L)/2;
calcTrend_proc(ATR_Period,tr,ATR_Multiplier,TrendMode,CalcPrice);
SetChartOptions(0,chartShowDates);
//Plot(C,"C",colorWhite,64);
if ( TrendMode == 1 )
{
Plot( buffer_line_up, "ntu", ColorRGB( 28, 134, 238 ), styleThick );
Plot( buffer_line_down, " // td", ColorRGB( 205, 51, 51 ), styleThick );
Plot( 4, "", IIf( buffer_line_up, colorBrightGreen, colorBlack ), styleOwnScale | styleArea | styleNoLabel, -0.5, 100 );
Plot( 6, "", IIf( buffer_line_down, colorRed, colorBlack ), styleOwnScale | styleArea | styleNoLabel, -0.5, 100 );
}
Комментарии:
1. В опубликованном вами коде нет ничего плохого. Настоящая синтаксическая ошибка обычно находится непосредственно перед кодом и может быть неочевидной или выделенной. Возможно, вам где-то не хватает фигурной скобки или точки с запятой.
2. Еще одна вещь, которая не очевидна, определение функции не может быть определено внутри оператора IF.