MQL4 - automated forex trading   /  

Code Base

Code Base  Советники  CyberiaTrader Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код

Этот индикатор для
MetaTrader 4

Мобильный трейдинг!
Купите лицензию и торгуйте мобильно

Имя:
CyberiaTrader [ en | cn ]
Автор: OpenStorm (20.07.2006 15:51)
Рейтинг: 7.6
Скачано: 27014
Скачать:
 CyberiaTrader.mq4 (52.1 Kb) View
   

    Профессиональный советник для торговли на валютах со cпредом в 2 пункта на минутных интервалах. Особенно хорошо проявляет себя на флетовых рынках с хорошими объемами. Релизованы собственные технологии ведения торговли: работа по кросс-курсам, автоматический расчет лотов по заданному риску, работа с несколькими валютами, автоматическое определение периода моделирования, автокорреляция величины стоп-лосс с заданным коэффициентом доверия рынку и многое другое. Советник реализует технологию пипсования, технологию определения теневого стоп-лосса...

    Советник может показывать результаты от 100 до 300% в день с настройками по умолчанию. Ранее советник распространялся моей компанией только коммерческим клиентам. Сейчас я думаю, некоторые его идеи будут полезны многим. Скажу сразу - эту версию на реал не ставьте, или используйте только на флете на свой страх и риск.

107 комментариев: 1 2 3 4 5 6 7 8 9 10 11   Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий
GeMeL писал(а):
... В чем же в конце концов причина?
Причина - падение объемов (которые включают брокеры для борьбы с механикой на коротких интервалах). Рецепт лечения - переход на более высокие периоды (уменьшение профитности, но механика становится менее чувствительна к объемам). На реалах нужно комбинировать переходы на более высокие периоды и уменьшение риска при увеличении депозита. Тут правда просили брокеров не обсуждать, но именно в этом и есть причина. При обращении к брокеру вам могут рассказать много сказок про хеджирование, рынок и т.д.. При работе на больших периодах с про-версией идет индикатор (который в демо не включен), позволяющий включать блокировки советника для торговли только по рынку на больших периодах. Думаете просто так у нас появились теневые стопы?
23.08.2006 16:58 OpenStorm
Доброго дня суток,
появилась вот у меня пара вопросов по поводу... Пробовыл я тестить CyberiaTrader демо-версию на разных брокерах и на разных режимах, да вот никак не могу получить сколько-нибудь положительный результат. Первый эксперимент был MIG, около трех недель, М1. Вначале поднялся довольно быстро с 10к до 60к, потом все слил к черту. Потом пробовал на Space FX, NEXTT, FXDD с регулярным сливом. Перешел на часовые тики - результат тот же. Один инструмент или несколько, с новостями или без - то же самое. Только Crown с однопиповым спредом пока в порядке, но не нравится мне он по другим причинам. Оптимизация стопов тоже не помогает. Советник постоянно открывает ордеры в сторону, противоположную тому, куда показывает тот же MACD, ну и вылетает по стопу в минус. Даже CyberiaTraderPro (демо, была доступна одно время на сайте разработчиков) делает то же самое. В чем же в конце концов причина?
23.08.2006 16:52 GeMeL
// Функцию подключить надо к EnterMarket (вход в рынок):

// Добавить в глобальные переменные
...
extern string TimeTradeHoursDisabled = "09,12,18"; // Здесь перечисляем часы, в которые необходимо обеспечить выход из рынка и не вести торговлю. Выходить из рынка нужно заблаговременно до выхода новостей (приблизительно за пол часа - час)
...

// Собственно сама функция для тех, кто хочет спать спокойнее

bool CheckTradeTime ()
{
// Сохраняем серверное время (часы)
int h=TimeHour(CurTime());
string s = "";
// заносим опять в строку в нужном формате
s = DoubleToStr (h, 0);

// Если значение часа односимвольное, добавляем в начале ноль
if (h < 9)
s = StringConcatenate("0",s);

// Ищем запрещенные часы торговли
if (StringFind(TimeTradeHoursDisabled, s, 0)== -1)
// Если текущий час не входит в запрещенный период - можно торговать
return(true);
else
// иначе нет
return (false);
}
...

// проверку на вход в рынок добавишь сам
23.08.2006 13:33 Knocker

Knocker, если не очень трудно, поделись ТаймКонтролом, тоже хочу выспаться.
Заранее благодарен.

Олег.
Ок.
23.08.2006 10:23 Knocker
Knocker писал(а):

DIM2006 писал(а):
Knocker я извиняюсь за нескромный вопрос.С каким брокером Вы работаете?Если можно поделитесь настройками советника.Спасибо.

МТС немного постарее чем тут наворочено
CyberiaTrader (commercial edition) - релиз августа 2005 г. (брал сначала релиз, потом исходники, кое-какие фичи дописвыал под себя, кое что поубирал. Основную математику я не трогал. Если беглым взглядом, она не изменилась).
Сейчас брокер - MIG:
RunPipsator=true ставлю очень редко (почти не использую), только когда рынок спокойный. При этом отключаю динамический стоп-лосс (пркатически не использую его вообще, так безопаснее ).
Пипсер запускаю редко со статик-стопом со смещением в 7-9 пунктов(помоему тут по умолчанию стоит тоже 7). 7 - когда все совсем спокойно, 9 - когда волатильность повыше (смотрю по стандартным индикаторам объемов MT).
CyberiaLogic никогда не отключаю вообще, и вам не советую. (всегда стоит true).
Не использую одновременно пипсатор и логическую торговлю (EnableLogicTrading). Либо одно, либо другое, но никак не вместе. Вместе они друг-другу мешают, увеличивают просадку.
Обычную торговлю (EnableLogicTrading = true, BlockPipsator = true) веду со смещением статик-стопа не менее 15 пунктов, но не более 20. (У меня этот параметр по другому называется. Здесь это помоему StaticStopLoss, у меня стоит обычно 16-17).
MoneyTrain у меня вообще нет. Насколько я знаю эта штука пока экспериментальная, говорят прибыльная но опасная (для ловли ГЭП на новостях), ничего не могу сказать по этому поводу.
ТаймКонтрол у меня с новой Pro-версии (кусок кода вставил сам, сложного там ничего нет). Очень полезная штука, без нее было бы тяжело. Просто заливаю в нее график выхода всяких засад и сплю спокойно.
"Тормоз" также с новой Pro версии. (тот что тут я бы назвал "без тормозов" вообще. Фигачит как сумасшедшая, моя версия делает за день сделок раз в 5 меньше, но надежнее).
Теневого стопа у меня тоже нет - все стопы реальные (в миге в отличии от российских кидальных брокеров этой фигней пока не страдают).
Поскольку мозгов читать новости у этой штуки еще нет, иногда помогаю блокировками нежелательных сделок (BlockSell = true, BlockBuy = true)

Если коротко: пипсер и логика работают отдельно. Стопы - статик со смещением 7 и 16 соответственно (меняю сам)
Здесь на сайте в параметрах по умолчанию включен баг - статик стоп в 7 пунктов для пипсера, а по умолчанию врублена логика. Не удивительно что кое-кто сливает (головой то тоже надо немного думать).

Вот собственно и вся примудрость.

Knocker, если не очень трудно, поделись ТаймКонтролом, тоже хочу выспаться.
Заранее благодарен.

                                                                                 Олег.                       
22.08.2006 22:04 sevpfk
eugenk1 писал(а):
OpenStorm, еще раз привет ! Давай лучше на "ты". Увы, боюсь с вероятностями ты ошибаешься. Смотри. Пусть есть две валюты. V1 и V2. И пусть по V1 вероятность выигрыша P1, а по V2 - P2. Ты открываешь N позиций. Из них N1 по V1 и N2 по V2. При этом N = N1 + N2. Положим числа N, N1, N2 достаточно велики. Тогда число выигрышей по V1 есть P1*N1, а по V2 - P2*N2. Общее число выигрышей будет равно P1*N1 + P2*N2 = P1*N1 + P2*(N-N1). Тогда вероятность выигрыша P = P1*N1/N + P2(N-N1)/N. Т.е. итоговая вероятность будет не суммой, а ВЗВЕШЕННОЙ суммой вероятностей P1 и P2. В частности, если N1=N2=N/2, то P = (P1 + P2)/2 - т.е. среднему арифметическому двух вероятностей. Последний случай кстати аналогичен такой задаче. Пусть есть две урны с черными и белыми шарами. В первой урне W1 белых шаров и B1 черных. Во второй - W2 белых и B2 черных. Ты берешь шары из двух урн. Всего - N шаров. N/2 из первой и N/2 из второй. С тем же успехом шары из обоих урн можно сложить в одну и взять N шаров из неё. Вероятность вытащить белый шар при этом будет (W1+W2)/(W1+B1+W2+B2) что ВСЕГДА меньше 100%.
Другое дело количество сделок - т.е. агрессивность. На нескольких парах она заведомо будет выше. Хотя тут вопрос сложный. Ведь пары коррелируют между собой...

По поводу нейронов. Возможно я и не прав. Тем не менее, скажи об этом вашим разработчикам. Пусть попробуют взглянуть на проблему с точки зрения архивации, а не нейронных сетей. Мне кажется это вполне можно реализовать на mql4 с приемлемым быстродействием. Может успеют до 25 сентября... На половину суммы приза я не претендую, просто хочется подсказать хорошим мужикам хорошую идею. Сам сколько раз на такое натыкался. Трахаешься неделями, расскажешь об этом какому-то свежему челу, и он с полпинка выдает тебе решение. .. Кстати, продолжая аналогию. Ведь архиватор это тоже самообучающаяся система. В начале работы он не знает о файле ничего. Тем не менее в процессе сжатия накапливает статистику. И без всяких нейронных сетей заметь. Может это и для вас путь ?

По поводу теории хаоса. Долблю потихоньку ваш код. Тем не менее периоды они периоды и есть. Да, у вас они определяются динамически. Но я так же считал преобразование Фурье. Те же яйца только в профиль. Так что и пороки метода должны быть теми же самыми, в которые уперся в свое время я.


Ок, давай на ты. Почему не подходит метод с корзиной: дело в том, что мы имеем дело с последовательностями, а не с произвольным набором. Например результирующая последовательность по нескольким инструментам будет следующая:

100000000101001101010001010000010100011100000000000110101110
+--+-----+-----+------+------+------+-----+----+-----+...
Плюсами я обозначил точки входа механики в игру. Минус - инструмент в игре. (последовательности которые стоят над минусом - выпадают). Сравнивать эти последовательности с корзиной где лежат все события нельзя (где в любом случае должен быть выбран шар), потому что после того, как ты взял шар, часть шаров из этой корзины вынимается - время то идет и события по сигналам входа в рынок все-таки происходят. Это скорее всего стек, из которого достаются шары и пока твой шар у тебя в руках (инструмен в игре), остальные шары просто падают на землю. Я бы сравнил это скорее с пушкой для тренировки игроков в большой теннис, но никак не корзиной :)
Таким образом можно довести эффективность любой механики (ну в которой есть хоть какой-то положительный эффект, пусть она даже и сливает на тестере) до нужной положительной вероятности, когда последовательности положительных сделок компенсируют отрицательные и она сможет приносить прибыль.

Таким образом работа по нескольким валютам сразу увеличивает вероятность проигрыша, а работа с несколькими валютами по этому принципу уменьшает эту вероятность.
P.S.: проверено на реальных торгах. Рекомендую тебе сделать то же самое хотя бы на демонстрационных счетах с твоим советником (увидишь воочию). Кстати мы совсем не возражаем чтобы кто-то выходил на чемпионат с нашим советником, пусть и модифицированным. Единственная просьба - соблюдать лицензию и публиковать код. Если кто-то из нашего коммунити выиграет мы будем только рады этому.
12.08.2006 12:11 OpenStorm
OpenStorm, еще раз привет ! Давай лучше на "ты". Увы, боюсь с вероятностями ты ошибаешься. Смотри. Пусть есть две валюты. V1 и V2. И пусть по V1 вероятность выигрыша P1, а по V2 - P2. Ты открываешь N позиций. Из них N1 по V1 и N2 по V2. При этом N = N1 + N2. Положим числа N, N1, N2 достаточно велики. Тогда число выигрышей по V1 есть P1*N1, а по V2 - P2*N2. Общее число выигрышей будет равно P1*N1 + P2*N2 = P1*N1 + P2*(N-N1). Тогда вероятность выигрыша P = P1*N1/N + P2(N-N1)/N. Т.е. итоговая вероятность будет не суммой, а ВЗВЕШЕННОЙ суммой вероятностей P1 и P2. В частности, если N1=N2=N/2, то P = (P1 + P2)/2 - т.е. среднему арифметическому двух вероятностей. Последний случай кстати аналогичен такой задаче. Пусть есть две урны с черными и белыми шарами. В первой урне W1 белых шаров и B1 черных. Во второй - W2 белых и B2 черных. Ты берешь шары из двух урн. Всего - N шаров. N/2 из первой и N/2 из второй. С тем же успехом шары из обоих урн можно сложить в одну и взять N шаров из неё. Вероятность вытащить белый шар при этом будет (W1+W2)/(W1+B1+W2+B2) что ВСЕГДА меньше 100%.
Другое дело количество сделок - т.е. агрессивность. На нескольких парах она заведомо будет выше. Хотя тут вопрос сложный. Ведь пары коррелируют между собой...

По поводу нейронов. Возможно я и не прав. Тем не менее, скажи об этом вашим разработчикам. Пусть попробуют взглянуть на проблему с точки зрения архивации, а не нейронных сетей. Мне кажется это вполне можно реализовать на mql4 с приемлемым быстродействием. Может успеют до 25 сентября... На половину суммы приза я не претендую, просто хочется подсказать хорошим мужикам хорошую идею. Сам сколько раз на такое натыкался. Трахаешься неделями, расскажешь об этом какому-то свежему челу, и он с полпинка выдает тебе решение. .. Кстати, продолжая аналогию. Ведь архиватор это тоже самообучающаяся система. В начале работы он не знает о файле ничего. Тем не менее в процессе сжатия накапливает статистику. И без всяких нейронных сетей заметь. Может это и для вас путь ?

По поводу теории хаоса. Долблю потихоньку ваш код. Тем не менее периоды они периоды и есть. Да, у вас они определяются динамически. Но я так же считал преобразование Фурье. Те же яйца только в профиль. Так что и пороки метода должны быть теми же самыми, в которые уперся в свое время я.

12.08.2006 05:05 eugenk1
eugenk1 писал(а):
OpenStorm, прежде всего спасибо за то что поделились интересным исходником.

- Пожалуста :)

Теперь немного критики и предложений. Просьба не пинать особо ногами если глупость скажу.
1) По поводу нейронного торможения, которое у вас реализовано через dll и с которым основные проблемы. Возможно я неправ, но никаких нейронов я в твоем описании не разглядел. То о чем ты пишешь, более всего напоминает методы управления словарем в методах сжатия типа LZ, LZ77/78 LZW и тому подобных.

- Да, сходство есть... Я бы сказал что это более похоже на метод Хаффмана. Хранение нейропоследовательностей действительно похоже на метод сжатия, используемый в PKZIP и т.д...

То же выделение максимальной уникальной подстроки и та же выбраковка наименее актуальных подстрок. Может вам нейроны просто глаза замылили, и вы не видите того, что по сути это старый добрый LZ + поиск(который лучше всего сделать с хешированием)

- возможно...

? Не настаиваю разумеется. Описал ты это лишь в самых общих чертах, и я мог неправильно понять.
2) Немного не въехал в вашу "теорию хаоса", которую вобщем то ты тоже описал весьма кратко. Как я понял, постулируется, что в некотором масштабе, цена неплохо описывается простым колебанием типа подъем-спад.

- ну я бы не назвал его совсем простым колебанием.

Причем и подьем и спад занимают в этом масштабе ровно один бар.

- нет, посмотрите на часть кода где стоит комментарий "самая важная фунция"... Там вы увидите что происходит масштабирование модели.

Я пробовал похожий путь - спектральный анализ.

- проходили...

И споткнулся на очень сильной нестационарности сигнала. Ваш метод нахождения оптимального периода моделирования скорее всего должен страдать тем же.

- возможно. Однако не сильно вдавайтесь в технические вопросы. Есть и организационные способы увеличения эффективности системы. Об этом я расскажу в конце вашего поста.

Сейчас я в этом разочаровался и пробую фрактальный подход (не в смысле книжки Вильямса , а в том смысле в котором понятие "фрактал" применяется в математике).

- мы посматриваем и в эту сторону тоже

3) Предложение по поводу новостей. Ребят, вам же не вечность играть, а всего то 3 месяца продержаться надо. Потому, а что если время выхода новостей забить в код советника жестко ?

- скорее всего так и сделаем.

Ведь важные новости выходят в определенное время и в определенные дни недели. Например характерные времена это 9:00, 12:00 и 16:30 по Москве. Забейте просто в код советника ряд времен и ряд дней недели, когда могут выходить важные новости. И тогда не придется каждую неделю грузить файл новостей...
4) И наконец большая просьба. Нельзя ли советника получше откомментировать, либо написать какое-то подробное описалово того, как он работает ? Код у вас достаточно сложный и понять его довольно тяжело.

- постараемся, однако могу предположить что описание скорее всего будет больше кода в несколько раз.

С уважением
Евгений.

Удачи на чемпионате ! :)

- спасибо. Если успеем подготовиться и нас пропустят по критериям.

P.S. Вот еще вопрос вспомнил. Почему ваш советник хорошо работает только при больших объемах ?

- Это существенно для большой агрессивности советника на малом периоде на коротких интервалах. При низких объемах мы просто увеличиваем период работы (вплоть до H4) и советник становится нечувствителен к объемам. Это замечание касается только логики (пипсинг вообще лучше не использовать кроме как на флете. Брокер будет "очень против"). На малых периодах советник реализует торговлю в том числе и на сопротивлении (что обычно опасно и ни один трейдер не будет торговать против рынка). На больших периодах торговля идет в основном только по тренду и локальные колебания не влияют на принятие решений советника (торговля на сопротивлении не ведется, а если и ведется, так только после пробоев канала на основании подозрений советника о смене тренда). Либо малые периоды с огромной агрессивносьтю и полуавтоматическими блокировками, либо увеличение периода работы системы и уменьшение агрессивности.


Теперь об организационных способах увеличения вероятности успешной автоматической торговли:

Банальное подключение советника к графику конешно хорошо, но! Вопрос - как получить вероятность успешного ведения торговли более 100%. Скажете нереально?! Сначала я с Вами соглашусь, а потом смотрите сюда:

Допустим имеем последовательность сделок по одной паре (0 - положительная сделка, 1 - отрицательная сделка )
Итак:
00001001000001100010011
W - вероятность успешного завершения сделки в этом случае будет равна (A - количество успешных сделок, B - количество неудачных):
W1 = A1/(A1+ B1)
Далее, берем вторую пару, на ней последовательность успешных сделок будет другая например:
10001101000000001000100
Вероятность успешного завершения сделки соответственно для нее будет:
W2 = A2/(A2+ B2)
Теперь если мы одновременно торгуем двумя валютами, вероятность успешного завершения сделки:
Wa = (A1+A2)/(A1+A2+B1+B2)

Таким образом можно заметить что всегда Wa<W1 и Wa<W2

теперь смотрите что мы делаем, мы будем работать с несколькими валютами, но не одновременно. Т.е. работать будет одна валюта из набора. Для режима работы по парам (ИЛИ) вероятность успешного завершения сделки будет:

Wb = W1 или W2, на математическом языке это будет: Wb = W1 + W2

Таким образом Wb > W1 и Wb > W2

Но есть и еще один побочный положительный эффект от этого способа работы по нескольким валютам. Если в один временной ряд расположить моменты совершения сделок, совокупная частота совершения сделок в этом случае увеличится.

На этом примере я показал как организационными способами увеличить вероятность успешной автоматической торговли. В применении нашей системы на практике это выглядит как простое подключение советника к нескольким парам, у которых в настройке SymbolsCount = 1

В условии чемпионата указано, что подключать советника можно только к одному графику. Для нас это очень большой минус...
Таким образом 100% получить конечно нереально, но увеличить вероятность к значению близкому к этой величине вполне даже возможно.

"Thats all folks..."
11.08.2006 10:00 OpenStorm
OpenStorm, прежде всего спасибо за то что поделились интересным исходником. Теперь немного критики и предложений. Просьба не пинать особо ногами если глупость скажу.
1) По поводу нейронного торможения, которое у вас реализовано через dll и с которым основные проблемы. Возможно я неправ, но никаких нейронов я в твоем описании не разглядел. То о чем ты пишешь, более всего напоминает методы управления словарем в методах сжатия типа LZ, LZ77/78 LZW и тому подобных. То же выделение максимальной уникальной подстроки и та же выбраковка наименее актуальных подстрок. Может вам нейроны просто глаза замылили, и вы не видите того, что по сути это старый добрый LZ + поиск(который лучше всего сделать с хешированием) ? Не настаиваю разумеется. Описал ты это лишь в самых общих чертах, и я мог неправильно понять.
2) Немного не въехал в вашу "теорию хаоса", которую вобщем то ты тоже описал весьма кратко. Как я понял, постулируется, что в некотором масштабе, цена неплохо описывается простым колебанием типа подъем-спад. Причем и подьем и спад занимают в этом масштабе ровно один бар. Я пробовал похожий путь - спектральный анализ. И споткнулся на очень сильной нестационарности сигнала. Ваш метод нахождения оптимального периода моделирования скорее всего должен страдать тем же. Сейчас я в этом разочаровался и пробую фрактальный подход (не в смысле книжки Вильямса, а в том смысле в котором понятие "фрактал" применяется в математике).
3) Предложение по поводу новостей. Ребят, вам же не вечность играть, а всего то 3 месяца продержаться надо. Потому, а что если время выхода новостей забить в код советника жестко ? Ведь важные новости выходят в определенное время и в определенные дни недели. Например характерные времена это 9:00, 12:00 и 16:30 по Москве. Забейте просто в код советника ряд времен и ряд дней недели, когда могут выходить важные новости. И тогда не придется каждую неделю грузить файл новостей...
4) И наконец большая просьба. Нельзя ли советника получше откомментировать, либо написать какое-то подробное описалово того, как он работает ? Код у вас достаточно сложный и понять его довольно тяжело.
С уважением
Евгений.

Удачи на чемпионате ! :)

P.S. Вот еще вопрос вспомнил. Почему ваш советник хорошо работает только при больших объемах ?
11.08.2006 03:53 eugenk1
Да, попрыгали вчера. Неплохо, неплохо. Желаю успеха и в дальнейшем :). ...если вернуться к вопросу нейросетей. Почему обучение нейронов должно или может быть невозможным для простых юзверей, причина в железе или в головах вышеназванных? К сожалению, я не настолько продвинутый программер, чтобы браться за написательство этих зверей, хотя принцип более-менее ясен. Проблемка в том, что больно уж много говориться сейчас об этих нейронах, а практической реализации и положительных результатов так и не видно. Каждый представляет себе по-своему. И все-таки, реализована же эта беда в NeuroShell (Day)Trader-ах, или все это надувательство и опиум для народа?

Головы пользователей тут ни при чем, нужны мощные железки, успевающие перестраивать и обучать нейроны в порцессе работы, иначе срабатывание самообучающегося нейрона будет идти с огромным проскальзыванием и он вообще потеряет свою эффективность. Те системы что предлагают с уже обученными нейронами будут плавно терять свою эффективность, поскольку рынок меняется постоянно и в конце концов все знают чем это закончится - потерей депозита. По поводу нейрошела, видел одну нейросистему на его основе, использующую около 700 индикаторов (входов). Я бы не сказал что это уж совсем надувательство, но сами наблюдали как шла постепенная потеря эффективности и с должной регулярностью нейрон сам постепенно браковал свои же индикаторы поскольку нейропоследовательности постепенно отказывали и давали ложные сигналы. Мы довели наше наблюдение до банальной балансировки депозита и прекратили это исследование. Вы знаете кого-нибудь кто эффективно использует эту вещь? - я нет, сколько не искал чтобы это выяснить.
10.08.2006 09:16 OpenStorm