Готовый советник (без ошибок) не совершает сделок

 
В книге Морозова "Forex: от простого к сложному" был рассмотрен советник,
дающий сигналы(на покупку/продажу) при пересечении двух moving average, на
основе анализа предъидущего бара.
Эта программа мне кажется очень удачной, но я не могу добиться её работы. Советник был проверен на ошибки. Он запускается(есть смайлик в верхнем правом углу), но сделки не
совершаются(хотя условия заключения сделок выполняются). Самое интересное,
что советник даже при тестировании не делает сделок (хотя тестирование идёт).
Может не выполняется какое-то условие?
Текст советника:
Name :=MA8-13 cross
Author := Copyright
Link := https://www.metaquotes.net/
Lots := 1.00
Stop Loss := 0
Take Profit := 0
Trailing Stop := 0


Variables: PrevTime(0);
Variables: Ma8Current(0),Ma8Previous(0),Ma8 Previous2(0);
Variables: Ma13Current(0),Ma13Previous(0),Ma13 Previous2(0);
Variables: cnt(0),WasClosedSell(False),WasClosedBuy(False);
Variables: IsCrossDown(False), IsCrossUp(False);


If PrevTime=Time And WasClosedSell=False And WasClosedBuy=False Then
Exit;
PrevTime=Time;



Ma8Current=iMA(8,MODE_SMA,1);
Ma8Previous=iMA(8, MODE_SMA,2);
Ma8Previous2=iMA(8, MODE_SMA,3);
Ma13Current=iMA(13, MODE_SMA,1);
Ma13Previous=iMA(13, MODE_SMA,2);
Ma13 Previous2=iMA(13, MODE_SMA,3);


IsCrossDown=Ma8Current<Ma13current And Ma8Previous>=Ma13Previous And Ma8Previous2>Ma13Previous2;
IsCrossUp = Ma8Current>Ma13current And Ma8Previous<=Ma13Previous And
Ma8Previous2<Ma13Previous2;

If IsCrossDown Or WasClosedBuy=True Then Begin
For cnt=1 To TotalTrades Begin
If OrderValue(cnt,VAL_SYMBOL)=Symbol And
OrderValue(cnt,VAL_TYPE)=OP_BUY Then Begin

CloseOrder(OrderValue(cnt,VAL_TICKET), OrderValue(cnt,VAL_LOTS),
Ask,3,Violet);
WasClosedBuy=True;
Exit;
End;
End;

If CurTime-LastTradeTime < 30 Then Begin
Print(«Wait up to 30 seconds please»);
WasClosedBuy=False;
If IsCrossDown Then Begin

SetOrder(OP_SELL,1,Bid,3,0,0,RED);
Exit;
End;
End;


If IsCrossUp Or WasClosedSell=True Then Begin
For cnt=1 To TotalTrades Begin
If OrderValue(cnt,VAL_SYMBOL)=Symbol And
OrderValue(cnt,VAL_TYPE)=OP_SELL Then Begin

CloseOrder(OrderValue(cnt,VAL_TICKET), OrderValue(cnt,VAL_LOTS),
Bid,3,Violet);
WasClosedSell=True;
Exit;
End;
End;


If CurTime-LastTradeTime < 30 Then Begin
Print(«Wait up to 30 seconds please»);
WasClosedSell=True;
Exit;
End;
WasClosedSell=False;
If IsCrossUp Then SetOrder(OP_BUY,Lots,Ask,3,0,0,Green);
End;
End.
 
Может кто ответит?
 
Вот здесь какие-то пробелы стоят
Variables: Ma8Current(0),Ma8Previous(0),Ma8 Previous2(0);
Variables: Ma13Current(0),Ma13Previous(0),Ma13 Previous2(0);


так и надо?
Компилятор не ругается?

 

If CurTime-LastTradeTime < 30 Then Begin
Print(«Wait up to 30 seconds please»);
WasClosedBuy=False;
If IsCrossDown Then Begin

SetOrder(OP_SELL,1,Bid,3,0,0,RED);
Exit;
End;
End;


Проблема здесь - Вы пытаетесь выставить ордер если не прошло достаточно времени с момента последней транзакции. Остальная часть кода аналогична как я понял. А компилятор должен ругаться - уберите пробелы в переменных, например.

Можно так :


If CurTime-LastTradeTime < 30 Then Begin
Print(«Wait up to 30 seconds please»);
WasClosedBuy=False;
Exit;
End;
If IsCrossDown Then Begin
SetOrder(OP_SELL,1,Bid,3,0,0,RED);
Exit;
End;



Удачи.