![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
leonid553 |
![]()
Сообщение
#1
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
С некоторых пор пришел к выводу, что, например, для меня более целесообразна автоматическая (в т.ч. "портфельная") торговля! Эксперты работают без эмоций, и при моем скромном опыте такая торговля оказывается более выгодной, чем "вручную" !
К сож. мой стаж на форексе - чуть более полутора лет, а вникать в MQL4 я начал всего лишь несколько месяцев назад. Поэтому многие изложенные мысли могут показаться наивными. Но я их не навязываю, - а всего лишь предлагаю к рассмотрению всем, кому интересно. Для начала выложу одно из первых моих "творений" - советник для пары GBPUSD, H1. Сработан при реализации идей Ю.Решетова в адресе: http://www.tradersforum.net.ru/forum/index.php?showtopic=629 При этом в советнике предусмотрен0: 1. Работа по "ЦЕНАМ ОТКРЫТИЯ" баров, и тесты следует делать тоже только в этом режиме! - тест идет доли секунды даже на многолетней истории, и качество модулирования почти не страдает от некорректных котировок! 2. Ограничение по дате использования до 22 июля с.г. 3. Советник находится в рынке постоянно, - т.е. работает не закрытием позиций, а их переворотом! 4. Используется индикатор Стохастик, период которого можно изменять в параметрах. 5. Используется библиотека расчета лотов (ММ), кот. следует положить в папку experts/include 6. Работать строго по паре GBPUSD, H1 В закачке ниже приложена библиотека b-lots, без которой советник не будет работать. Тесты выполнялись на параметрах подобранных на МТ4 Метаквотов Прикрепленные файлы ![]() ![]() |
leonid553 |
![]()
Сообщение
#2
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Я рекомендую делать тесты на МТ4 Метаквотов, т.к. чемпионат Роботов проводится на их котировках.
http://championship.mql4.com/ru/ При указанных ниже параметрах за 2 года истории ----------------------------------------------------------------- Символ GBPUSD Период 1 Час (H1) (2005.05.05 - 2007.04.01) Модель По ценам открытия (быстрый метод на сформировавшихся барах) Параметры : Stochastic_period=6; a=88; b=129; c=103; sl=91; Параметры модуля расчёта лота LotsWayChoice=0; (при =1 =2 =3 - включается ММ ) Lots=0.1; LotsPercent=10; LotsDeltaDepo=500; LotsDepoForOne=500; LotsMax=1000; ------------------------------------------------------------- получены следующие результаты - Начальный депозит 1000 Чистая прибыль 6165 Абсолютная просадка 267 Максимальная просадка 721 Относительная просадка 721 Всего сделок 855 Короткие позиции (% выигравших) 434 (70.05%) Длинные позиции (% выигравших) 421 (72.68%) Прибыльные сделки (% от всех) 610 (71.35%) Убыточные сделки (% от всех) 245 (28.65%) Самая большая прибыльная сделка +330 убыточная сделка -95 Средняя прибыльная сделка +42 убыточная сделка -80 Максимальное количество непрерывных выигрышей (прибыль) =18 (725.03) непрерывных проигрышей (убыток) =5 (-377.81) Средний непрерывный выигрыш 3 непрерывный проигрыш 1 Вот график баланса (эквити): Эскизы прикрепленных изображений |
leonid553 |
![]()
Сообщение
#3
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Для участия в чемпионате Роботов у этого автомата слтшком большая просадка, и график баланса слишком неровный. Нужно "спрямить" график . Не увеличением конечной прибыли, а хотя бы уменьшением относительной просадки.
Повторю свой пост из ветки "Нейрошелл". Идея вот какая. Чтобы поиметь максимальный профит, мы должны прикупить на минимуме, а продать на максимуме цены. Предположим у нас есть некая (апроксимир или иная) функция, описывающая движение цены. Сглаженная. Как на графике ниже. И которая не перерисовывается . Хотя ладно, - пусть она перерисовывается, - но не более чем на последнем баре! Подберем такой индикатор ! Это может быть осциллятор, - под графиком(желт). Либо инертная кривая, - прямо на графике(син). В данном случ. у меня стоит логарифмич. функция от МА-34 Не суть. Но как бестолковая программа подаст нам сигнал на вход? В знач. большинстве случаев нам предлагается входить по направлению индикатора, и еще каким ниб. фильтром . но при этом не гарантируется, - что мы войдем в рынок на переломе цены! В лучшем случае мы застанем половину движения. А между тем, - из графика видно - что пользуясь сигналами (стрелки на графике - ВРУЧНУЮ расставил),мы могли бы до дна вычерпывать движение! Однако, если мы вспомним мaтематику, - то там сказано что вторая производная функции меняет знак на переломах! И не надо никаких больше фильтров! Нужно чтобы программа в режиме "ПО ЦЕНАМ ОТКРЫТИЯ" расчитавала знак второй производной F(x), и при смене знака давала нам вход ! Для МТ4 я вроде реализовал (примитивно)этот алгоритм. ----------------------------------------------------------------------------------- Прежде, чем привести кусочек кода для реализации идеи, отмечу, что я (как сумел) вставил его в исходный код вышевыложенного советника. Подобрал параметры и получил результат за тот же период истории (2 года) - Начальный депозит 1000.00 Чистая прибыль 7007 Абсолютная просадка 232 Относительная просадка 465. Эскизы прикрепленных изображений |
leonid553 |
![]()
Сообщение
#4
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
За тот же период истории (2 года) -
Начальный депозит 1000.00 Чистая прибыль 7007 Абсолютная просадка 232 Относительная просадка 465. Всего сделок 838 Короткие позиции (% выигравших) 424 (69.58%) Длинные позиции (% выигравших) 414 (73.67%) Прибыльные сделки (% от всех) 600 (71.60%) Убыточные сделки (% от всех) 238 (28.40%) Самая большая прибыльная сделка +330 убыточная сделка -95 Средняя прибыльная сделка +43 убыточная сделка -80 Максимальное количество непрерывных выигрышей (прибыль) 15 (674.18) непрерывных проигрышей (убыток) 4 (-338.24) ---------------------------------------------------------------- Как видим - прибыль увеличилась с 6135 до +7007 пипсов а относительная просадка уменьшилась с 731 до 465 !!!!!!!!!!! Вот для сравнения графики балансов до и после реализации идеи: Видно что кривая заметно спрямилась! Эскизы прикрепленных изображений |
leonid553 |
![]()
Сообщение
#5
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
ЧТОБЫ поймать момент входа на переломе кривой индикатора, (а значит и цены) можно задать три точки (по соседним барам ), и по их величине относительно друг друга определить, имеется пик либо впадина на этом участке. Но при этом нет гарантиии, что на следующем баре мы опять получим экстремум ,- уже в другом направлении.
Появилась мысль взять сразу три группы соседних баров, - вычислить среднюю величину для каждой группы, и сравнить эти средние величины между собой, на предмет обнаружения пика или впадины. Например взять бары 0-1-2 и 2-3-4 и 3-4-5 после чего вычислить среднее значение показания индикатора на каждой из этих групп. Тогда имеем: Код double a() { double a1=iCustom(NULL,0,"FTLM-STLM",0,0,0); double a2=iCustom(NULL,0,"FTLM-STLM",0,0,1); double a3=iCustom(NULL,0,"FTLM-STLM",0,0,2); return ((a1+a2+a3)*0.33);} double b() { double b1=iCustom(NULL,0,"FTLM-STLM",0,0,3); double b2=iCustom(NULL,0,"FTLM-STLM",0,0,4); double b3=iCustom(NULL,0,"FTLM-STLM",0,0,5); return ((b1+b2+b3)*0.33);} double c() { double c1=iCustom(NULL,0,"FTLM-STLM",0,0,6); double c2=iCustom(NULL,0,"FTLM-STLM",0,0,7); double c3=iCustom(NULL,0,"FTLM-STLM",0,0,8); return ((c1+c2+c3)*0.33);} После чего, видно, что покупка и продажа соответственно будут : Код // покупка ( a()>b() && a()>c() && c()>b()) // продажа ( a()<b() && a()<c() && c()<b()) Я не знаю, - может специалисты предложат более лучiшее программное воплощение идеи. Здесь использован STLM из цифрового индикатора FTLM-STLM . Добавлю, - что при попытке использовать "чистый" STLM - почему - то глючит алгоритм. Эскизы прикрепленных изображений |
cr@sh |
![]()
Сообщение
#6
|
![]() Группа: Активный участник Сообщений: 155 Регистрация: 29.4.2006 Пользователь №: 105 Спасибо сказали: 0 раз(а) ![]() |
Классная идея ))...к сожалению я не программер но чем смогу если надо будет помогу!...Леня, у меня только одна просьба выложи пожалуйста индюки и осцилятор который у тя на рисунке.
Спасибо |
leonid553 |
![]()
Сообщение
#7
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Да, конечно.
В закачке, - вся группа цифровых индикаторов. Впрочем, эти индикаторы есть на форуме - в ветке "Архив 163 индикаторов". Ниже, - в закачке сглаженный индикатор МА.(что у меня на графике). Из своего опыта отмечу - что наиболее выгодно использовать его на тф Н4 при length=34/55. Параметр NL_length - коэф. сглаживания Параметр Color =1 - ЦВЕТ движения вниз/вверх. Эскизы прикрепленных изображений Прикрепленные файлы ![]() ![]() |
leonid553 |
![]()
Сообщение
#8
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
U. Reshetov , forum MQ :
"А что касаемо граалей, дык тут большого ума не надо. Надо лишь выполнить ряд условий: 1. Система должна открывать позиции либо вообще без стоплоссов, либо со стоплоссами на очень большом расстоянии, так чтобы вероятность их срабатывания была близка к 0 2. Воткнуть мощный фильтр на базе нескольких индикаторов с условиями срабатывания разделенными по логическому И (&&). И вытащить множество входных параметров этих самых индикаторов во внешние настройки МТС, так чтобы за несколько лет исторических данных на тестах открылось всего несколько позиций. 3. Ко всему этому добавить управление капиталом и риском с задранной фракцией." |
leonid553 |
![]()
Сообщение
#9
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Насколько соответствуют действительности эти положения?Попробуем сейчас же "состряпать" на скорую руку такой (ну почти...) "Грааль".
Но при более разумном подходе. Исключим из этих правил пункт № 1. Сделаем Ст/лосс примерно равным Т/профиту. Пусть эти параметры будут примерно = 100 пипсам ! В качестве фильтра возьмем индикатор NonLagMA_v5.rar (см. пост выше). Пусть у нас будет медленная МА и быстрая МА. Вход в BUY - пересечение быстрой МА медленной снизу вверх. Вход в Sell - пересечение быстрой Ма медленной сверху вниз. Для надежности - поставим условие - вход только по тренду! Т.е. когда медленная МА - синяя - только покупаем. Когда медленная МА - красная - только продаем! Эскизы прикрепленных изображений |
leonid553 |
![]()
Сообщение
#10
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Для удобства предусмотрем работу советника по ценам открытия.
Возьмем пару GBPUSD, и тф Н4. тогда получим - Код //+------------------------------------------------------------------+ //| | //| Copyright © 2007, Tradersforum. | //| http://www.tradersforum.net.ru/ | //| Leonid553 | //+------------------------------------------------------------------+ #property copyright "Leonid553 http://www.tradersforum.net.ru/forum/" #property link "http://www.tradersforum.net.ru/" //---- input parameters extern int NL_length=98; extern int NL_l=9; extern double sl = 86; extern double tp = 86; extern double lots = 0.1; extern int MagicNumber = 888; static int prevtime = 0; static int spread = 3; //-- Подключаемые модули -- //#include <b-Lots.mqh> //Переменный лот //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- return(0); } int deinit() { return(0); } int start() { if(Time[0] == prevtime) return(0); prevtime = Time[0]; if(IsTradeAllowed()) { spread = MarketInfo(Symbol(), MODE_SPREAD); } else { prevtime = Time[1]; return(0); } int ticket = -1; int total = OrdersTotal(); if(total<1) { double NLa=iCustom(NULL,0,"NonLagMA_v5",0,NL_l,1,0,0,0,0,0,0); double NLb=iCustom(NULL,0,"NonLagMA_v5",0,NL_l,1,0,0,0,0,0,1); //----------------------------------------------------------------- if ( na()>nb() && nb()>nc()&& NLa >na()&& NLb <na() ) { //покупаем ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, Ask+tp*Point, "ST", MagicNumber, 0, Blue); if(ticket < 0) { Sleep(30000); prevtime = Time[1]; } } if ( na()<nb() && nb()<nc() && NLa <na()&& NLb >na()) { // продаем ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, Bid-tp*Point, "ST", MagicNumber, 0, Red); if(ticket < 0) { Sleep(30000); prevtime = Time[1]; } } } return(0); } //---------------------------------------------------------------------------- double na() {double NL0=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,0); double NL1=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,1); return ((NL0+NL1)*0.5);} double nb() {double NL2=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,2); double NL3=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,3); return ((NL3+NL2)*0.5);} double nc() {double NL4=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,4); double NL5=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,5); return ((NL4+NL5)*0.5);} // покупка ( na()>nb() && na()>nc() && nc()>nb()) // продажа ( na()<nb() && na()<nc() && nc()<nb()) |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 15.3.2025, 7:34 |