| / | Статьи |
Cтатьи
Торговые системы
Нестандартная автоматическая торговля
Авторизуйтесь или зарегистрируйтесь , чтобы добавить новую статью
|
Нестандартная автоматическая торговля [ en ]ВведениеНасколько реально можно успешно и комфортно торговать, используя торговую платформу МТ4, и не слишком обременяя себя, при этом, скрупулезным анализом рынка? Возможно ли практически реализовать такую торговую систему? Пожалуй - да! Особенно в плане автоматической торговли! Возможности MQL4 позволяют это сделать. Описанная ниже автоматическая торговая система обладает хорошей повторяемостью. И вполне по силам для реализации даже тем, кто только начинает знакомиться с основами написания экспертов. Сама же система практически полностью срисована из окружающего
нас мира. Жизнь, гармонично развиваясь, диктует нам свои законы.
Все мы в детстве, на природе наблюдали такую картину: муравьи,
облепив со всех сторон, например, соломинку тянут её в муравейник.
Причем, каждый муравей по отдельности тянет соломинку в свою
сторону. Однако, в конечном итоге соломинка непостижимым образом
движется в сторону муравейника! Загадка природы? Попробуем
смоделировать ситуацию. На торговой платформе. Нестандартная автоматическая системаПредположим, мы имеем некую автоматическую торговую систему. Профитную. При этом, система удовлетворяет следующим условиям:
Практически получилось, что такая система дает за год не менее +3000 пунктов профита даже без включения блока Money Management. Далее, мы включаем эту систему в, так называемом, реверсном режиме. Иначе говоря, теперь она будет работать следующим образом:
А теперь посмотрим, что же у нас получилось? При одновременном включении обоих систем - прямой и реверсной, мы будем иметь в сумме двойную прибыль. При этом, системы осмысленно, не вслепую, работают во встречных режимах, т.е. друг против друга! Уменьшая суммарный убыток, - текущую относительную просадку. Почему системы работают осмысленно, а не вслепую? Да потому, что реверсная система, за счет иных подобранных статических параметров, уже через три-четыре сделки после начала работы будет торговать с некоторым сдвигом по времени и по цене! Относительно прямой системы. Используя, при этом, тот же алгоритм входа в реверсном режиме. Но общая, суммарная прибыль на счете будет у нас поступательно расти! Думаю,что это очевидно. Так как обе системы, как прямая, так и реверсная, оптимизированы на профитную работу. Более того, текущий убыток одной версии практически постоянно будет компенсироваться текущей прибылью другой версии! Таким образом, мы получаем максимальную прибыль при минимальной просадке. Некоторый недостаток такой торговли - увеличение залога. Но можно ли это назвать недостатком? Фактически, здесь работают две независимые торговые системы - прямая и реверсная. И, конечно, залог будет двойным. А вот что касается рисков, то они сильно уменьшаются! Именно в этом и предполагаю конечный смысл идеи. Не столько увеличить прибыль, сколько свести к минимуму просадку. Но одно влечет за собой другое. И, повторюсь, суммарная прибыль при такой торговле поступательно растет. А значит, мы смело можем теперь подключить блок Money Management . На сайте MQL4.community имеется широкий выбор различных экспертов. В том числе и советники, удовлетворяющие условиям, перечисленным в начале статьи. Было бы желание. А рынок заставляет нас ставить новые задачи и искать различные, нестандартные решения этих задач! Обнаружились и возможности для дальнейшего поиска. Для реализации идеи и последующих экспериментов в качестве основы был взят советник Юрия Решетова Artificial Intelligence (Исскусственный Интеллект). Описанный ранее в этом же разделе (смотрите статью Ю.Решетова "Как найти прибыльную торговую стратегию". С некоторыми изменениями и дополнениями. В частности, предусмотрен вызов иного базового индикатора для работы Перцептрона. А также, предусмотрены некоторые дополнительные условия для открытия и последующего сопровождения позиций. Вот некоторые результаты эксперимента, полученные при тестировании пары GBPUSD на таймфрейме H1. Исходный депозит - 10000 единиц. 2.5-летняя история, с января 2005г. по май 2007г. В прямой версии за этот период наблюдалось 250 сделок. В реверсной - 360 сделок. Число сделок различно за счет того, что уровень стоплосса при оптимизации оказался разным по каждой версии. Чистая прибыль примерно равна +10000 в обоих случаях. При работе 0.1-лотом, без подключения блока Money Management. Отношение прибыльных сделок к убыточным, примерно, 3:2 в обоих версиях. Графики балансов (эквити) прямой и реверсной версий по истории выглядят так, - см. рисунок: Легко видеть, что в значительном большинстве случаев убыточные сделки прямой версии компенсируются прибыльными сделками версии реверсной. И наоборот, убыточные участки реверсной версии покрываются прибыльными участками версии прямой. Более того! Там, где на одном графике наблюдается "флет", - на другом графике идет подъём! В итоге получаем максимальную суммарную прибыль при минимальном риске, т.е. при минимальной просадке. Нетрудно свести историю сделок в Excel и построить результирующий график, наглядно демонстрирующий суть идеи. Следующий шаг - это установка блока Money Management. Мы вправе ожидать, что при такой торговой системе установка этого блока значительно улучшит конечные результаты. По таким критериям, как прибыль, просадка и комфортность торговли. В прямом и реверсном вариантах я предусмотрел вызов библиотеки расчета лотов "b-lots" по версии И.Кима. Легко вставляется в исходный код. И работает очень прилично: http://codebase.mql4.com/ru/311 При тестировании использовал фракционно-пропорциональный метод расчета лотов ( LotsWayChoice=2 ). Который дает разумную, минимальную просадку с относительно хорошими прибыльными выходами ( Райан Джонс, "Сделай миллионы, играя числами" ). Результаты получились неплохими. По сравнению с иными методами расчета лотов. Которые зачастую показывают заоблачную прибыль, при такой-же, заоблачной просадке. На той же истории, с января 2005г. по май 2007г. Результаты тестирования при тех же внешних параметрах, что и ранее: Реверсная версия:
Прямая версия:
Графики балансов - на рисунке: Эти графики, также, наглядно демонстрируют, как текущие убытки
прямой версии компенсируются прибылью реверсной версии. Комфортность
такой торговли, я думаю, не вызывает сомнения. Практическая реализацияДля примера и последующих начальных экспериментов привожу код реверсной версии. Которая работает "против" прямой версии авторского варианта советника "AI" Ю.Решетова. Прямую же версию и её описание можно взять по ссылке: http://codebase.mql4.com/ru/756 Кроме того, в прилагаемом к моей статье файле, имеется индикатор Перцептрон (автор - NoName с Украины, г. Кременчуг). Позволяющий визуально контролировать текущую работу советников, прямого и реверсного. И заранее знать, в какую сторону перевернется, либо откроется новая позиция! Понятно, что значения весовых коэффициентов X1-X4 индикатора Перцептрон следует установить равными соответствующим значениям советников. Пример для реверсной версии - на графике:
Специально для тех, кто только начинает знакомиться с MQL4, я постарался максимально полно снабдить код реверсной версии комментариями по работе советника. Показания перцептрона при работе этой реверсной версии выводятся на график в левом верхнем углу: //+------------------------------------------------------------------+ //| ArtificialIntelligenceRevers.mq4 | //| Copyright й 2006, Yury V. Reshetov | //| Modifed by Leonid553 | //| http://www.tradersforum.net.ru/ | //| | //+------------------------------------------------------------------+ #property copyright "Copyright й 2006, Yury V. Reshetov ICQ:282715499" #property link "http://reshetov.xnet.uz/" //---- input parameters extern int x1 = 88; extern int x2 = 172; extern int x3 = 39; extern int x4 = 172; // StopLoss level extern double sl = 50; extern double lots = 0.1; extern int MagicNumber = 808; static int prevtime = 0; static int spread = 3; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { Comment(perceptron()); // Ждем, когда сформируется новая свеча // Если появляется новая свеча, то проверяем возможность сделки 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; // check for opened position // сопровождение открытой позиции : int total = OrdersTotal(); for(int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); // check for symbol & magic number //проверяем символ и магик-номер if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { int prevticket = OrderTicket(); // long position is opened if(OrderType() == OP_BUY) // если открыта длинная позиция и ... { // check profit // и текущий профит больше величины =(стоплосс плюс спред) и ... if(Bid > (OrderStopLoss() + (sl * 2 + spread) * Point)) { if(perceptron() > 0) { // и перцептрон больше нуля , то переворачиваемся в Селл // reverse ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3, Ask + sl * Point, 0, "AI", MagicNumber, 0, Red); Sleep(30000); if(ticket < 0) { prevtime = Time[1]; } else { OrderCloseBy(ticket, prevticket, Blue); } } else //если перцептрон меньше нуля, то подтягиваем стоплосс на расстояние =sl //от текущей цены { // trailing stop if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - sl * Point, 0, 0, Blue)) { Sleep(30000); prevtime = Time[1]; } } } // short position is opened } else { // если открыта короткая позиция и ... // check profit if(Ask < (OrderStopLoss() - (sl * 2 + spread) * Point)) { // текущий профит больше величины =(стоплосс плюс спред) и ... if(perceptron() < 0) { // и перцептрон меньше нуля, то переворачиваемся в Бай // reverse ticket = OrderSend(Symbol(), OP_BUY, lots * 2, Ask, 3, Bid - sl * Point, 0, "AI", MagicNumber, 0, Blue); Sleep(30000); if(ticket < 0) { prevtime = Time[1]; } else { OrderCloseBy(ticket, prevticket, Blue); } } else //если перцептрон больше нуля то, подтягиваем стоплосс на расстояние =sl //от текущей цены { // trailing stop if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + sl * Point, 0, 0, Blue)) { Sleep(30000); prevtime = Time[1]; } } } } // exit return(0); } } //******************************************************************** // check for long or short position possibility // изначальный вход в рынок: if(perceptron() < 0) { // если перцептрон меньше нуля, то открываем длинную позицию : //long ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, 0, "AI", MagicNumber, 0, Blue); if(ticket < 0) { Sleep(30000); prevtime = Time[1]; } } else // если перцептрон больше нуля, то открываем короткую позицию: { // short ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, 0, "AI", MagicNumber, 0, Red); if(ticket < 0) { Sleep(30000); prevtime = Time[1]; } } //--- exit return(0); } //+------------------------------------------------------------------+ //| The PERCEPRRON - a perceiving and recognizing function | //+------------------------------------------------------------------+ double perceptron() { double w1 = x1 - 100.0; double w2 = x2 - 100.0; double w3 = x3 - 100.0; double w4 = x4 - 100.0; double a1 = iAC(Symbol(), 0, 0); double a2 = iAC(Symbol(), 0, 7); double a3 = iAC(Symbol(), 0, 14); double a4 = iAC(Symbol(), 0, 21); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); } //+------------------------------------------------------------------+} Замечу, однако, что изначальная суть описанной торговой тактики вовсе не в этом конкретном советнике. А напротив, во взаимодействии прямой и реверсной версий любого подходящего эксперта. В соответствии с условиями, изложенными в начале статьи. И здесь возможны различные варианты. Реверсных версий можно предусмотреть несколько. Изготовленных и оптимизированных по различным критериям. В соответствии с исходным алгоритмом прямой версии. Выбор, при этом, достаточно широк. Продолжая развивать идею, можно предложить провести на графиках баланса линии поддержки и сопротивления. Либо наложить на графики баланса индикатор МА или любой иной, подходящий. В этом случае, по сигналам индикаторов возможно будет в некоторых пределах автоматически манипулировать запрещением сделок по каждой версии. Думаю, что программно это реализуемо. Но это в перспективе. ЗаключениеПредвижу возражения скептиков. А не случится ли так, что обе версии одновременно начнут работать в убыток? Что-ж, возможно такое и произойдет в редких, исключительных случаях. Но не более того - "нет в мире идеала". Однако, при практически случайных входах обе версии работают, всё-таки, по сигналам одного индикатора. И, повторюсь, во встречных режимах, друг против друга! Объединив обе версии в один советник, мы получим неплохой инструмент для последующей организации портфельной торговли. И для дальнейших экспериментов. Предупреждение:
все права на данные материалы
принадлежат MetaQuotes Software Corp. Полная или частичная перепечатка запрещена.
andrey.sitaev писал(а): Полностью согласен с написанным. Леонид, правильно ли я понял, что в Вашей МТС 5 настроечных параметров, которые определяют логику входов-выходов - x1...x4 и sl? Подозреваю, Вам пришлось немало поэкспериментировать с их комбинацией дабы добиться относительно плавного роста доходности каждой из подсистем. Тривиально - доходность двух доходных и, в идеале, слабо коррелированных систем будет, в общем случае, еще более плавной. Простите за полу-офф: какой смысл выкладывать результаты настроенной на истории системы? Вы проводили вневыборочные (форвардные) тесты? ..... Попытайтесь, пожалуйста, разубедить меня - очень хочется легких денег! Прошу прощ. за задержку с ответом. Экмпериментировать долго не пришлось. 30-ти минутная оптимизация дала такие параметры. Форвард не проводил. Еще раз повторюсь, что главная идея - вовсе не этом конкретном советнике. А в обьединении двух различных (а лучше - почти противоположных) торговых тактик в один советник. Чтобы текущие убытки одной тактики компенсировалсиь текущим профитом другой тактики. А конкретное исполнение идеи может быть любым....
13.02.2010 18:52 leonid553
Pyh писал(а):Что касается содержательной части, то очевидно, что из двух убыточных систем не сделать одной прибыльной, как их не складывай. Не имеет значения, в фазе или противофазе они будут работать. Эквити можно сгладить, это очевидно, но она скорее всего пойдёт вниз, хоть и будет гладкой.
Если, предположим, у меня есть 2 прибыльные системы, как их не складывай, они и будут прибыльными . Полностью согласен с написанным. Леонид, правильно ли я понял, что в Вашей МТС 5 настроечных параметров, которые определяют логику входов-выходов - x1...x4 и sl? Подозреваю, Вам пришлось немало поэкспериментировать с их комбинацией дабы добиться относительно плавного роста доходности каждой из подсистем. Тривиально - доходность двух доходных и, в идеале, слабо коррелированных систем будет, в общем случае, еще более плавной. Простите за полу-офф: какой смысл выкладывать результаты настроенной на истории системы? Вы проводили вневыборочные (форвардные) тесты? Торговали в реальном времени по этой системе? Иначе я, к сожалению, не могу углядеть смысла в написанном - равно как и в 99.9% прочих выложенных советниках с результатами прогонов на истории. Такие результаты, как правило, вовсе не коррелируют с результатами торговли в реальном времени, это уже столько раз обсуждалось. Попытайтесь, пожалуйста, разубедить меня - очень хочется легких денег!
11.01.2010 14:18 andrey.sitaev
Ksch писал(а): Идея хороша. А можно ли её использавать скажем так. Есть советник и нужен антисоветник что ли или этот переписать так, что бы новый советник выставлял ордера с точностью наоборот от оригинала? Трудно сказать. В каждом конкретном случае нужно смотреть индивидуально.
08.11.2008 13:03 rid
Идея хороша. А можно ли её использавать скажем так. Есть советник и нужен антисоветник что ли или этот переписать так, что бы новый советник выставлял ордера с точностью наоборот от оригинала?
04.09.2008 06:34 Ksch
Идея конечно интересная, но реализация не соответствует ей.
Выходные значения персептрона сильно зависит от внешних переменных Х. Соответственно если эксперт зеркально реагирует на выходные данные, то при оптимизации подбираются зеркальные значения Х. Получается что при запуске AI и AI revers на одном фин. инструменте они оба открывают позиции в одном направлении. Если даже результаты оптимизации получились не зеркальными что обычно связано с неточностью работы ГА, то это всё равно, что поставить 2 советника AI с разными параметрами оптимизации и магическим числом. В общем, для полноценной реализации этой идеи вход должен быть другим. И, наверное, следует поручить одному советнику открывать прямую и реверсную позицию и контролировать их в отдельности.
24.03.2008 17:08 Ugar
leonid553 писал(Р°): Ramil. Выполняю Вашу рекомендацию. Ниже графики балансов, выполненные при использовании Обьединенной версии! Автор Обьединенной версии - NoName ( Украина, Кременчуг ) Это опытный, сырой ещё образец и в наст. время дорабатывается. май 2005 - июлнь 2007, нач. депо = 10000, лот=0.1, без ММ Прямая версия: Прибыль=8470 макс. просадка=870 относ. просадка=750 Реверсная версия: Прибыль=9980 макс. просадка=730 относ. просадка=490 ----------------------------------------------------- Обьединенный режим: Прибыль=17090 макс. просадка=980 относит. просадка=460 Прошу обратить внимание на относительную просадку в обьединенном режиме!
1. ну если есть графики должен быть и эксперт! 2. Если бы были четкие правила начала тренда и конец тренда и начало флета и конец флета, Соресов бы развелось !! А так на форексе только одна проблема: "Быть или не быть? ", точнее: "на отскок или на пробой", а если ставить и туда и обратно, то лучше никуда не ставить !
20.10.2007 13:58 dimeon
Можно сделать такую систему из двух одинаковых советников с
разными входными параметрами. См. примечание Решетова Вопрос по прямой и обратной версии AI
29.08.2007 11:44 usdjpy
Pyh писал(а): Это только так кажется на первый взгляд. На самом деле из двух
убыточных можно сделать одну прибыльную и из двух прибыльных
можно сделать убыточную.Что касается содержательной части, то очевидно , что из двух убыточных систем не сделать одной прибыльной , как их не складывай. Не имеет значения , в фазе или противофазе они будут работать. Эквити можно сгладить , это очевидно , но она скорее всего пойдёт вниз , хоть и будет гладкой. Если , предположим , у меня есть 2 прибыльные системы , как их не складывай , они и будут прибыльными .
31.07.2007 16:58 SK.
okfx писал(а):
А почему никто не обратил внимание, что советник работает не по индюку PerceptronIndicator_AC, как описано в статье, а по АС...Или никто не тестил советника? Поскольку по АС советник сливает при любых раскладах. К тому же начинающим несколько сложно переделать эту досадную неточность.
Не совсем понятен вопрос. Индикатор предназначен только для визуального контроля по текущей ситуации. И для анализа по истории. В советнике АС использован точно такой-же перцептрон. Один к одному. Что же касается слива, - то это не совсем так! Для работы с советниками типа AI, я думаю , нужен некоторый навык. Я приобрел такой навык, - скрупулезно разобрав каждую строку кода. Вник в условия открытия и сопровождения сделок, в схему работы перцептрона. Экспериментировал с вызовом различных индикаторов. Менял структуру перцептрона. Выявлял закономерности. Изменял условия входа и сопровождения. Например, выяснилось, что при вызове Стохастика (в перцептрон) советник лучше не использовать при трендовом рынке. Т.к. в силу структуры этого индикатора он лучше работает при хорошем флете. А вот реверсная версия с вызовом стохастика дает гораздо лучший результат при тренде, чем прямая! И использовать результаты Оптимизации ,я думаю, нужно с разумным подходом. Не бросаться сразу на самый прибыльный вариант. Ю. Решетов достаточно толково описал на своем сайте, - как это делать. Чтобы добится результата на Форексе нужно потратить время. Не 10-20 мин. в день. А по меньшей мере, - несколько часов ежедневно! После всех исследований получается, что советники типа AI Ю.Решетова вполне способны после оптимизации "держать" прибыльные параметры в течение недели и чуть более! Неоднократно проверялось в Онлайне ! По ссылке ниже - выложил скальперный вариант прямой и реверсной версий с вызовом Стохастика : http://www.tradersforum.net.ru/forum/index.php?showtopic=1030&st=50
15.07.2007 14:52 leonid553
|