![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну, все же... Вот несколько тестов:
- Настройки по умолчанию (без оптимизации, WriteCSV - True) : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv
- Оптимизация установлена на True, PeriodMin на 20 и PeriodMax на 20 : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv
Первый вариант дает согласованные значения (результаты CSV-файла и экрана совпадают). Это нормально, потому что оба получены из одних и тех же переменных. Но во втором случае результаты opti умножены почти на 10 по сравнению с результатами экрана. Хотя, в конечном итоге, они должны привести к одинаковым результатам...
В любом случае, не стоит торопиться, возможно, со временем я пойму, в чем дело. Спасибо за вашу помощь, Младен.Привет Airquest,
Спасибо за очень интересную альтернативу тестеру стратегий... очень креативный и талантливый кусок кодинга с вашей стороны...!
Я немного поиграл с вашим индикатором...
И похоже, что у вас есть две разные переменные для итогов...
Одна для обычного прогона = TotalTrades...
И одна для оптимизационного прогона = TotalTrades...
Однако... ваши Комментарии показывают только ваш обычный прогон TotalTrades...
Идите вперед и добавьте ваш оптимизированный... totalTrades... к вашим комментариям и посмотрите, решит ли это головоломку...
Надеюсь, это ответит на ваш вопрос о том, почему разница между показаниями на экране... и итогами в электронной таблице...
Надеюсь, это поможет,
Роберт
Привет Airquest,
Спасибо за очень интересную альтернативу тестеру стратегий... очень креативная и талантливая работа с вашей стороны...!
Я немного поиграл с вашим индикатором...
И похоже, что у вас есть две разные переменные для итогов...
Одна для обычного прогона = TotalTrades...
И одна для оптимизационного прогона = TotalTrades...
Однако... ваши Комментарии показывают только ваш обычный прогон TotalTrades...
Идите вперед и добавьте ваш оптимизированный... totalTrades... к вашим комментариям и посмотрите, решит ли это головоломку...
Надеюсь, это ответит на ваш вопрос о том, почему разница между показаниями на экране... и итогами в электронной таблице...
Надеюсь, это поможет,
РобертНе уверен, что конечные результаты будут правильными. Проблема в том, что, показывая общее количество сделок, поступающих от функции opti, вы можете увидеть, хорошо ли работает функция или нет. Также не уверен, как вернуть более одного параметра из функции double (нужно вернуть баланс и коэффициент выигрыша). Но главная причина в том, чтобы увидеть, что есть разница в результатах и, следовательно, что-то должно быть не так в функции...
Привет всем, я только что написал этот пользовательский индикатор, основанный на RSI.
У меня есть идея использовать его в советнике. Мне нужна помощь, чтобы написать его...
Это стратегия только на покупку.
Покупаем при каждом сигнале на повышение... Закрывать по сигналу вниз.
В идеале советник должен увеличивать размер лота при каждом последующем сигнале вверх без закрытия. (с максимумом, конечно).
Индикатор работает путем нанесения стрелки на график каждый раз, когда RSI пересекает установленный уровень ниже/выше.
arrow_rsi.mq4
Не уверен, что конечный результат будет правильным. Проблема в том, что, показывая общее количество сделок, поступающих от функции opti, можно увидеть, хорошо ли работает функция или нет. Также не уверен, как вернуть более одного параметра из функции double (нужно вернуть баланс и коэффициент выигрыша). Но главная причина в том, чтобы увидеть, что есть разница в результатах и, следовательно, что-то должно быть не так в функции...
airquest
Чтобы "вернуть" из функции столько параметров, сколько вам нужно, передайте параметр по ссылке в функцию. Что-то вроде этого :
double a;
double b;
double c = testFunction(a,b);
double tectFunction(double& _a,double& _b)
{
_a = 1;
_b = 2;
return(_a+_b);
}
после чего a и b будут присвоены значения 1 и 2 функцией testFunction (неявно "возвращая" 3 значения в данном примере - я использовал имена _a и _b в функции только для того, чтобы показать, что они не обязательно должны иметь одинаковые имена при передаче по ссылке, иначе в этом нет необходимости).
Не уверен, что конечный результат будет правильным. Проблема в том, что, показывая общее количество сделок, поступающих от функции opti, можно увидеть, хорошо ли работает функция или нет. Также не уверен, как вернуть более одного параметра из функции double (нужно вернуть баланс и коэффициент выигрыша). Но главная причина в том, чтобы увидеть, что есть разница в результатах и, следовательно, что-то должно быть не так в функции...
Привет, Эйрквест,
Из того, что я вижу... ваш индикатор, кажется, работает просто отлично.
Я все еще думаю, что это проблема "отображения значений"... а не проблема расчета.
Вот что я вижу, что происходит в индикаторе...
У программы есть 2 варианта - 1) Обычный запуск 2) Оптимизационный запуск.
Это НЕ эксклюзивные варианты "либо/либо"...
Когда Оптимизация НЕ выбрана... программа выполняет только Обычный прогон...
Когда выбрана оптимизация... программа все равно выполняет обычный прогон... и... затем выполняет оптимизационный прогон... таким образом, она получает оба значения...
Однако... только значения из нормального прогона отображаются на экране Comments... и совсем не отображаются значения оптимизации.
Прилагается мой тест, показывающий, что отображаемые на экране значения оптимизации совпадают со значениями электронной таблицы...
Это показывает, что все ваши расчеты в порядке...
Также похоже, что для получения окончательных значений оптимизации используется последняя запись в электронной таблице...
Я также рекомендую запускать его без загрузки других графиков/индикаторов... и использовать только несколько выбранных значений для тестирования за раз.
У меня запущено 20+ графиков... и MT4 становится нереагирующим, так как он выполняет расчеты для этого индикатора...
Лучше использовать чистую настройку MT4 для проведения тестов оптимизации...
Но хорошая новость в том, что... это не блокирует мою систему, и я могу заниматься другими делами, пока индикатор подсчитывает цифры и составляет отчет.
Тем временем... насколько я могу судить по приведенным ниже снимкам экрана... ваш индикатор, похоже, работает просто отлично...
BTW... это удивительная часть кодирования... Большое спасибо, что поделились им...!
Надеюсь, это поможет,
Роберт
Привет, Airquest, Из того, что я вижу... ваш индикатор, кажется, работает просто отлично.
Не за что, спасибо большое за ваши слова. Идея действительно в том, чтобы заменить оптимизацию тестера стратегий mt4 (которая, на мой взгляд, отстойная и слишком медленная) для бэктестинга простых стратегий. И да, вам нужно немного подождать, пока она загрузится и выполнит расчет, но, по моим наблюдениям, это уже быстрее и удобнее, чем обычная оптимизация.
Но, я все же думаю, что с индикатором есть проблема и он работает неправильно. Замена текста на экране результатами, полученными в ходе оптимизации, совершенно не показывает, верны или неверны эти результаты. Это все равно, что красить ржавый автомобиль.
Я думаю, что функция opti дает неправильные результаты. На вашем скриншоте видно, что результаты в CSV дают 5'307 сделок. Это очень много. Это зависит от того, сколько баров у вас на экране, но не может быть, чтобы стратегия дала 5'307 сделок. Чтобы убедиться в этом, не обязательно считать стрелки, можно уменьшить количество баров для тестирования, как я сделал на этом скриншоте (я установил 100 баров):
Здесь видно, что для 100 баров было заключено всего 10 сделок с 4 победителями (считая стрелки), в то время как результаты opti показывают 89 заключенных сделок. Таким образом, на основе визуального бэктеста, результаты экрана верны (для лучшего периода, о котором говорит opti), в то время как CSV неверен. Таким образом, это показывает, что мы не должны доверять результатам CSV ни для подсчета сделок, ни для определения того, какие настройки являются наилучшими.
Поэтому я решил решить проблему более простым способом. Я сделал простой индикатор (прилагается), который показывает на экране результаты, получаемые из функции Optimization double и из функции Start int (основной расчет). Таким образом, вам не нужно писать CSV, чтобы увидеть, что оба результата отличаются.
Основываясь на этом индикаторе, мой (простой) вопрос заключается в следующем: ПОЧЕМУ НА ЗЕМЛЕ ДВА ТОЧНО ТАКИХ ЖЕ РАСЧЕТА (один в функции Start и другой в функции Optimization double) дают РАЗНЫЕ РЕЗУЛЬТАТЫ? Если кто-то может помочь мне понять это, это было бы замечательно, потому что я действительно не понимаю этого. Насколько я понимаю, эти две функции абсолютно одинаковы и должны давать одинаковые результаты. Большое спасибо.
PS : индикатор все еще немного медленный, и вам, вероятно, придется подождать несколько секунд, пока он покажет результаты. Хотя, он будет воспроизводить звук, когда появятся результаты.
Здравствуйте, Airquest,
Я попробовал ваш "Образец теста", но не смог заставить его работать. Я посмотрел на код и обнаружил, что в нем удалено более 400 строк... поэтому я оставил его в покое.
Я вернулся к тестированию вашего оригинального кода... и я думаю, что начинаю понимать, что вы говорите о проблеме "слишком большого количества сделок"...
Чтобы сделать тестирование простым и быстрым... я тестировал, используя только Bands... и минимизировал настройки (Bands 10 и Bands 20), чтобы иметь только два (2) прогона, чтобы быстрее увидеть результаты.
Я также сосредоточился на "BarsToCount", так как это должно быть напрямую связано с количеством сделок...
Хотя я не нашел ответов... возможно, у меня есть еще несколько подсказок для вас...
"BarsToCount"... кажется, не работает...
Я запустил ваш код с 1 баром, 2 барами... и 100 барами назад...
И у всех были точно такие же результаты... чего не должно быть... поскольку большее количество баров должно быть равно большему количеству сделок... а меньшее количество баров должно быть равно меньшему количеству сделок.
Я приложил снимки экрана трех прогонов, которые я сделал... изменив только "BarsToCount"...
Возможно, эта подсказка поможет вам отследить другие проблемы... Удачи в поиске ответов.
Надеюсь, это поможет,
Роберт
Наконец-то мне удалось сделать рабочую версию. Теперь результаты opti корректны и соответствуют результатам на экране. Я просто отбросил двойную функцию и поместил все это в функцию Start. Так что теперь у вас есть только один выбор: запустить программу в режиме тестера (тогда она будет использовать настройки по умолчанию) или в режиме оптимизатора (который не будет ничего строить, а только запишет CSV-файл). После выполнения оптимизации вы можете вернуться в режим тестера и проверить правильность результатов.
Пожалуйста, дайте мне знать, если вы обнаружите какую-либо проблему, лучше в PM, так как мы не хотим портить эту тему. Ребята, большое спасибо за вашу помощь. Этот форум замечательный, люди мотивируют и помогают друг другу (большую часть времени), и это причина, по которой я публикую здесь. Теперь давайте начнем бэктестинг![](https://c.mql5.com/forextsd/smiles/smile.png)
Привет Airquest,
Роберт, спасибо за помощь. Смотрите версию, которую я разместил выше, теперь она должна работать.
PS : Чтобы ограничить количество баров, вам нужно установить UseAllBars в False. Возможно, вы этого не заметили.
С уважением.
Привет, Эйрквест,
Молодец, что нашел и заставил его работать...!
Буду с нетерпением ждать, чтобы поиграть с ним на этой неделе...
Спасибо и берегите себя,
Роберт