Rever27 Опубликовано 19 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 19 мая, 2015 Под тестированием я понимаю более серьезные тесты с помощью программы TickStory и котировок Дукаскопи. http://tradelikeapro.ru/tickstory-lite/Качеством теста в 90% не занимаюсь, но где то читал, что терминал поддерживает hst файлы определенного размера. Раз тест не проходит за 1 проходку, значит размер котировок превышен. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
bellduke Опубликовано 19 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 19 мая, 2015 Я пользуюсь стандартным тестированием МТ4, с подгруженной от Альпари историей по М1.При тестах стоит тестирование по каждому тику. Это не тестирование, это попытка измерить отрезком трубы в 1 м длинну и ширину спичечного коробка. От реального тестирования с тиковыми данными будут отличия в разы. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 19 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 19 мая, 2015 Я пользуюсь стандартным тестированием МТ4, с подгруженной от Альпари историей по М1.При тестах стоит тестирование по каждому тику. Это не тестирование, это попытка измерить отрезком трубы в 1 м длинну и ширину спичечного коробка. От реального тестирования с тиковыми данными будут отличия в разы. Даже не дневках ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
bellduke Опубликовано 19 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 19 мая, 2015 ]Даже не дневках ? Зачем мучить себя вопросами когда есть бесплатный ТиксториЛайт, и тестируйте на здоровье с высоким качеством, а про встроенный тестер просто забудьте, на нем имеет смысл только первый раз советник прогнать чтобы в принципе понять - он сразу сливает или хоть немного зарабатывает. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 20 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 20 мая, 2015 Господа не подскажите - для тиковой истории под один инструмент за один год, какой объем дискового пространства нужен ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 20 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 20 мая, 2015 от 1 до 2 Гиг (зависит от пары) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
f999145 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Ребят, подскажите. Тестирую трендовый советник,собственной разработки. В мт4 с его историей на днях. Купил помощнее комп, но даже с ним тестирование занимает 90 часов, правда загрузка проца на 15%.возможно так долго из-за того что торговля построена на отложенных ордерах. Но все же есть ли патчи или может метод какой, что бы ускорить тестирование советника? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 (изменено) Ребят, подскажите. Тестирую трендовый советник,собственной разработки. В мт4 с его историей на днях. Купил помощнее комп, но даже с ним тестирование занимает 90 часов, правда загрузка проца на 15%.возможно так долго из-за того что торговля построена на отложенных ордерах. Но все же есть ли патчи или может метод какой, что бы ускорить тестирование советника? Вы хорошие и правильные вопросы задаете, себе и нам.Первое самое Важное оптимизация кода советника, постарайтесь убрать все лишние, графические обьекты, функции комментариев и прочее не относящееся к торговой стратегии.Второе постарайтесь уменьшить в коде количество циклов и проверок, старайтесь применять if () else , в место , if () if(), при большом выборе используй те оператор switch и так далее ...Старайтесь не использовать код на каждом тике который должен срабатывать только при услових ...По поводу железаВажны частота камня, ссд накопитель, и оперативная память, наверно оперативная память самая важная так как должна быстро пулять блоки инструкций...Операционка 64 бита, вот наверно и все мож что и забыл.... Изменено 21 мая, 2015 пользователем voldemar227 6 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 f999145 чуть расширю ответ voldemar227. Бывает анализируют историю закрытых ордеров на каждом тике (это про лишние циклы)или используют требовательные к ресурсам индикаторы, типа рекурсивного ТМА - Вы как тренд определяете?В общем от реализации кода зависит, у меня были случаи когда после оптимизации кода тестирование происходило в 100-и раз быстрее без потери качества так сказать... 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
f999145 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Тренд определяю на пробой минимума и максимума, и еще есть дополнительный фильтр на выключения советника при явном флете по iMA.Я как то не задумывался по поводу того, что он каждый тик что-то проверяется. Попробую подключить условие появления не просчитанных баров.Я его в индикаторах только применял, может и в советнике прокатит. Кстати никто не пробывал, сработает? Важны частота камня, ссд накопитель, и оперативная память, наверно оперативная память самая важная так как должна быстро пулять блоки инструкций...Операционка 64 бита, вот наверно и все мож что и забыл.... Оперативкой я закупился вдоволь, создал рам-диск, скорость просчета увеличилась в четыре раза до ранее озвученных 90 часов.Правда сейчас терминал, спустя 20 часов оптимизации, сократил оставшееся время до 9 часов... не знаю в чем причина, но приятно. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Тренд определяю на пробой минимума и максимума, и еще есть дополнительный фильтр на выключения советника при явном флете по iMA.Я как то не задумывался по поводу того, что он каждый тик что-то проверяется. Попробую подключить условие появления не просчитанных баров.Я его в индикаторах только применял, может и в советнике прокатит. Кстати никто не пробывал, сработает? Важны частота камня, ссд накопитель, и оперативная память, наверно оперативная память самая важная так как должна быстро пулять блоки инструкций...Операционка 64 бита, вот наверно и все мож что и забыл.... Оперативкой я закупился вдоволь, создал рам-диск, скорость просчета увеличилась в четыре раза до ранее озвученных 90 часов.Правда сейчас терминал, спустя 20 часов оптимизации, сократил оставшееся время до 9 часов... не знаю в чем причина, но приятно. Каков алгоритм оптимизации ?Генетический или полный ? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 f999145 Вот процедурка на определение нового бара:bool NewBar(){ static datetime new_Bar; if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход new_Bar = Time[1];return(true); 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
f999145 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Тренд определяю на пробой минимума и максимума, и еще есть дополнительный фильтр на выключения советника при явном флете по iMA.Я как то не задумывался по поводу того, что он каждый тик что-то проверяется. Попробую подключить условие появления не просчитанных баров.Я его в индикаторах только применял, может и в советнике прокатит. Кстати никто не пробывал, сработает? Важны частота камня, ссд накопитель, и оперативная память, наверно оперативная память самая важная так как должна быстро пулять блоки инструкций...Операционка 64 бита, вот наверно и все мож что и забыл.... Оперативкой я закупился вдоволь, создал рам-диск, скорость просчета увеличилась в четыре раза до ранее озвученных 90 часов.Правда сейчас терминал, спустя 20 часов оптимизации, сократил оставшееся время до 9 часов... не знаю в чем причина, но приятно. Каков алгоритм оптимизации ?Генетический или полный ? Генетический. Это его такая особенность!?Добавлено: 21-05-2015 16:03:21f999145 Вот процедурка на определение нового бара:bool NewBar(){ static datetime new_Bar; if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход new_Bar = Time[1];return(true); Здорово!!! так все просто ))) Спасибо. Сейчас заценим )))) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Генетический. Это его такая особенность!?Генетический быстрее, просто возникло сомнение, может Вы на полную оптимизацию решились... :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Тренд определяю на пробой минимума и максимума, и еще есть дополнительный фильтр на выключения советника при явном флете по iMA.Я как то не задумывался по поводу того, что он каждый тик что-то проверяется. Попробую подключить условие появления не просчитанных баров.Я его в индикаторах только применял, может и в советнике прокатит. Кстати никто не пробывал, сработает? Важны частота камня, ссд накопитель, и оперативная память, наверно оперативная память самая важная так как должна быстро пулять блоки инструкций...Операционка 64 бита, вот наверно и все мож что и забыл.... Оперативкой я закупился вдоволь, создал рам-диск, скорость просчета увеличилась в четыре раза до ранее озвученных 90 часов.Правда сейчас терминал, спустя 20 часов оптимизации, сократил оставшееся время до 9 часов... не знаю в чем причина, но приятно. Каков алгоритм оптимизации ?Генетический или полный ? Генетический. Это его такая особенность!?Добавлено: 21-05-2015 16:03:21f999145 Вот процедурка на определение нового бара:bool NewBar(){ static datetime new_Bar; if (new_Bar == Time[1]) return(false); //Если бар не закрыт - выход new_Bar = Time[1];return(true); Здорово!!! так все просто ))) Спасибо. Сейчас заценим )))) Надежней и практичней будет так void new_bar(bool &fl) { static datetime time=0; if(NewBar==-1){fl=true; return;} if(time==0) { time=iTime(_Symbol,NewBar,0); fl=false; } if(time!=iTime(_Symbol,NewBar,0)) { time=iTime(_Symbol,NewBar,0); fl=true; return; } fl=false; } Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Надежней и практичней будет так Извините за оффтоп. voldemar227 поясните для интересующихся, в чём преимущество и заодно нужно людям растолковать назначение переменной NewBar - без этого кодом пользоваться нельзя, или ошибаюсь? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Надежней и практичней будет так Извините за оффтоп. voldemar227 поясните для интересующихся, в чём преимущество и заодно нужно людям растолковать назначение переменной NewBar - без этого кодом пользоваться нельзя, или ошибаюсь? Вы не ошибаетесь я забыл добавить еще код Данный фрагмент ставится во входных параметрах С помощью этого кода мы можем выбрать в настройках советника на каком таймфреме учитывать появление нового бара, например мы торгуем на М30 но определенные действия нужно сделать приприходе нового 4х часового бара или нового дня.enum tf { Not_Used =-1, Current=0, M1=1, M5=5, M15=15, M30=30, H1=60, H4=240, D1=1440};input tf NewBar=Current; bool nb_flag=false; // флаг который будет получать значение и проверять будет новый бар на каждом тикеДалее в он тик вызывается функция new_bar(nb_flag); // переменная по ссылке получает значение true - пришол новый бар, false - - нового бара нет см функцию тело функцииvoid new_bar(bool &fl) // принимаем по ссылке переменную { static datetime time=0; // создадим статическую переменную для хранения времени if(NewBar==-1){fl=true; return;} // если у нас в настройках советника трейдер выбрал Not_Used значит мы вообще не учитываем появление нового бара и по умолчанию наша переменная получает значение труе, затем выход из функции if(time==0) // Если советник только что стартовал и наша статическая переменная пуста то заполним её значением времени а нашему флагу переданному по ссылке присвоим значение фалсе { time=iTime(_Symbol,NewBar,0); fl=false; } if(time!=iTime(_Symbol,NewBar,0)) // Если пришол новый бар { time=iTime(_Symbol,NewBar,0); // запомним время его открытия fl=true; // заполним переменную параметром труе return; // оборвем и выйдем из функции } fl=false; // в любом другом случае вернем фалсе } 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 voldemar227 да так значительно лучше. Но насчёт надёжности: именно из-за iTime моя сова на реале пропускает сделки, т.к. МТ не желает обновлять котировки других ТФ автоматически, поэтому нужно или держать открытым график другого ТФ или танцевать с бубном.Мы уже обсуждали этот вопрос и пришли к заключению, что для надёжности следует пользоваться функциями текущего ТФ, а приход бара на другом ТФ можно рассчитать математически одной строчкой... if (MathMod(Time[0], NewBar*60 ) == 0 ) Alert("Новый бар ",EnumToString(NewBar)); Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 voldemar227 да так значительно лучше. Но насчёт надёжности: именно из-за iTime моя сова на реале пропускает сделки, т.к. МТ не желает обновлять котировки других ТФ автоматически, поэтому нужно или держать открытым график другого ТФ или танцевать с бубном.Мы уже обсуждали этот вопрос и пришли к заключению, что для надёжности следует пользоваться функциями текущего ТФ, а приход бара на другом ТФ можно рассчитать математически одной строчкой... if (MathMod(Time[0], NewBar*60 ) == 0 ) Alert("Новый бар ",EnumToString(NewBar)); Эта функция работать правильно не будет, могу аргументировать и доказать, в ней как минимум 2 ошибки, программная и логическая и наверно есть третья ошибка которая выскочит только на демо и реале. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 21 мая, 2015 Ну логическая - понятно этот пример придумал на ходу и, конечно, нужны доп. проверки, а "программной" не вижу, даже не знаю, что Вы имеете в виду... в скрипте работает на ура...Вот скрипт на проверку ф-ции iTime:#property script_show_inputsenum tf { Current=0, M1=1, M5=5, M15=15, M30=30, H1=60, H4=240, D1=1440};input tf NewBar=Current; datetime dt;void OnStart(){ dt = iTime(_Symbol,NewBar,0); Alert("Последний бар ",EnumToString(NewBar)," по версии iTime ", TimeToStr(dt));}Если не менять ТФ запустить скрипт и в настройках взять другой ТФ, то выдает результат печальный, правда на второй раз уже верные - успевает подкачать... В принципе если регулярно обращаться к другому ТФ, то наверно работать будет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
f999145 Опубликовано 22 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 22 мая, 2015 Надежней и практичней будет так Извините за оффтоп. voldemar227 поясните для интересующихся, в чём преимущество и заодно нужно людям растолковать назначение переменной NewBar - без этого кодом пользоваться нельзя, или ошибаюсь? Вы не ошибаетесь я забыл добавить еще код Данный фрагмент ставится во входных параметрах С помощью этого кода мы можем выбрать в настройках советника на каком таймфреме учитывать появление нового бара, например мы торгуем на М30 но определенные действия нужно сделать приприходе нового 4х часового бара или нового дня.enum tf { Not_Used =-1, Current=0, M1=1, M5=5, M15=15, M30=30, H1=60, H4=240, D1=1440};input tf NewBar=Current; bool nb_flag=false; // флаг который будет получать значение и проверять будет новый бар на каждом тикеДалее в он тик вызывается функция new_bar(nb_flag); // переменная по ссылке получает значение true - пришол новый бар, false - - нового бара нет см функцию тело функцииvoid new_bar(bool &fl) // принимаем по ссылке переменную { static datetime time=0; // создадим статическую переменную для хранения времени if(NewBar==-1){fl=true; return;} // если у нас в настройках советника трейдер выбрал Not_Used значит мы вообще не учитываем появление нового бара и по умолчанию наша переменная получает значение труе, затем выход из функции if(time==0) // Если советник только что стартовал и наша статическая переменная пуста то заполним её значением времени а нашему флагу переданному по ссылке присвоим значение фалсе { time=iTime(_Symbol,NewBar,0); fl=false; } if(time!=iTime(_Symbol,NewBar,0)) // Если пришол новый бар { time=iTime(_Symbol,NewBar,0); // запомним время его открытия fl=true; // заполним переменную параметром труе return; // оборвем и выйдем из функции } fl=false; // в любом другом случае вернем фалсе } Спасибо, у меня так же получилось. ))))Я потестил. неодназначно. Иногда время показывается меньше, иногда надолго зависает. попробую запустить сразу три варианта, и посмотреть что будет )))Кто кого, так с сказать ) Ссылка на сообщение Поделиться на другие сайты More sharing options...
voldemar227 Опубликовано 22 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 22 мая, 2015 Ну логическая - понятно этот пример придумал на ходу и, конечно, нужны доп. проверки, а "программной" не вижу, даже не знаю, что Вы имеете в виду... в скрипте работает на ура...Вот скрипт на проверку ф-ции iTime:#property script_show_inputsenum tf { Current=0, M1=1, M5=5, M15=15, M30=30, H1=60, H4=240, D1=1440};input tf NewBar=Current; datetime dt;void OnStart(){ dt = iTime(_Symbol,NewBar,0); Alert("Последний бар ",EnumToString(NewBar)," по версии iTime ", TimeToStr(dt));}Если не менять ТФ запустить скрипт и в настройках взять другой ТФ, то выдает результат печальный, правда на второй раз уже верные - успевает подкачать... В принципе если регулярно обращаться к другому ТФ, то наверно работать будет. if (MathMod(Time[0], NewBar*60 ) == 0 )Программная ошибка:Time[0] имеет тип данных datatime это раньше был тип данных int , получается что Вы строку типа "0000.00.00 00:00" делите на число, как так? Если уж и городить костыли то правильнее будет так if (MathMod((double)Time[0], NewBar*60 ) == 0 ) .Логическая ошибка : Comment(MathMod(1432281600,3600 ));1432281600 это количество секунд и значат 8:00 22.05.2015г3600 это 1 час в секундах 60мин * 60 секЯ Вашу формулу перевел в другой вид .теперь смотрим при выполнении MathMod(1432281600,3600 ) == 0 оно же MathMod((double)Time[0], NewBar*60 ) == 0 у нас равенство будет верно только в том случае если NewBar*60 будет равно нашему таймфрему на который установлен советник. так как Time[0] вернет время открытия бара текущего периода.Функция iTime(_Symbol,NewBar,0); работает стабильно, сбой может быть только в случае если символ для функции берется с не открытого ранее графика... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 22 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 22 мая, 2015 Программная ошибка:Time[0] имеет тип данных datatime это раньше был тип данных int , получается что Вы строку типа "0000.00.00 00:00" делите на число, как так? Вы меня удивляете. datatime это целое 8 байтовое число, а Вы пишите про строку! Тем более это на практике работает, а не теоретически. Но соглашусь с Вами, что явное преобразование типов всё-таки необходимо. Логическая ошибка :Логическая ошибка проявляется только когда текущий ТФ длиннее выбранного пользователем. поэтому нужна доп. проверка.ЗЫ: если Вам нравится работа ф-ции iTime - прекрасно, я обратил внимание на иногда проявляющуюся нестабильность. Писал для других, Вас считаю достаточно компетентным. Ссылка на сообщение Поделиться на другие сайты More sharing options...
AndreyGold Опубликовано 22 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 22 мая, 2015 Под результаты тестирования в МТ4, написано несколько утилит, некоторые из которых (например ReportManager) позволяют видеть результаты мультивалютного тестирования за выбранный промежуток времени. Но при этом если в советники используется манименеджемент, "завязанный" каким то образомна размере счета, то при таком мультивалютном "тестировании", этот момент считается криво. То есть рассчет лота идет не от общего депо, а от результатов по одной валютной паре из этого отчета.Как-то можно (кроме ручного перерасчета в экселе), этот нюанс учесть и увидеть корректные результаты (то есть увидеть результаты мультивалютного тестирования с учетом манименеджемента от общего размера счета)? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 22 мая, 2015 Поделиться Тестирование советников - тема для программистов Опубликовано 22 мая, 2015 AndreyGold На кой вам нужно тестировать Сов с ММ? Чтобы видеть красивый рост графика?Все тесты всегда делаются со стандартным лотом. Просадка высчитывается делением значения максимальной на начальный депозит. Этих данных вполне достаточно, чтобы иметь представление о просадке, доходе сета. далее на калькуляторе высчитывается соотношение лота в депо (0.01 на 500 тугриков), и после этого уже только прикручивается ММ для этого соотношения. 5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти