[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1069

 
goldtrader:

Проведём простейший эксперимент, доказывающий что просадка в отдельной (каждой) сделке на графике баланса/эквити НЕ ОТОБРАЖАЕТСЯ.

Напишем советник из двух строк кода:

Запустим его на D1 графике EURUSD на участке с 1 мая 2010г по 1 августа 2010г. Он должен будет купить евру по цене 1.2200 без стопа и закрыть позицию по тейку по цене 1.3000 Будем наблюдать просадку на графике баланса/эквити и на графике визуализации:

Как видим, на графике визуализации (верхнем на скриншоте) просадка видна, а на графике баланса/эквити её НЕТ. Там всего одна сделка. Посмотрим отчёт тестера:

В отчёте тестера просадка ФИГУРИРУЕТ.

Надеюсь, теперь вопрос снят?

.

Возможно, остался вопрос "ПОЧЕМУ так сделано?" Это уже вопрос не к нам, юзерам, а к разработчикам МТ4. На мой взгляд это неправильно, т.к. на графике баланса/эквити не видны пересиживания.

Александр, большое Вам спасибо! Очень подробно и основательно, премного Вам благодарен за труд. А разработчики МТ4 здесь не отвечают ?
 

Коллеги, может сталкивался кто.

Существует ограничение по количеству файлов, открытых одновременно? 4 все нормально, 5 - открывается но запись в него не идет. Не могу понять в чем дело.

 

Есть проблема. Сделка должна открываться при пробхождении через верхнюю (buy) или нижнюю (sell) границу коридора индикатора.

double barier = 0.08; // собственно, границы относительно

R() - функция индикатора

функция проверки условия прохождения верхней или нижней границы:

int RFilter()

{

if ( R(2)> -barier && R(1) < -barier ) return (-1);

if ( R(2)< barier && R(1) > barier ) return (1);

}

По факту получаеся, что советник открывает позицию сразу при прохождении индикатором границы (без разницы какой). Если вверх - buy, вниз - sell

 
dzhini:

Есть проблема. Сделка должна открываться при пробхождении через верхнюю (buy) или нижнюю (sell) границу коридора индикатора.

...

По факту получаеся, что советник открывает позицию сразу при прохождении индикатором границы (без разницы какой). Если вверх - buy, вниз - sell

Немного увеличьте значение переменной barier
 
costy_:

Вопрос знатокам

Могу ли создать собственный торговый инструмент для тестера?!

Заменить EURUSD30_2.fxt своим или както по другому.

metaquotes\tester\history\EURUSD30_2.fxt

пробовал создать simple_csv2fxt но тестер заменил файл на свой.

Может есть у кого то опыт создания, спасибо.

Есть, есть. И статья хорошая есть на эту тему.
 
Reshetov:
Немного увеличьте значение переменной barier
Не помогло. Могло это возникнуть в связи с ошибкой присвоения знака?
 
dzhini:
Не помогло. Могло это возникнуть в связи с ошибкой присвоения знака?

Можно погадать на кофейной гуще или еще как покамлать, т.к. явно недостаточно информации.

1. Индикатор или осциллятор:

2. Если осциллятор, то имеет ограничения или нет? Если имеет, то какие у него максимум и минимум?

3. Возможно проблемы не в коде вышеприведенной функции, а в коде ее интерпретации?

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

 
Reshetov:

Можно погадать на кофейной гуще или еще как покамлать, т.к. явно недостаточно информации.

1. Индикатор или осциллятор:

2. Если осциллятор, то имеет ограничения или нет? Если имеет, то какие у него максимум и минимум?

3. Возможно проблемы не в коде вышеприведенной функции, а в коде ее интерпретации?

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

Это индикатор вот с такой формулой:

double R(int shift)
{
double coef1 = 100.0 * (iMA(NULL, 0, perfast, 0,MODE_LWMA, PRICE_CLOSE, shift) - iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift)) * iATR(NULL, 0, perfast, shift);
double coef2 = coef1 / iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift) / iATR(NULL, 0, perslow, shift);
double main = (MathExp(2.0 * coef2) - 1.0) / (MathExp(2.0 * coef2) + 1.0);

return (main);

}

Ограничения: (-1;1)

 
dzhini:

Это индикатор вот с такой формулой:

double R(int shift)
{
double coef1 = 100.0 * (iMA(NULL, 0, perfast, 0,MODE_LWMA, PRICE_CLOSE, shift) - iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift)) * iATR(NULL, 0, perfast, shift);
double coef2 = coef1 / iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift) / iATR(NULL, 0, perslow, shift);
double main = (MathExp(2.0 * coef2) - 1.0) / (MathExp(2.0 * coef2) + 1.0);

return (main);

}

Ограничения: (-1;1)

Тогда по идее Ваша функция должна работать правильно по условиям указанным в комментах:

int RFilter()

{

if ( R(2)> -barier && R(1) < -barier ) return (-1); // Короткая поза, если значение индикатора на прошлом баре выше нижнего барьера и на текущем ниже этого самого барьера

if ( R(2)< barier && R(1) > barier ) return (1); // Длинная поза, если значение индикатора на прошлом баре ниже верхнего барьера и на текущем выше этого самого барьера

return(0); // Ничего не предпринимать во всех остальных случаях.

}

 
Reshetov:

Тогда по идее Ваша функция должна работать правильно по условиям указанным в комментах:

int RFilter()

{

if ( R(2)> -barier && R(1) < -barier ) return (-1); // Короткая поза, если значение индикатора на прошлом баре выше нижнего барьера и на текущем ниже этого самого барьера

if ( R(2)< barier && R(1) > barier ) return (1); // Длинная поза, если значение индикатора на прошлом баре ниже верхнего барьера и на текущем выше этого самого барьера

return(0); // Ничего не предпринимать во всех остальных случаях.

}

Но не работает :(
Причина обращения: