1CAdmin, для того чтобы сравнить наши результаты, необходимо быть уверенным, что мы считаем на одних и тех же данных. Я так понял, что Вы скачали наши данные кнопкой Download в диалоге Ахива котировок. Вы используете модель по ценам открытия. Символ - EURUSD. Уточните, на каком таймфреме Вы тестируетесь и какие ограничивающие даты используете (если используете)
Котировки скачал через Даунлоад в диалоге Архива котировок. Оптимизация по Ценам Открытия (я только так тестирую). Символ ЕвроБакс. ТАймфрейм 4-часовка. На всем периоде истории. Оптимизация идет очень медленно : 24 прохода за 18 часов. Честно говоря,меня это не может устраивать. Один тест идет относительно быстро : от 20 секунд до 5 минут. Но вот сделать пару тысяч переборов у МТ4 пока что не получается. Что посоветуете ?
Тут трудно советовать. Самый главный совет - оптимизировать работу советника, выявить узкие места в советнике и переписать, оптимизировать работу индикатора.
Очень тяжёлый советник. За 2 часа всего 22 прогона.
Тут трудно советовать. Самый главный совет - оптимизировать работу советника, выявить узкие места в советнике и переписать, оптимизировать работу индикатора.
Очень тяжёлый советник. За 2 часа всего 22 прогона.
Могу прислать вам исходник. Советник, на мой взгляд, - совсем не тяжелый. На самом деле это еще и не советник пока - это универсальный шаблон советника. Слава - могу вам выслать исходник - там всего два правила : вход при пересечении линий индикатора, выход - при пересечении линий индикатора. Почему так медленно идут тесты - для меня остается загадкой. Но, думаю, всем нам нужно узнать причину.
Если у вас остались сомнения в моем коде - напишите здесь, чтобы я выслал вам исходник с описанием.
Могу прислать вам исходник.
Советник, на мой взгляд, - совсем не тяжелый. На самом деле это еще и не советник пока - это универсальный шаблон советника.
Слава - могу вам выслать исходник - там всего два правила : вход при пересечении линий индикатора, выход - при пересечении линий индикатора.
Почему так медленно идут тесты - для меня остается загадкой.
Но, думаю, всем нам нужно узнать причину.
Если у вас остались сомнения в моем коде - напишите здесь, чтобы я выслал вам исходник с описанием.
У тебя вроде индикаторы нестандартные, может дело в них а не в советнике?
Я советник пишу модульно. Каждый модуль(функция) отвечает за одно действие. Мне приходится передвать в функции ссылки на массив. В массиве я держу параметры ордера. Например, у меня есть такая функция :
При каждом баре я выбираю ордера, заношу их данные в массив и проверяю условия. Что-то работает медленно - но вот что - непонятно. Хотя структурно у меня все в порядке, структуру я долго и тщательно отрабатывал. Скорее всего есть что-то, чего я не знаю про МТ4 - какая-нибудь особенность. Давайте доведем это исследование до логического конца и устраним причины. Самым простым было бы, если бы я где-то ошибся. Но вот если МТ4 не тянет - это хуже.
Slawa индикатор смотрел - к нему особых претензий нет. Да и писался он на базе стандартного индикатора. В индикаторе при получении нового бара - рассчитывается только последний бар.
Не зная постановки задачи не берусь судить, насколько оправдана реализация через строковые массивы, но думаю что постоянные преобразования данных в строки и обратно операция весьма затратная. Да и нормализация может оказаться заметной добавкой (а может и нет, проверять надо). Для реалтайма это может заметно не сказываться, а вот в советнике для тестера я сделал бы всё возможное, чтобы отказаться от этих операций или свести их к минимуму. Интересно, чем вызвано желание загнать все параметры ордера в один массив?
Теперь понятна сия "избирательность" ;)))
т.к. обновлялся 203 билд а чуть ранее 202
где и была полная подгрузка...
в Explorer шрифт надо уменьшить на средний.
Спасибо, Olek. Помогло.. :) А MetaQuotes спасибо, за то, что учли мои пожелания по поводу OrderStopLoss( ) и OrderTakeProfit( ) .. ;)
Я так понял, что Вы скачали наши данные кнопкой Download в диалоге Ахива котировок.
Вы используете модель по ценам открытия. Символ - EURUSD.
Уточните, на каком таймфреме Вы тестируетесь и какие ограничивающие даты используете (если используете)
Котировки скачал через Даунлоад в диалоге Архива котировок.
Оптимизация по Ценам Открытия (я только так тестирую).
Символ ЕвроБакс.
ТАймфрейм 4-часовка.
На всем периоде истории.
Оптимизация идет очень медленно : 24 прохода за 18 часов.
Честно говоря,меня это не может устраивать.
Один тест идет относительно быстро : от 20 секунд до 5 минут.
Но вот сделать пару тысяч переборов у МТ4 пока что не получается.
Что посоветуете ?
Очень тяжёлый советник. За 2 часа всего 22 прогона.
Очень тяжёлый советник. За 2 часа всего 22 прогона.
Могу прислать вам исходник.
Советник, на мой взгляд, - совсем не тяжелый. На самом деле это еще и не советник пока - это универсальный шаблон советника.
Слава - могу вам выслать исходник - там всего два правила : вход при пересечении линий индикатора, выход - при пересечении линий индикатора.
Почему так медленно идут тесты - для меня остается загадкой.
Но, думаю, всем нам нужно узнать причину.
Если у вас остались сомнения в моем коде - напишите здесь, чтобы я выслал вам исходник с описанием.
Могу прислать вам исходник.
Советник, на мой взгляд, - совсем не тяжелый. На самом деле это еще и не советник пока - это универсальный шаблон советника.
Слава - могу вам выслать исходник - там всего два правила : вход при пересечении линий индикатора, выход - при пересечении линий индикатора.
Почему так медленно идут тесты - для меня остается загадкой.
Но, думаю, всем нам нужно узнать причину.
Если у вас остались сомнения в моем коде - напишите здесь, чтобы я выслал вам исходник с описанием.
У тебя вроде индикаторы нестандартные, может дело в них а не в советнике?
Каждый модуль(функция) отвечает за одно действие.
Мне приходится передвать в функции ссылки на массив.
В массиве я держу параметры ордера.
Например, у меня есть такая функция :
bool СчитатьПараметрыОрдера(int НомерСоветника, string& OrdParam[]) { OrdParam[0] = DoubleToStr(OrderMagicNumber(),0); OrdParam[1] = OrderComment(); OrdParam[2] = "END"; OrdParam[11]= OrderSymbol(); //Symbol OrdParam[12]= DoubleToStr(OrderType(),0); //cmd OrdParam[13]= DoubleToStr(OrderLots(),1); //volume OrdParam[14]= DoubleToStr(Open[StrToTime(OrdParam[1])],Digits); //price OrdParam[15]= DoubleToStr(0,0); //slippage OrdParam[16]= DoubleToStr(OrderStopLoss(),Digits); //stop-loss OrdParam[17]= DoubleToStr(OrderTakeProfit(),Digits); //take-profit OrdParam[18]= OrdParam[1]; //comment OrdParam[19]= OrdParam[0]; //magic-number OrdParam[20]= DoubleToStr(0,0); //expiration OrdParam[21]= DoubleToStr(Blue,0); //color //OrdParam[22]= DoubleToStr(iBarShift(Symbol(),0,StrToTime(OrdParam[1])),0); //бар, на котором вошли OrdParam[23]= DoubleToStr(OrderOpenPrice(),Digits); //реальная цена открытия OrdParam[24]= DoubleToStr(OrderTicket(),Digits); //номер тикета ордера return(TRUE); }При отправке ордера мне приходится делать преобразования :
int MOrderSend(string OrdParam[]) { string symbol = OrdParam[11]; int cmd = StrToInteger(OrdParam[12]); double volume = NormalizeDouble(StrToDouble(OrdParam[13]),Digits); double price = NormalizeDouble(StrToDouble(OrdParam[14]),Digits); int slippage = StrToInteger(OrdParam[15]); double stoploss = NormalizeDouble(StrToDouble(OrdParam[16]),Digits); double takeprofit = NormalizeDouble(StrToDouble(OrdParam[17]),Digits); string comment = OrdParam[18]; int magic = StrToInteger(OrdParam[19]); datetime expiration = StrToInteger(OrdParam[20]); color arrow_color = StrToInteger(OrdParam[21]); if (ПроверитьОрдер(cmd,price,stoploss,takeprofit)==FALSE) return(-1); LastTradeTime = TimeCurrent(); return ( OrderSend( symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color ) ); }При каждом баре я выбираю ордера, заношу их данные в массив и проверяю условия.
Что-то работает медленно - но вот что - непонятно.
Хотя структурно у меня все в порядке, структуру я долго и тщательно отрабатывал.
Скорее всего есть что-то, чего я не знаю про МТ4 - какая-нибудь особенность.
Давайте доведем это исследование до логического конца и устраним причины.
Самым простым было бы, если бы я где-то ошибся. Но вот если МТ4 не тянет - это хуже.
Да и писался он на базе стандартного индикатора.
В индикаторе при получении нового бара - рассчитывается только последний бар.
Не зная постановки задачи не берусь судить, насколько оправдана реализация через строковые массивы, но думаю что постоянные преобразования данных в строки и обратно операция весьма затратная. Да и нормализация может оказаться заметной добавкой (а может и нет, проверять надо). Для реалтайма это может заметно не сказываться, а вот в советнике для тестера я сделал бы всё возможное, чтобы отказаться от этих операций или свести их к минимуму. Интересно, чем вызвано желание загнать все параметры ордера в один массив?