К разработчикам OrderModify (error 1) - Глюки в истории или перегрев Процессора? . . . - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В дополнение: +1 во второй строке, пожалуй, лишняя. Просто, при переходе на 5 знак некоторое время назад, я обнаружил, что корректно работающий ранее код, стал выдавать ошибки ( в тестере №: 1, 130) и решил заложиться на все возможные причины. Сейчас, прогнав на истории, убедился, что достаточно условие:
А вот замечание относительно первой строки остаётся в силе, вот пример из тестера: при Delta=1:
А вот тот же эксперт при Delta=0:
Дело в том, что в основе Советника лежит продвижение стопов относительно цены 1-го бара по MA MAX и MA MIN цен. Поэтому двигаючтя оба уровня (TP\SL). В случае широкодиапазонной свечи срабатывает TP или SL и программа не ждет, когда цены вернуться назад - т.е. "шпилька" или "шип" такому Советнику не страшны - т.к. биение цены на 0-м баре с широким диапазоном не имеет значения. Разумеется это дает некоторое запаздывание, но зато стабильно работает. Что касается Ошибки error 1 - ваш совет очень помог. Огромное Спасибо - на промежутке истории с 2003 по середину 2009 ни одной ошибки error 1, Однако появилось 3 ошибки error 130 которых раньше не было, но на 5 лет тестирования это мелочь - откорректируем. Если Вам любопытно привожу функцию модификации позиций в прикрепленном файле.
P.S. Чтоб у вас все было и вам за это ничего не было.
Ошибка 1 чаще всего возникает при попытке изменения стопа на такую же величину. Чтобы этого не случалось добавляйте условие:
где NewSL - новое значение стопа
OldSL - OrderStopLoss()
Прекрасно об этом знаю и использую - вы невнимательно прочли предыдущие публикации. Modify Error 1 - это следствие появления в котировках 5-го знака. Ошибка modify error 1 возникает именно на тестере стратегий и именно в OrderModify(). Прекрасно корректируется (error 1 исчезает совсем) через такую операцию (Спасибо Valmars'у за полезные советы и консультацию):
SellStopLoss=NormalizeDouble((SellStopLoss-Point),Digits);//Воизбежание ошибок с 5-м знаком
SellTakeProfit=NormalizeDouble((SellTakeProfit+Point),Digits);//добавим смещение на 1 пункт.
OrderModify(OrderTicket(),OrderOpenPrice(),SellStopLoss,SellTakeProfit,0,Red); //для Короткой
BuyStopLoss=NormalizeDouble((BuyStopLoss+Point),Digits);//Воизбежание ошибок с 5-м знаком
BuyTakeProfit=NormalizeDouble((BuyTakeProfit-Point),Digits);//добавим смещение на 1 пункт.
OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopLoss,BuyTakeProfit,0,Blue); //для Длинной
Спасибо Вам за участие.
P.S. Чтоб у вас все было и вам за это ничегг не было.
В дополнение: +1 во второй строке, пожалуй, лишняя. Просто, при переходе на 5 знак некоторое время назад, я обнаружил, что корректно работающий ранее код, стал выдавать ошибки ( в тестере №: 1, 130) и решил заложиться на все возможные причины. Сейчас, прогнав на истории, убедился, что достаточно условие:
А вот замечание относительно первой строки остаётся в силе, вот пример из тестера: при Delta=1:
А вот тот же эксперт при Delta=0:
Доброго времени суток! По поводу error 130 - я тут потестил Советника на старой (до 2005 года) истории и на разрывах, а также на очень вялом рынке и получил от 20 до 100 error 130 на разных инструментах (Правдо менять таймфреймы не пробовал). В общем так родилась поправка, которая напрочь убила error 130. Возможно не самое лучшее решение, но оно неплохо работает. А решение вот такое (Не самое изящное):
SellStopLoss=NormalizeDouble((StaticPriceClose+Step),Digits); //Короткий LOSS идет за ценой.
if (SellStopLoss<NormalizeDouble((ASKPrice+Spread+StopShift),Digits)) //Если стопы слишком близко к текущей цене
{SellStopLoss=NormalizeDouble((ASKPrice+Spread+StopShift),Digits);} //тогда они принудительно раздвигаются шире.
SellTakeProfit=NormalizeDouble((StaticPriceClose-(Step*2)),Digits); //Короткий PROFIT идет перед ценой.
if (SellTakeProfit>NormalizeDouble((ASKPrice-Spread-StopShift),Digits)) //Если стопы слишком близко к текущей цене
{SellTakeProfit=NormalizeDouble((ASKPrice-Spread-StopShift),Digits);}//тогда они принудительно раздвигаются шире.
BuyStopLoss=NormalizeDouble((StaticPriceClose-Step),Digits); //Длинный LOSS идет за ценой.
if (BuyStopLoss>NormalizeDouble((BIDPrice-Spread-StopShift),Digits)) //Если стопы слишком близко к текущей цене
{BuyStopLoss=NormalizeDouble((BIDPrice-Spread-StopShift),Digits);} //тогда они принудительно раздвигаются шире.
BuyTakeProfit=NormalizeDouble((StaticPriceClose+(Step*2)),Digits); //Длинный PROFIT идет перед ценой.
if (BuyTakeProfit<NormalizeDouble((BIDPrice+Spread+StopShift),Digits)) //Если стопы слишком близко к текущей цене
{BuyTakeProfit=NormalizeDouble((BIDPrice+Spread+StopShift),Digits);} //тогда они принудительно раздвигаются шире.
StaticPriceClose - цена закрытия Первого бара (Или любого другого если нужно).
Step - Сдвиг для SL\TP ордеров (вычисляет каждый для себя - посвоему) заранее приведенный к виду 0,0xxxx.
StopShift - Необходимый отступ от текущей цены по MarketInfo(CurrentSymbol,MODE_STOPLEVEL) заранее приведенный к виду 0,0xxxx.
CurrentSymbol \ BIDPrice \ ASKPrice \ Digits - вроде бы и так понятно зачем.
Spread - Спред по MarketInfo(CurrentSymbol,MODE_SPREAD) заранее приведенный к виду 0,0xxxx.
Хотя всего-то и разница в 3-7 пунктов, по сравнению с вариантом без учета Спреда, но ни следа не оставляет от error 130. Хотя надо еще потестить. . .
P.S. Чтоб у вас все было и вам за это ничего не было.
Приветствую всех интересующихся!
Если нет глюков в истории - то может есть в тестере стратегий. Как объяснить такое поведение?
Или такое. . . Открытие происходит по несуществующей цене? И закрытие - по той цене. которой не было. . .
Остается еще много вопросов . . . Когда известно, что Slippage=0.0. (Цена только по заявке - никаких отклонений).
Также известно, что проверка (строго больше '0' - ошибка в неправильной или пустой цене исключена) и нориализация цен (по переменной 'Digits' для каждого инструмента) проводится как надо. Каким образом ведет себя тестер - неясно . . . Жду мнений. Заранее Спасибо!
P.S. Чтоб у вас все было и вам за это ничего не было.
Ошибка 1 появляется, когда вы пытаетесь изменить уровень стопа или профита не изменив его значения.
А на картинках всё правильно.
1. Учтите, что на графике вы видите цены бидовые, а бай совершается по аскам
2. Походу на картинках произошло закрытие по стопу (тралу)
3. Насчет температуры процессора - поставьте нормальное охлаждение, чтобы в тестах было не больше 50-55 градусов
Ошибка 1 появляется, когда вы пытаетесь изменить уровень стопа или профита не изменив его значения.
А на картинках всё правильно.
1. Учтите, что на графике вы видите цены бидовые, а бай совершается по аскам
2. Походу на картинках произошло закрытие по стопу (тралу)
3. Насчет температуры процессора - поставьте нормальное охлаждение, чтобы в тестах было не больше 50-55 градусов
1. Спасибо, я об этом знаю.
2. Да именно по тралу и что это меняет?
3.Легко сказать - нормальное охлаждение - для AMD X3-го это проблемма т.к. X3 серия (3 ядра) вся дико греется. А тактовый генератор работает с температурой 80 градусов (номинальной) т.к. для Gigabyte'овских матерей это нормальная температура генератора. Вопрос остался открытым - может ли перегрев искажать результаты тестов?
4.Был 3 раза за год такой случай: после зависания терминала и аварийного (принудительного) закрытия - системные часы отставали на 2 часа или убегали вперед также на 2 часа. Могло ли это быть следствием перегрева генератора или это терминал скосил системное время в винде?
За любую инфу заранее Спасибо!
P.S. Чтоб у вас все было и вам за это ничего не было.
1. Спасибо, я об этом знаю.
2. Да именно по тралу и что это меняет?
3.Легко сказать - нормальное охлаждение - для AMD X3-го это проблемма т.к. X3 серия (3 ядра) вся дико греется. А тактовый генератор работает с температурой 80 градусов (номинальной) т.к. для Gigabyte'овских матерей это нормальная температура генератора. Вопрос остался открытым - может ли перегрев искажать результаты тестов?
4.Был 3 раза за год такой случай: после зависания терминала и аварийного (принудительного) закрытия - системные часы отставали на 2 часа или убегали вперед также на 2 часа. Могло ли это быть следствием перегрева генератора или это терминал скосил системное время в винде?
За любую инфу заранее Спасибо!
P.S. Чтоб у вас все было и вам за это ничего не было.
Именно по тралу, это меняет всё. В условиях гэпа в тестере закрывается всё по стопу, а в реале закрывается всё по реальной цене. Прочитайте клиентское соглашение.
Очень сильно сомневаюсь, чтобы после или вовремя перегрева искажались результаты тестов. Это чисто мое мнение.
Это просто кривые ручки. При тралении необходимо проводить нормализацию значений цены.
Не надо. Терминал сам нормализует. Но вот менять цену на 0,01 пункта не стоит, да.
Не надо. Терминал сам нормализует. Но вот менять цену на 0,01 пункта не стоит, да.
Доброго времени суток!
В продолжение темы: при переходе на с 4-х знаков на 5 и обратно только одна конструкция оказалась работоспособной на всех инструментах от 2-х до 5 знаков. Проверял на 5 валютных спотах и 5 кроссах. Здесь задается необходимая точность в виде константы - без привлечения переменной среды Digits. Возможно и с ней будет нормально (если заменить внешнюю ConstantDigits на терминальную Digits) т.к. ее сделали внешней для экпериментирования на тестере стратегий. А по поводу
терминал сам все нормализует
сомневаюсь, что это всегда именно так. Нормализует да, но на тестере стратегий - похоже не всегда. Следующий вариант кода (В прикрепленном файле) опускает стопы для короткой или поднимает для днинной позиции - по команде. Этот вариант кода пока работает безотказно.
P.S.Чтоб у вас все было и вам за это ничего не было.
Нормализует да, но на тестере стратегий - похоже не всегда.
Через раз?! =)
Я бы исходил из того, что нормализует всегда. Но иногда проявляется какой-то другой эффект.
Следующий вариант кода (В прикрепленном файле) опускает стопы для короткой или поднимает для днинной позиции - по команде. Этот вариант кода пока работает безотказно.
P.S.Чтоб у вас все было и вам за это ничего не было.
Спасибо, я без стопов торгую. У меня синтетика. Там стопы не поставишь.
Глянул функцию. Слишком громозко. =(
В не последнюю очередь, из-за избытка NormalizeDouble. Ошибка с кодом 1, кстати, не фатальна. Лучше на нее наплевать, чем такой код городить, а потом где-то в нем чуток ошибиться с тяжелыми последствиями.