Рынок всегда неправ

 
Продолжение темы "Арбитраж". Там уже очень много страниц, да к тому же критиканы порядком загадили, а посему новая тема.

Удалось поднять эквити над балансом. Выглядит это так (EURJPY H1):





Исходники советника прикреплены к сообщению. Отчет тестера тоже.

Для этого в код пришлось добавить еще один входной параметр: beginEquity - начальные средства. Т.е. начальный баланс. В тестере, советник сам автоматически следит за тем, превышен ли уровень beginEquity. И если превышен, то начинает игру заново, т.е. меняет beginPrice на Bid, beginEquity на текущий эквити и изменяет магический номер (увеличивает на 1).

Но на демо и на реале советник будет только выводить алерт с просьбой изменить эти параметры вручную. Дело в том, что эксперт при выключении терминала или компьютера нигде не сохраняет предыдущие параметры и после перезапуска не сможет их восстановить (кому сильно неймется, могут сделать файловую базу данных или хранить параметры в глобальных переменных.)
Т.ч. придется следить за сигналами советников и если они начнут выдвать сообщения, то для всей группы, необходимо будет вручную изменить вышеуказанные входные параметры.
Файлы:
 
А вот и я, критикан, и тут тебя нашел, Юрий. Теперь и здесь гадить буду. Поверхностный анализ отчета показывает, что с 20 августа 2004 по 22:00 4 мая 2007 при начальном депо 200 000 было сделано 72 252 прибыли, а в 22:00 были закрыты все остающиеся позы, которые принесли одним махом прибыль около 528 000 (в 7 раз больше, чем за всю историю тестирования!). Эффект, вероятно, вызван просто окончанием периода тестирования.
 
Mathemat:
А вот и я, критикан, и тут тебя нашел, Юрий. Теперь и здесь гадить буду. Поверхностный анализ отчета показывает, что с 20 августа 2004 по 22:00 4 мая 2007 при начальном депо 200 000 было сделано 72 252 прибыли, а в 22:00 были закрыты все остающиеся позы, которые принесли одним махом прибыль около 528 000 (в 7 раз больше, чем за всю историю тестирования!). Эффект, вероятно, вызван просто окончанием периода тестирования.
Момент завершения тестирования видно на графике справа в виде строго горизонтальной зеленой полосы (эквити) и резким нелинейным "ростом" баланса под этой самой горизонталью. Т.е. тестер закрывает все позы, а посему баланс "растет" до тех пор пока не станет равен средствам. Ясен пень, что на тот момент было много открытых поз с положительным профитом. По другому эквити выше баланса подняться никак не сможет.

Тестер всегда принудительно закрывает все открытые позы по завершении периода тестирования. И если к тому моменту эквити не равен балансу, то после закрытия всех поз баланс будет равен последнему значению средств. Т.ч. не стоит называть такое поведение тестера "эффектом", т.к. это принцип действия.
 
Здравствуйте!
Вот те бабушка и юрьев день! Шучу.
Как сказал Mathemat "по поверхностному анализу" ну очень красиво! Ни одного отрицательного значения. Поставлю тестировать в онлайн. Но вот чего не понял (может не правильно понял): Я не выключаю камп, не закрываю терминал. Будет ли выводится алерт в таких условиях, или советник будет торговать сам, как ему и положено? И что произойдет , если будет кратковременнгое отключение от инета, а потом восстановление связи? Без каких либо выключений с моей стороны?
Для меня вопрос очень важный по причине отсутствия меня возле компа как минимум 18 часов в день (Сон работа и т.п) и если в это время произойдет отключение, или я не смогу ввести новые данные. ..... ну не совсем хорошо.
Еще, если правиьно понял: Если включаешь камп или терминал, то просто нужно ввести текущие значения и все пойдет своим чередом, т.е переподключить советника?
Еще, если алерт выведен, но мы ничего не предпринимаем, советник продолжает торговать по старым настройкам или ждет ввода новых?
Если можно, очень прошу, эти моменты поподробнее!!!!
Спасибо за очередной повод поломать немного голову! (в хорошем смысле).
С уважением!!!!
 
Не знаю почему, но советник в режиме тестера открывает сделки пачками примерно по десять штук, это случайность или нет?
На тесте с меньшими таймфреймами, и меньшим начальным депозитом - сплошной провал. Если взять на 5 минутах со старта 3000 , по евро юсд, с 02.01.2007 г по сегоднешний день, открывает сразу десять позиций, которые закрываются почему-то не в конце периода, а где-то числа 12.02 2007 сплошным сливом, Причем этот слив идет в основном именно по тем первым десяти открытым ордерам. И такая картина повторяется не только на маленьких таймах. Даже если увеличить депозит до 50000, то тоже сливает. изменим тайм фрейм, на 1 час, тоже сливает. Что-то тут не так!!!
Первый , пока самый красивый. Может я чего не так делаю?
С уважением!
 
Здравствуйте!

У меня небольшой вопрос: скачал советник, при компиляции выдает ошибку:
'MODE_MARGINREQUIRED' - variable not defined C:\Program Files\PFG FX Trader\experts\ArbitrageReverse_1. 5.mq4 (244, 49)
Для чего нужна переменная MODE_MARGINREQUIRED и как ее задать?

 
Implex:
Здравствуйте!

У меня небольшой вопрос: скачал советник, при компиляции выдает ошибку:
'MODE_MARGINREQUIRED' - variable not defined C:\Program Files\PFG FX Trader\experts\ArbitrageReverse_1. 5.mq4 (244, 49)
Для чего нужна переменная MODE_MARGINREQUIRED и как ее задать?


Обновите свой терминал до последней билда 204, скачав дистрибутив по ссылке: http://www.metatrader4.com/files/mt4setup.exe
 

Хотя еще не закончил, как задумывал, тест прежнего советника, при этом уже размышлял как ту версию улучшить. А тут Юрий новое выдал. Уже не «пятый элемент», а «шестой». Ну как тут работать? Руки опускаются.

А если серьезно, то есть у меня вопрос по коду. Может быть он наивный, и поэтому обращаюсь не только к Юрию. Может быть, кто-нибудь другой прояснит. Буду благодарен.

В версии ArbitrageReverse_1.1.mq4, да и в новом варианте ArbitrageReverse_1.5.mq4 повторяется та же конструкция, которая мне непонятна: это вызов пользовательской функции closeby(ticksell, tickbuy) после блока обхода открытых на данный момент ордеров. Для ArbitrageReverse_1.1.mq4 это строка [106], для 1.5 это строка [128]. Смысл функции понятен – если есть отрытые ордера SELL и открытые ордера BUY (по одному символу), то SELL будет закрыт BUY. Мне не нравиться, что для осуществления этой операции нет никаких предварительных условий. Т.е. только если есть BUY и SELL – то ордера должны закрыться. Хотя далее по коду, уже в блоке « dt » вызов функции closeby(ticksell, tickbuy) (для v:1.1 строка [163], для v:1.5 [189]) обрамляется условиями. И это мне кажется более правильным. В принципе, я скоро и сам увижу, что происходит, осуществив трассировку всех присваиваний в переменные, пока работаю над своими мелкими ошибками. Но сейчас все же спрошу прямо Юрия:
Нужен ли вызов closeby в строке [106] v:1.1 или [128] v:1.5 и если нужен, то что будет «закрываться» в [163] для v:1.1 или в [189] для v:1.5, если получается, что все что можно закрыть, должно быть закрыто еще до этого? Я понимаю, что может быть разница в объемах лота, но все равно, что-то тут на мой взгляд «не то».

Вызов closeby(tickbuy, ticksell) в [200] для v:1.1 или в [224] для v:1.5 более-менее понятен – если в открытых ордерах определен открытый ордер SELL или BUY, а в блоке «dt», в зависимости от условий может открыться противоположный ордер по функции OrderSend – то далее соответственно сработает закрытие.

Вобщем, если спросил глупость – то извиняюсь. Укажите на ошибку и я исправлюсь.

С уважением, Fed

 
Я уже выложил в CodeBase советника, который, придерживаясь тактики арбитража, зарабатывает еще и на положительных свопах. После проверки модератором код будет доступен ЗДЕСЬ
 
Здравствуйте!
Пыатюсь понять - логика работы  этой модификации зависит от изменяющихся beginPrice , beginEquity которые нужно менять вручную. т.к. на тестах только по евройене такие результаты а по другим чистый слив при закрытии теста .. да и эквити не так часто выше баланса. Это в тесте. Спасибо
 
Fed:

Хотя еще не закончил, как задумывал, тест прежнего советника, при этом уже размышлял как ту версию улучшить. А тут Юрий новое выдал. Уже не «пятый элемент», а «шестой». Ну как тут работать? Руки опускаются.

А если серьезно, то есть у меня вопрос по коду. Может быть он наивный, и поэтому обращаюсь не только к Юрию. Может быть, кто-нибудь другой прояснит. Буду благодарен.

В версии ArbitrageReverse_1.1.mq4, да и в новом варианте ArbitrageReverse_1.5.mq4 повторяется та же конструкция, которая мне непонятна: это вызов пользовательской функции closeby(ticksell, tickbuy) после блока обхода открытых на данный момент ордеров. Для ArbitrageReverse_1.1.mq4 это строка [106], для 1.5 это строка [128]. Смысл функции понятен – если есть отрытые ордера SELL и открытые ордера BUY (по одному символу), то SELL будет закрыт BUY. Мне не нравиться, что для осуществления этой операции нет никаких предварительных условий. Т.е. только если есть BUY и SELL – то ордера должны закрыться. Хотя далее по коду, уже в блоке « dt » вызов функции closeby(ticksell, tickbuy) (для v:1.1 строка [163], для v:1.5 [189]) обрамляется условиями. И это мне кажется более правильным. В принципе, я скоро и сам увижу, что происходит, осуществив трассировку всех присваиваний в переменные, пока работаю над своими мелкими ошибками. Но сейчас все же спрошу прямо Юрия:
Нужен ли вызов closeby в строке [106] v:1.1 или [128] v:1.5 и если нужен, то что будет «закрываться» в [163] для v:1.1 или в [189] для v:1.5, если получается, что все что можно закрыть, должно быть закрыто еще до этого? Я понимаю, что может быть разница в объемах лота, но все равно, что-то тут на мой взгляд «не то».

Вызов closeby(tickbuy, ticksell) в [200] для v:1.1 или в [224] для v:1.5 более-менее понятен – если в открытых ордерах определен открытый ордер SELL или BUY, а в блоке «dt», в зависимости от условий может открыться противоположный ордер по функции OrderSend – то далее соответственно сработает закрытие.

Вобщем, если спросил глупость – то извиняюсь. Укажите на ошибку и я исправлюсь.

С уважением, Fed

Если бы на демо и в реальном режиме закрытие встречных позиций происходило также идеально, как в тестах, то наверняка достаточно было бы оставить всего один вызов closeby() перед последним return(0) в событии старт. Поэтому в тестовом режиме, хоть трассируй, хоть не трассируй, а закрытий в дополнительных вызовах не произойдет.

Но на демо и в реале, частенько по тем или иным причинам перекрытые позиции не закрываются по встречной (например, связь с сервером кратковременно отсутствует), а посему пришлось предусмотреть дополнительные вызовы closeby().