TradingView
ROBO_Trading
3 апр 2018 г., 09:38

Fast RSI 1.7 и практика 

Bitcoin / US Dollar Perpetual Inverse Swap ContractBitMEX

Описание

Стратегии в скрипте не изменились, просто добавлены фишечки "Capital, %" и мартингейл. Впрочем, мартингейл ей не очень то подходит. Далее о практике. Ниже тест стратегии Fast RSI (остальные 2 отключены) за 2017-2018, с лимитом 20 вместо 30 и с комиссией 0.1%, чтобы было ближе к реальности.

Стратегии

В скрипте 3 стратегии на выбор. По моей задумке юзер должен выбирать одну из трех, а не все сразу. Существует опасность что при включении всех трех юзер увидит сотни тысяч годовых и у него треснет морда.

Нюансы

Первый. При тесте с пирамидингом и кредитным плечом тестер не учитывает комиссию за кредитное плечо. А она есть.

Второй. Счет на битмексе номинирован в биткойнах, поэтому там это будет прибыль поверх Buy&Hold. Поэтому 100% годовых это тоже очень много, а не "проиграл рынку".

Третий. Пирамидинг и мартингейл нельзя включать одновременно, иначе слив будет (хотя и нету на тесте).

Четвертый. Остальные две стратегии, кроме Fast RSI тоже используют RSI, поэтому выкручивание параметра "RSI Limit" тоже повлияет на результаты этих стратегий.

Настройки

Если подгоняете настройки на следующий месяц, то надо тестить за период в 3 предыдущих месяца. Так более актуально. Через месяц повторить.

При настройках просадка не должна превышать 50%. Если на бектесте превышает 50%, то у Вас появляется очень маленькая вероятность всё же слить депозит, даже если на бектесте такое не случается. Потому как рынок в будущем не точно такой же как в прошлом.

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

Ставьте комиссию 0.1%, а не 0 или 0.075% и подгоняйте с комиссией. На реальной практике могут быть маленькие проскальзывания (тем более если депо более 10 килобаксов).

Комментарий

Реальные результаты на деньгах пока такие вот. Работает на 4х аккаунтах чуть разные параметры. Работают с 14 марта.

Первый +115%
Второй -25%
Третий +12%
Четвертый -18%

В среднем вышло +21%. Входят на всю котлету + пирамидинг до 5 заявок.

Лучше всего работает Fast RSI стратегия, и Color-стратегия из того же скрипта. Лучше на часовом. Хоть с комиссией, хоть с антикомиссией, на часовом и прибыль больше и просадка меньше. Вопреки ожиданиям.

Комментарий

Уважаемые программисты, пишущие робота на питоне. Есть человек на TW под ником Vita396, он не против купить Вашу разработку. Пишите, может договоритесь. Я в этой Вашей сделке ответственности никакой не несу.
Комментарии
kstka
> Входят на всю котлету + пирамидинг до 5 заявок

Норо, подскажите, как это интерпретировать? К примеру, размер моей котлеты 1000$.

Я могу разбить колету на 5 частей 1000$ / 5 = 200$ и входить по 200$, максимум 5 раз.

Или же, я могу разбить котлету на 5 частей и сделать плечо х5. Тогда получится, что каждые 200$ * 5 = 1000$. И я смогу 5 раз входить по 1000$.

А как это делает стратегия?
ROBO_Trading
@YOUniverse, и так и так работает. Вот только в скрипте (и в будущем роботе тоже) размер лота указывается не в долларах, а в процентах от капитала. То есть указываете 50% лот - значит каждая покупка будет на 50% от капитала. Если пирамидинг при этом стоит 5, значит загрузиться может до 250% от Вашего капитала. Например, капитал 1000 долларов, тогда:

1) 20% лот и 5 пирамидинг = загрузка до 100% капитала, до 1.000 долларов
2) 100 лот и 20 пирамидинг = загрузка до 2000% капитала, до 20.000 долларов

Почему сделано в процентах, а не в долларах? Потому что с течением времени капитал то должен расти. В начале года 50% капитала это 500 долларов, а в конце года если капитал вдвое вырос, то 50% капитала это 1000 долларов. Так просто эффективнее, да и логичнее. Юзеру не надо постоянно увеличивать или уменьшать размер лота в долларах, раз уж он автоматически рассчитывается. Так сделано и у скрипта на трейдинг-вью и в самом роботе. У них всё одинаково.
kstka
@Noro, спасибо за ответ!
Да, конечно, лучше в процентах от капитала торговать. Доллары я для примера привел.

Как раз дописываю часть, автоматизирующую размер ордера.
А так мой PHP бот уже работает по Fast RSI 2.0 на реальных деньгах с 16го мая на часовом таймфрейме, с антикомиссией и пирамидингом 5. Пока все сделки в + и полное соответствие тестеру стратегий TV. Если и дальше будет хорошо себя вести, увеличу размер ордера. Ну и в случае успеха, буду проставляться вам биткоином :)
ROBO_Trading
@YOUniverse, проставляться то конечно обязательно надо :)

Насчет размера ордера могу предложить свой вариант на псевдо-коде:

Надо 2 переменных, ПозицияФакт (берется по апи) и ПозицияПлан (рассчитывается по стратегии). И надо переменную РазмерЛота, которая обновляется не всегда, а только тогда когда позиций нет. Ни планируемой, ни фактической, иначе могут быть проблемы, которые я уже прошел. Тогда получается так:

Если (ПозицияФакт == 0 и ПозицияПлан == 0) Тогда
РазмерЛота = ПоследняяЦенаБиржи * БалансКошелька / 100 * ПараметрПроцент
КонецЕсли

Где ПараметрПроцент задается юзером в настройках.

Такой вариант во какую проблему решает - если менять размер лота во время открытой позиции, то размер лота будет меняться вместе с изменением цены битка, в итоге докупки станут не одинаковыми по объему. Но если пересчитывать только если нет позиций, то такой проблемы нет.

Кстати, размер лота надо обязательно округлить до 0 знаков после запятой. А то биржа с центами не примет.
kstka
@Noro, спасибо за идею!

Только не понимаю почему докупки должны быть одинаковыми. Ведь докупки идут в долларах, а ПараметрПроцент, судя по формуле, рассчитывается от общего баланса в xbt. То есть, например, на счету 0.1 xbt, ПараметрПроцент равен 10. Сигнал стратегии - лонг.
Лот1 = 8518 * 0.1 / 100 * 10 = 85 usd. На балансе осталось 0.09 xbt , размер позиции 85
Лот2 = 8620 * 0.1 / 100 * 10 = 86 usd. На балансе осталось 0.08 xbt , размер позиции 171
Лот3 = 8830 * 0.1 / 100 * 10 = 88 usd. На балансе осталось 0.07 xbt , размер позиции 259
Пришел сигнал на close и закрывается позиция на 259 usd. Но юзер знает, что за эти три лота он рисковал только 30-ю процентами своего депозита.

Или одинаковый размер докупа вам нужен для точного расчета position_size ? Т.е. position_size = РазмерПозиции / РазмерЛота

Дописал свой авторасчет. Считает так:
ПроцентКапитала - процент xbt на балансе, которыми буду торговать. Например, 90%
БалансКошелька делится на 100000000 , чтобы привести его в человеческий вид.
Пирамидинг - максимальное количество ордеров в одной позиции
СтоимостьЛота - стоимость лота в xbt
РазмерЛота - сумма в usd
Плечо - плечо, например, x10

СтоимостьЛота = (ПроцентКапитала / 100 * БалансКошелька) / Пирамидинг
РазмерЛота = СтоимостьЛота * ПоследняяЦенаБиржи * Плечо


Ну и, соответственно, все округляется до целых, десятых и т.д. там, где нужно округлять.

Все это берет 90% от баланса кошелька, разбивает на 5 частей в xbt и пересчитывает в usd с учетом плеча 10

---

А вот недавно пришел отчет о последней закрывшейся позиции. Позиция была short, было сделано 4 ордера. Средняя цена позиции была 8518, закрылось по 8520, то есть, -0.02% убыток по цене. Но баланс кошелька увеличился на 0.03% за счет антикомиссий!
ROBO_Trading
@YOUniverse, Нет, после открытия позиции переменная РазмерЛота больше не пересчитывается, поэтому пока не закроется позиция все лоты будут одинаковыми в долларах.
kstka
@Noro, угу, понял. Ваш робот будет делать все так же, как и pine скрипт на TV. Тогда да
ROBO_Trading
@YOUniverse, есть одно малюсенькое отличие - средняя цена набранной позиции у скрипта рассчитывается по ценам закрытия свечей, а у робота по реальным ценам входов, потому они иногда отличаются, и потому бывает у робота нет сигнала а у скрипта есть. Маленькая погрешность. Но так правильнее, так как идея то была в том чтобы усреднять именно убыточную позицию, а не любую. Впрочем, результаты от тестов все равно будут сильно отличаться по ряду причин - там и комиссия за кредитное плечо или премия (да, там за плечо либо комиссия либо премия), входы получаются не по закрытию, а когда нальют, а нальют то более выгодно чем закрытие, то менее выгодно. Потом биржа пергружена и вообще несколько минут не дает ордер выставить :) В итоге реальные торги от теста вообще сильно отличатся. Проще говоря, тестер лишь показывает профитно такие параметры юзать или нет. А вот % дохода показывает весьма примерно так.
kstka
@Noro, ну вот у меня пока еще не было такого, чтобы сигнал на long или short у бота отличался от TV. Может, времени мало прошло и все еще впереди. Но, конечно же, была погрешность с close, потому что моя средняя цена входа в позицию может отличаться от TV именно из-за всех вышеперечисленных обстоятельств.
Но! Я еще раз хочу обратить внимание на аръхиважность использования Keep-Alive. Это сильно ускоряет процесс покупки ордера, в том числе, на перегруженной бирже. Я уже писал где-то у вас в комментах, что переменную curl_init не нужно закрывать через curl_close и делать curl_init перед каждым запросом. Да, биржа разрешает большое количество запросов, но сохранение Keep-Alive через однократно вызванную curl_init позволяет быстрее выполнять текущие запросы, т.е. быстрее покупать ордер, получать тикер и т.д. (примерно в 3 раза быстрее) Для торговли с Keep-Alive я использую свой класс github.com/y0un1verse/bitmex-api-php , там можно посмотреть как работает Keep-Alive, ну или могу рассказать тут.

> период = 5, лимит = 35, рси бары = 3. Попробуй на скрипте :)
Ох, чудо какое-то! Правда, я не понял где ставить бары на 3, но период 5 и лимит 35 в RSI#1 сильно изменили профит на часовом.
ROBO_Trading
@YOUniverse, период = 5, лимит = 35, рси бары = 3. Попробуй на скрипте :)
Ещё