Не хочет тестироваться стратегия

 
Написал своою первую систему (учусь ещё) и хочу её посмотреть на графике.

Система такая (чур не смеяться):

/*[[
Name := Work
Author := denis
Lots := 1.00
Stop Loss := 0
Take Profit := 0
Trailing Stop := 0
]]*/
var: PDICurrent(0), PDIPrevious(0), MDICurrent(0), MDIPrevious(0);

If Bars<100 Then Exit; // на графике менее 200 баров - выходим

PDICurrent=iADXEx(13,PRICE_CLOSE,MODE_PLUSDI,0); // значение +DI на текущем баре
PDIPrevious=iADXEx(13,PRICE_CLOSE,MODE_PLUSDI,1); // значение +DI на предыдущем баре
MDICurrent=iADXEx(13,PRICE_CLOSE,MODE_MINUSDI,0); // значение -DI на текущем баре
MDIPrevious=iADXEx(13,PRICE_CLOSE,MODE_MINUSDI,1); // значение -DI на предыдущем баре

If FreeMargin<1000 then Exit; // денег нет - выходим

{

If PDICurrent > MDICurrent and PDIPrevious < MDIPrevious then
SetOrder(OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,RED); // исполняем

Exit;

If PDICurrent > MDICurrent and PDIPrevious < MDIPrevious
then SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED); // исполняем

Exit;
}

Вот тестирую её полоска идёт а сделки не совершаются.
Подскажите пожалуйста, что Я не правильно сделал.
 
Много чего не так.

1. If Bars<100 Then Exit; // на графике менее 200 баров - выходим
Без комментариев. Работать будет, но 100 не равно 200

2. PDICurrent=iADXEx(13,PRICE_CLOSE,MODE_PLUSDI,0); // значение +DI на текущем баре
PDIPrevious=iADXEx(13,PRICE_CLOSE,MODE_PLUSDI,1); // значение +DI на предыдущем баре
MDICurrent=iADXEx(13,PRICE_CLOSE,MODE_MINUSDI,0); // значение -DI на текущем баре
MDIPrevious=iADXEx(13,PRICE_CLOSE,MODE_MINUSDI,1); // значение -DI на предыдущем баре

Ошибки могут быть в коде индикаторов, которых мы не видим. Не факт, что если индикатор рисуется, он и экспертом обрабатывается правильно.

3. If FreeMargin<1000 then Exit; // денег нет - выходим
{

Зачем здесь эта скобка?

4. If PDICurrent > MDICurrent and PDIPrevious < MDIPrevious then
SetOrder(OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,RED); // исполняем

Exit;

После этого Exit никакого кода нет. Программа выйдет БЕЗУСЛОВНО. If нуждается в скобках или begin - end, чтобы включать несколько строк.

Удачи,
Кварк
 
Условия на покупку и продажу абсолютно идентичны.
 
3. If FreeMargin<1000 then Exit; // денег нет - выходим
{
Зачем здесь эта скобка?


Интересно, что по этому поводу говорит MetaEditor?
По моим представлениям при попытке компиляции редактор должен выдать ошибку, а эксперт должен остаться нескомпилированным; и до тестирования вообще дело не должно дойти..

И попутно. Можно ли узнать у производителей прибл. сроки сдачи тестра? (совсем нету сил: МТ3 при 3-х п. спреда тестирует как при двух, причём ошибка блуждающая).
 
Попробуй вот так.

/*[[
Name := Work
Author := denis
Lots := 1.00
Stop Loss := 0
Take Profit :=10
Trailing Stop := 0
]]*/
var: PDICurrent(0), PDIPrevious(0), MDICurrent(0), MDIPrevious(0);

If Bars<100 Then Exit; // на графике менее 200 баров - выходим

PDICurrent=iADXEx(13,PRICE_CLOSE,MODE_PLUSDI,0); // значение +DI на текущем баре
PDIPrevious=iADXEx(13,PRICE_CLOSE,MODE_PLUSDI,1); // значение +DI на предыдущем баре
MDICurrent=iADXEx(13,PRICE_CLOSE,MODE_MINUSDI,0); // значение -DI на текущем баре
MDIPrevious=iADXEx(13,PRICE_CLOSE,MODE_MINUSDI,1); // значение -DI на предыдущем баре


If FreeMargin<1000 then Exit; // денег нет - выходим

If PDICurrent > MDICurrent and PDIPrevious < MDIPrevious then
{
// Alert("PDICurrent=",PDICurrent," PDIPrevious=", PDIPrevious,
// "\nMDICurrent=",MDICurrent," MDIPrevious=",MDIPrevious);
SetOrder(OP_BUY,Lots,Ask, 3, 0, Ask+TakeProfit*Point, RED); // исполняем
Exit;
};

If PDICurrent > MDICurrent and PDIPrevious < MDIPrevious then
{
// Alert("PDICurrent=",PDICurrent," PDIPrevious=", PDIPrevious,
// "\nMDICurrent=",MDICurrent," MDIPrevious=",MDIPrevious);
SetOrder(OP_SELL,Lots,Bid, 3, 0, Bid-TakeProfit*Point, Blue); // исполняем
Exit;
};

Ключевым моментом здесь является одна из ошибок в МТ3: ордера не открываются при некоторых специфических параметрах настройки - в данном случае при нулевом профите. В других случаях профит не должен быть меньше минимально допустимой дистанции, определяемой ДЦ.
Представленный код будет работать, но надо же конечно довести до конца идею (разобраться что там больше-меньше в условиях открытия).
Для бОльшей пользы рекомендую почаще использовать Алерты. Сейчас они за слышами, но если слыши убрать, то будут отображаться текущие значения интересуемых переменных. Удобно при отладке.
Удачи.
 
Разработчикам
Ошибочка - МТ3 и МТ4 используют одни ключи в реестре.
Залез сейчас в редактор МТ3 вспомнить язык, и оказался в папке МТ4.
 
Разработчикам
Ошибочка - МТ3 и МТ4 используют одни ключи в реестре.
Залез сейчас в редактор МТ3 вспомнить язык, и оказался в папке МТ4.

Они используют разные ключи в реестре.
Я не совсем понял что Вы имели в виду "залез сейчас в редактор МТ3 и оказался в папке МТ4".
 
Они используют разные ключи в реестре.
Я не совсем понял что Вы имели в виду "залез сейчас в редактор МТ3 и оказался в папке МТ4".

Я сейчас пользуюсь только МТ4.
Открыл МТ3 и его редактор (по F4) чтобы вспомнить синтаксис языка.
Затем попытался открыть какой нибудь файл.

Открылся директорий внутри инсталляции МТ4.

Делал это на домашней машине,
сейчас проверил на работе, тот же эффект.
 
Открылся директорий внутри инсталляции МТ4.

Спасибо, теперь понятно - проверим.
Причина обращения: