помогите пожалуйста с StrategyTester

 
помогите пожалуйста с StrategyTester
напишу просто, постараюсь без "выпендрежа", но совсем просто не получится, уж простите

освоил пару custom индикаторов, написал юзер функцию изменения стопов, все хорошо. Индикаторы что в гистограмме что в символах показывают то что ожидаю увидеть.

Теперь подобрался к эксперту. Эксперт по сути - тот же индикатор, т.е. я ожидаю увидеть открытие ордеров там где в индикаторе вижу стрелочки или переворот гистограммы. Все ОЧЕНЬ ПРОСТО - модифицированный XO индикатор используется что называется в лоб - чтобы проверить эффективность.

/*[[
Name := XO
Author :=
Link := 1@1.ru
Notes := POINT FIGURES
Lots := 1
Stop Loss := 30
Take Profit := 155
Trailing Stop := 40
]]*/

Defines: BoxSize(15);
var: startflag(0), cnt(0);
var: Step(0);
var: Up(0), Dn(0);
var: Hi(0), Lo(0);
var: mode(0), dummy(0);

var: SellCondition (0), BuyCondition(0);

If Bars<200 then Exit;
If FreeMargin<1000 then Exit;

Step = BoxSize*point;

if startflag<1 then {
Hi=c;
Lo=c;
startflag=1;
};

if c > (Hi+Step) then {
if Dn = 1 then {
BuyCondition = 1; SellCondition = 0;
};
Up=1;
Dn=0;
Hi=c;
Lo=c-Step;
};

if c < (Lo-step) then {
if Up = 1 then {
SellCondition = 1; BuyCondition = 0;
};
Up=0;
Dn=1;
Hi=c+Step;
Lo=c;
};

теперь ВОПРОС - ну совершенно не могу закрыть открытые ордера и открыть новые по условию - т.е. код как бы пишу и ожидаю что будет работать, но при запуске StrategyTester ордера открываются совершенно не там где казалось бы должны.

Ниже кусок кода который закрывает и открывает ордера
помогите понять - что неверно?

if BuyCondition > 0 then {
if OrderValue(cnt,VAL_TYPE) == OP_SELL then {
If CurTime > LastTradeTime + 10 Then {
CloseOrder(OrderValue(cnt,VAL_TICKET),Lots,Ask,3,Violet);
Exit;
};
};
If CurTime > LastTradeTime + 10 Then {
SetOrder(OP_BUY,Lots,Ask,2,Ask-StopLoss*Point,Ask+TakeProfit*Point,Blue);
BuyCondition = 0;
Exit;
};
};
if SellCondition > 0 then {
if OrderValue(cnt,VAL_TYPE) == OP_BUY then {
If CurTime > LastTradeTime + 10 Then {
CloseOrder(OrderValue(cnt,VAL_TICKET),Lots,Bid,3,Violet);
Exit;
};
};
If CurTime > LastTradeTime + 10 Then {
SetOrder(OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,Red);
SellCondition = 0;
Exit;
};
};
 
еще добавлю что я понимаю что дело в задержках
но не знаю что я неверно делаю
когда из эксперта убираю задержки
If CurTime > LastTradeTime + 10 Then {...
то тестер стратегии ставит ордера там где должны быть
... т.е. там где и индикаторы показывают
может быть есть какое-то условие, которые может сигнализировать тестеру стратегий что задержки не использовать?
 
точнее сказать что я ничего уже не понимаю
сделал простейший тест
копия индиктора - в эксперт, (ну конечно подправленная для эксперта) - ладно, не будем открывать и акрывать ордера - просто нарисуем символы SetArrow - вы будете смеяться но индикатор и эксперт рисуют символы в "разных местах"! что не так? кто может разобраться? что делать?

/*[[
Name := XO
Author :=
Link := 1@1.ru
Notes := POINT FIGURES
Lots := 1
Stop Loss := 30
Take Profit := 155
Trailing Stop :=40
]]*/

Defines: BoxSize(15);

var: startflag(0), cnt(0); // &#244;&#235;&#224;&#227;&#232;, &#226;&#241;&#239;&#238;&#236; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#229;

var: Step(0); // &#240;&#224;&#231;&#236;&#229;&#240; &#248;&#224;&#227;&#224; &#226; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#255;&#245; (BoxSize - &#226; &#239;&#243;&#237;&#234;&#242;&#224;&#245;)

var: Up(0), Dn(0); // &#244;&#235;&#224;&#227;&#232; &#228;&#226;&#232;&#230;&#229;&#237;&#232;&#255; &#226;&#226;&#229;&#240;&#245; &#232;&#235;&#232; &#226;&#237;&#232;&#231;
var: Hi(0), Lo(0); // &#239;&#229;&#240;&#229;&#238;&#239;&#240;&#229;&#228;&#229;&#235;&#229;&#237;&#237;&#251;&#229; Hi Lo &#228;&#235;&#255; &#242;&#229;&#234;&#243;&#249;&#229;&#227;&#238; &#225;&#224;&#240;&#224;

var: mode(0), dummy(0);

var: SellCondition (0), BuyCondition(0);

If Bars<200 then Exit;
If FreeMargin<1000 then Exit;

Step = BoxSize*point;

if startflag<1 then { // &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#255; &#228;&#235;&#255; &#239;&#229;&#240;&#226;&#238;&#227;&#238; &#225;&#224;&#240;&#224;
Hi=c;
Lo=c;
startflag=1;
};

if c > (Hi+Step) then {
if Dn = 1 then {
SetArrow(CurTime,Ask,SYMBOL_ARROWUP,Blue);
};
Up=1;
Dn=0;
Hi=c;
Lo=c-Step;
};

if c < (Lo-step) then {
if Up = 1 then {
SetArrow(CurTime,Bid,SYMBOL_ARROWDOWN,Red);
};
Up=0;
Dn=1;
Hi=c+Step;
Lo=c;
};
 
индикатор I-XO
/*[[
Name := XO-I-A-H
Author :=
Link := 1@1.ru
Notes := POINT FIGURES INDICATOR
Separate Window := No
First Color := Blue
First Draw Type := Symbol
First Symbol := 217
Use Second Data := Yes
Second Color := Red
Second Draw Type := Symbol
Second Symbol := 218
]]*/

Input: BoxSize(15);

var: CurrentBar(0);
var: startflag(0), cnt(0), cur(0);

var: Step(0);

var: Up(0), Dn(0);
var: Hi(0), Lo(0);

SetLoopCount(0);

For cnt = 0 To bars {

CurrentBar=bars-cnt;

if startflag<1 then { // &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#255; &#228;&#235;&#255; &#239;&#229;&#240;&#226;&#238;&#227;&#238; &#225;&#224;&#240;&#224;
Hi=c[CurrentBar];
Lo=c[CurrentBar];
startflag=1;
};
cur = c[CurrentBar];
Step = BoxSize*point;

if cur > (Hi+Step) then {
if Dn = 1 then {
setIndexValue(CurrentBar, cur);
};
Up=1;
Dn=0;
Hi=cur;
Lo=cur-Step;
};
if cur < (Lo-Step) then {
if Up = 1 then {
setIndexValue2(CurrentBar, cur);
};
Up=0;
Dn=1;
Hi=cur+Step;
Lo=cur;
};
};
 
эксперт E-XO
/*[[
Name := XO
Author :=
Link := 1@1.ru
Notes := POINT FIGURES
Lots := 1
Stop Loss := 30
Take Profit := 155
Trailing Stop :=40
]]*/

Defines: BoxSize(15);

var: startflag(0);

var: Step(0);

var: Up(0), Dn(0);
var: Hi(0), Lo(0);

If Bars<200 then Exit;
If FreeMargin<1000 then Exit;

Step = BoxSize*point;

if startflag<1 then {
Hi=c;
Lo=c;
startflag=1;
};

if c > (Hi+Step) then {
if Dn = 1 then {
SetArrow(CurTime,Ask,SYMBOL_ARROWUP,Blue);
};
Up=1;
Dn=0;
Hi=c;
Lo=c-Step;
};

if c < (Lo-step) then {
if Up = 1 then {
SetArrow(CurTime,Bid,SYMBOL_ARROWDOWN,Red);
};
Up=0;
Dn=1;
Hi=c+Step;
Lo=c;
};
 
ну и видимо последнее про непонимание - arrows on the chart
strategy tester
arrows on the chart - включаю
SetArrow(CurTime,Bid,SYMBOL_ARROW...) из эксперта рисует символы на графике
arrows on the chart - выключаю
SetArrow(CurTime,Bid,SYMBOL_ARROW...) из эксперта НЕ рисует символы на графике
это нормально? "arrows on the chart" относится к разрешению "рисовать" любые символы из эксперта на графике?
т.е. разрешение "нарисовать символы" для
SetOrder, Modify, CloseOrder, SetArrow, SetText - 4 функции - ничего не пропустил?

(setorder или других команд манипуляций с ордерами как вы заметили в эксперте нет)
 
именно так
 
спасибо! честно... я стараюсь понять хотя и не нашел где написано -догадываюсь по аналогии
но скажите, а что вс таки с экспертом и индикатором, почему на разных барах "рисуют" "сигналы"??
 
DelArrow
еще вы пишите что DelArrow(0,0) удаляет все символы с графика
НЕ удаляет почему... кроме того, "arrow on the chart" относится к SetText или нет? и как удалить последствия SetText - из меню Charts -> Delete All Symbols тоже не удаляет - может надо что-то в другом месте почистить? помогите пожалуйста...
Причина обращения: