В github лежит база данных каждые 10 секунд на протяжении 5 месяцев сбора цены биткоина на одной известной бирже.
Также там лежит бэктестинг алгоритм, боевой алгоритм, и кнопки купить/продать или закрыть сделку маржинальной торговли cross кошелька.
Я выкладываю данный алгоритм так как на нем не получилось заработать - все съедает комиссия. В данный момент торгую более сильным и длинным алгоритмом.
Данные такие что за час проходит 350 тиков съема данных и торговли , так как выполняется еще механика алгоритма на 10 тиков короче час (не 360 , а 350).
t1=[(1,1)];f1=[(0,1)];f1.append(f1[-1]);t1.append(t1[-1]);v40=0;act=1.002;a=0;v3=0;v8=0;v9=0;v11=0;v4=0;
v71=0;v70=0;sum12=3000;v50=0;v44=0;v40=0;price14=bitcoin[-a][1];price15=bitcoin[-a][1];price12=bitcoin[-a][1]
import pickle
#file = open('/Users/andrejeremcuk/bitcoin.pkl', 'rb')
#bitcoin=pickle.load(file)
def bil():
global bitcoin,fff1,ttt1,v71,v70,sum12,price12,v50,v44,v40,v4,price14,price13,price15,act,v3,v8,v9,v11,v96;
a=len(bitcoin)-391;sum12=3000;price12=bitcoin[0][1];t1=[(0,1)];f1=[(1,1)];f1.append(f1[-1]);t1.append(t1[-1]);
price12=bitcoin[-a][1];price13=price12;print(sum12);t1.append((1,1));f1.append((0,0));print(bitcoin[-a][1],a,'sell26',v3,sum12);fff1=0;ttt1=1;v44+=1;ar7=400;price15=price13;ar33=1.33;pr2=bitcoin[-a];v10=0;v67=0;act=1.002;v5=0;
for i in range(len(bitcoin)-482):#len(bitcoin)-382-0000
a=a-1;
poi=34;fas=36;at1=175;at2=350;at3=50;pat=385;ar3=3000;ar2=1.33;ar7=500;ar33=1;
if (a>0): #z
v3=v3+1;v70+=1;v71+=1;
if ((bitcoin[-a][1]/(bitcoin[-a-at1][1])>1.013)or(bitcoin[-a][1]/bitcoin[-a-at2][1]>1.01)or(bitcoin[-a][1]/bitcoin[-a-at3][1]>1.006))and(t1[-1][0]==1)and(v3>450):
if (bitcoin[-a][1]/bitcoin[-a-at3][1]>1.006): v5+=1;
price12=bitcoin[-a][1];price13=bitcoin[-a][1];t1.append((0,0));f1.append((1,1));v71=0;v3=0;print(bitcoin[-a],'up',v3,a);
if (((bitcoin[-a-at1][1])/bitcoin[-a][1]>1.013)or(bitcoin[-a-at2][1]/bitcoin[-a][1]>1.01)or(bitcoin[-a-at3][1]/bitcoin[-a][1]>1.006))and(f1[-1][0]==1)and(v3>450):
if (bitcoin[-a-at3][1]/bitcoin[-a][1]>1.006): v5+=1;
price12=bitcoin[-a][1];price13=bitcoin[-a][1];t1.append((1,1));f1.append((0,0));v71=0;v3=0;print(bitcoin[-a],'down',v3,a);
if (v3==350)and(f1[-1][0]==1)and(v71==350):#and((bitc[-a]/min(bitc[-a-50:-a])<1.003)or(price12<bitcoin[-a][1]))
sum12+=sum12*(bitcoin[-a][1]-price12)/bitcoin[-a][1];v44+=1;#sum12*=0.9995
price15=price12;price12=bitcoin[-a][1];t1.append((1,1));f1.append((1,1));v3=0;v71=1351;print(sum12,a,bitcoin[-a]);
if price12/price15>1.01: print(sum12,bitcoin[-a],price15,'up');v4+=1;
if ((v3==350)and(t1[-1][0]==1)and(v71==350))or((v3<-350)and(t1[-1][0]==1)and(100<v71<350)and(price12/price13>1.1)):#and((max(bitc[-a-50:-a])/bitc[-a]<1.003)or(price12>bitcoin[-a][1]))
sum12+=sum12*(-bitcoin[-a][1]+price12)/bitcoin[-a][1];v44+=1;#sum12*=0.9995
price15=price12;price12=bitcoin[-a][1];t1.append((1,1));f1.append((1,1));v3=0;v71=1351;print(sum12,a,bitcoin[-a]);
if price15/price12>1.01: print(sum12,bitcoin[-a],price15,'down');v4+=1;
if (10<v3<350)and(f1[-1][0]==1)and(v71<350)and(price12/bitcoin[-a][1]>act):
sum12+=sum12*(bitcoin[-a][1]-price12)/bitcoin[-a][1];v44+=1;v40+=1;#sum12*=0.9995
price15=price12;price12=bitcoin[-a][1];t1.append((1,1));f1.append((1,1));v71=1351;print(sum12,bitcoin[-a],a,act);
v3=900;
#if price12/price15<0.98: print(sum12,bitcoin[-a],price15,'up');
if (10<v3<350)and(t1[-1][0]==1)and(v71<350)and(bitcoin[-a][1]/price12>act):
sum12+=sum12*(-bitcoin[-a][1]+price12)/bitcoin[-a][1];v44+=1;v40+=1;#sum12*=0.9995
price15=price12;price12=bitcoin[-a][1];t1.append((1,1));f1.append((1,1));v71=1351;print(sum12,bitcoin[-a],a,act);
v3=900;
#if price15/price12<0.98: print(sum12,bitcoin[-a],price15,'down');
if (bitcoin[-a][1]<price13)and(t1[-1][0]==1)and(v71<350):
price13=bitcoin[-a][1];
#if price12/price13>1.003: act=0.998;print(price13,price12,a,act);
#if price12/price13>1.007: act=0.996;print(price13,price12,a,act);
if (bitcoin[-a][1]>price13)and(f1[-1][0]==1)and(v71<350):
price13=bitcoin[-a][1];
#if price13/price12>1.003: act=0.998;print(price13,price12,a,act);
#if price13/price12>1.007: act=0.996;print(price13,price12,a,act);
return a,sum12;
Далее следует очень короткий боевой алгоритм
import math
ss35=[450];ss71=[450];ss99=[0];t1=[(0,0)];f1=[(0,0)];ss70=[0];pn17=[];tk=0;te=0;pn12=[];
t1=[(1,1)];f1=[(1,1)];
t1=[(0,0)];f1=[(1,1)];
#ss35=[348];ss71=[348];
#ss35=[7];ss71=[7];
tt00=[0];tt11=[1];neworder=[]
def bitcoin5():
ss35[-1]=ss35[-1]+1;ss71[-1]=ss71[-1]+1;
if ((bitcoin777[-1]/(bitcoin777[-1-175])>1.013)or(bitcoin777[-1]/bitcoin777[-1-350]>1.01)or(bitcoin777[-1]/bitcoin777[-1-50]>1.006))and(t1[-1][0]==1)and(ss35[-1]>450):
t1.append((0,0));f1.append((1,1));print(bitcoin777[-1],'up',ss35[-1]);ss71[-1]=0;ss35[-1]=0;pn17.append((bitcoin777[-1]));tt00[-1]=7;tt11[-1]=9;
if (bitcoin777[-1]/bitcoin777[-1-50]>1.006): pn12.append(1)
if (bitcoin777[-1]/bitcoin777[-1-350]>1.01): pn12.append(2)
if (((bitcoin777[-1-175])/bitcoin777[-1]>1.013)or(bitcoin777[-1-350]/bitcoin777[-1]>1.01)or(bitcoin777[-1-50]/bitcoin777[-1]>1.006))and(f1[-1][0]==1)and(ss35[-1]>450):
t1.append((1,1));f1.append((0,0));print(bitcoin777[-1],'down',ss35[-1]);ss71[-1]=0;ss35[-1]=0;pn17.append((bitcoin777[-1]));tt00[-1]=7;tt11[-1]=9;
if (bitcoin777[-1-50]/bitcoin777[-1]>1.006): pn12.append(1)
if (bitcoin777[-1-350]/bitcoin777[-1]>1.01): pn12.append(2)
if (ss35[-1]==350)and(f1[-1][0]==1)and(ss71[-1]==350):#and((bitcoin777[-1]/min(bitcoin777[-1-50:])<1.003)or(pn17[-1]<bitcoin777[-1]))
t1.append((1,1));f1.append((1,1));ss35[-1]=10;ss71[-1]=1351;print(bitcoin777[-1]);pn17.append(bitcoin777[-1]);#closed_cur();
tt00[-1]=9;tt11[-1]=9;print(bitcoin777[-1],'closed')
if (ss35[-1]==350)and(t1[-1][0]==1)and(ss71[-1]==350):#and((max(bitcoin777[-1-50:])/bitcoin777[-1]<1.003)or(pn17[-1]>bitcoin777[-1]))
t1.append((1,1));f1.append((1,1));ss35[-1]=10;ss71[-1]=1351;print(bitcoin777[-1]);pn17.append(bitcoin777[-1]);#closed_cur();
tt00[-1]=9;tt11[-1]=9;print(bitcoin777[-1],'closed')
if (10<ss35[-1]<350)and(f1[-1][0]==1)and(ss71[-1]<350)and(pn17[-1]/bitcoin777[-1]>1.002):
t1.append((1,1));f1.append((1,1));ss35[-1]=900;ss71[-1]=1351;print(bitcoin777[-1]);pn17.append(bitcoin777[-1]);#closed_cur();
tt00[-1]=9;tt11[-1]=9;print(bitcoin777[-1],'closed')
if (10<ss35[-1]<350)and(t1[-1][0]==1)and(ss71[-1]<350)and(bitcoin777[-1]/pn17[-1]>1.002):
t1.append((1,1));f1.append((1,1));ss35[-1]=900;ss71[-1]=1351;print(bitcoin777[-1]);pn17.append(bitcoin777[-1]);#closed_cur();
tt00[-1]=9;tt11[-1]=9;print(bitcoin777[-1],'closed')
if (tt11[-1]==0):
tt11[-1]='no';margn();
if (tt00[-1]==7):
tt00[-1]='nothing';cl();
return 1;
Код который снимает каждые 10 секунд данные и выполняет алгоритм
pokt77=[0];yjj2=[0];
def t77t():
while True:
time.sleep(10);pokt77[-1]+=1;
try:
bitcoin777.append(float(client7.get_margin_price_index(symbol='BTCUSDT')['price']));
etherium.append(float(client7.get_margin_price_index(symbol='ETHUSDT')['price']));
bitc79.append((etherium[-1],bitcoin777[-1]));
bitcoin5();
except: yjj2.append(len(bitcoin777));
pokt77=[0];
h77t = threading.Thread(target=t77t)
h77t.daemon = True
h77t.start()
Вот пример работы бэктестинга вначале было 3000 условных единиц.
(0, 44176.30092009) up 0 13444
15482.1554049406 (0, 44083.79261031) 13414 1.002
(0, 43918.98765765) down 0 13384
15486.4464856765 13034 (0, 43906.81831189)
(0, 44149.79603942) up 0 7473
15448.582550742021 (0, 44042.11428356) 7298 1.002
(0, 44042.11428356) down 0 7297
15413.17815152258 (0, 44143.27996018) 7248 1.002
(0, 43747.72086905) down 0 7148
15561.382015253886 6798 (0, 43331.07527447)
(0, 42804.28023472) down 0 6347
15528.933415600653 (0, 42893.72224053) 6317 1.002
(0, 42897.08071484) down 0 6307
15537.534773810892 5957 (0, 42873.33350122)
(0, 42422.71593519) down 0 5421
15506.078211311313 (0, 42508.77720723) 5343 1.002
(0, 42432.19175284) down 0 4343
15458.894293577649 (0, 42561.70405863) 4323 1.002
(0, 42705.55794822) up 0 4298
15420.831352487008 (0, 42600.66644521) 4263 1.002
(0, 42532.05973575) down 0 3170
15387.462677704612 (0, 42624.29316623) 3022 1.002
(0, 42443.32547419) down 0 2901
15504.292588844086 2551 (0, 42123.50114714)
(0, 42494.8470913) up 0 1857
15676.461661988647 1507 (0, 42972.03464002)
15676.461661988647 (0, 42972.03464002) 42494.8470913 up
(0, 43276.31468801) up 0 142
(91, 15676.461661988647)
Суть алгоритма что если биткоин падает или растет за час на 1.01 раз (процент) то мы покупаем если за полчаса на 1.013 раз покупаем или за 7 минут на 1.006 раз.
А через 350 тиков (то есть 1 час) продаем. При этом хардкорно прописан стоплосс - 1.0002 раз.
Вот ссылка на гитхаб с данными.
Комментарии (35)
Vetto
16.01.2022 02:59+1Предлагаю попробовать этот алгоритм на других волатильных парах. Есть ещё много других криптовалют, вдруг комиссии не съедят прибыль.
blue_limon Автор
16.01.2022 03:04Возможно!!, только сигнал на продажу или покупку идет с волантильности биткоина!
Nacreous1991
16.01.2022 03:04+19Оформление кода, просто жесть, не думал что на питоне такое можно написать. Почитайте PEP8 или используйте автоформатирование. PEP8 прямо говорит, что так делать нельзя:
Compound statements (multiple statements on the same line) are generally discouraged:
# Correct:
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
Rather not:
# Wrong:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()
Теперь по поводу логики. Если бы вы использовали не фиксированный sleep, а вычитали из 10 секунд время выполнения вы бы получали ровно 360 «свечей» за час.
Далее. На github в файле ’bittick.py’ не указана библиотека и как создается клиент. Что вообще за переменная ’client7’. Пологаю что это библиотека python-binance.
`get_margin_price_index` возвращает вам индекс цены, а не цену на бирже. Почитайте www.binance.com/en/support/faq/52b5970fc4e54994a7869d9b0db13754
Вам же нужно получать данные из ордер бука. Хотя бы topBid и topAsk, т.к. пологаю ваша стратегия будет покупать по маркету. Поэтому при покупке вы будете исполнять по topAsk а при продаже по topBid. Ну и комиссии надо обязательно учитывать при бэктестах.
P.S. Не обижайтесь на мой комментарий. Учитесь и у вас все получится
ZiggiPop
16.01.2022 03:09+3Помнится, в году эдак 2005-м один мой приятель задвигал про супералгоритмы торговли по индикаторам парой USDEUR на платформе MetaTrader4. Всякие Adaptive MA, Alligator и прочие Momentum.
Насколько я знаю, успешным брокером и звездой Forex он так и не стал, ага.
PKav
16.01.2022 04:32+4Один проскользнувший стоп вынесет всю полученную ранее прибыль. А проскальзывать он может очень сильно. К примеру, если кто то продает большое количество монет по маркету, то биржевые роботы, стоящие в стакане для удержания курса, резко разбегаются, цена пролетает вниз до 50%, и где то там уже срабатывает стоп. В результате на графике огромный фитиль вниз и вы без денег.
А вообще, трейдинг может быть только ручным. Все алгоритмы всегда сливают депозит. И, в целом, лучше заниматься инвестициями в долгосрок, собирать портфель из перспективных монет и терпеливо ждать роста.
Ryav
16.01.2022 05:29Так сами монеты (криптовалюты) — спекулятивный инструмент, о каких инвестициях вообще речь? Да и с чего это им расти? Если бы это была одна монета, тогда об этом ещё можно было бы говорить, но каждый день появляются десятки новых.
znsoft
16.01.2022 06:22Почему биток так вырос ?
Ryav
16.01.2022 06:27Потому что хайп. Но мы же говорим об ивнестициях, а на долгосроке вообще не факт, что у него хоть какая-то цена будет.
znsoft
16.01.2022 06:41для меня с 2012 по 2022 биток это долгосрок , правда я не спекулирую им.
но если под долгосроком понимать более 10 лет, то так то и акции крупных компании и прочие инструменты обрушивались за такие сроки
Ryav
16.01.2022 08:14И вы прям с 2012 начали вкладываться и регулярно пополняли всё это время, независимо от его стоимости? :)
А кто говорит об отдельных акциях? Смотрите на весь рынок в целом, а согласно историческим данным любая просадка восстанавливалась за 30 лет (последнее время так вообще быстро восстанавливаются).
PKav
16.01.2022 08:41-3Есть рыночные циклы, свечной анализ, уровни Фибоначчи... Весь этот технический анализ вполне себе работает, и чем больше временной интервал, тем лучше работает. Все почти как на фондовом рынке, только на порядок быстрее.
И растет практически любая монета, даже откровенная лажа. Все монеты плюс-минус следуют за биткоином в едином потоке, биржевые роботы ведут их. В долгом цикле сначала растет биткоин, потом на дорогой биткоин покупаются дешёвые монеты, резко вырастая на сотни и тысячи процентов, после чего весь рынок уходит на коррекцию. Главное тут не спешить и не жадничать, тогда все получится.
Ryav
16.01.2022 08:45+3Простите, конечно, но все эти гадания на свечах и тому подобное, никакого отношения к инвестициям не имеют. И было бы неплохо продемонстрировать публичный портфель, который на этих ваших уровнях Фибоначчи даёт доходность хотя бы на промежутке нескольких лет. В ином случае, это всего лишь совпадения.
PKav
16.01.2022 21:12Если бы это не работало, цена бы потом не приезжала чётко в нарисованное на графике перекрестие, которое рисовал месяц назад и уже забыл об этом. :) На крипторынке очень многими вещами управляют роботы. Удерживают цену, поддерживают адекватность показаний технических индикаторов, вызывают каскадные ликвидации маржинальных трейдеров со слишком большими плечами, и т.д. Имея достаточно крупный депозит можно заставить их проявить себя и немного узнать об их текущих настройках. И вот они, как раз, и ведут цену в соответствии со своими алгоритмами, которые поддаются анализу.
Портфель? Ну, из последнего я в марте-апреле покупал BNB по 285, Solana по 26 и Luna по 15. Понятное дело, что купил далеко не по самой низкой и продал далеко не по самой высокой цене, но суммарная прибыль составила около 400%.
jvmdude
16.01.2022 22:45>А вообще, трейдинг может быть только ручным
Я встречал якобы успешных "скальперов руками", но не очень верю в их консистентность.
Да и не скальперы они, а просто дэйтрейдеры. Настоящий скальп руками не успеешь ни посчитать, ни ордеры кинуть (как минимум 2 сразу, а если лестницей хочется?)
По моему опыту так наоборот, любой трейдинг должен быть автоматизированным. А то как обычно медленно набираешь, набираешь профит, потом какую-нибудь глупость делаешь против своих же правил и неделя-месяц насмарку.
Flux
16.01.2022 07:18+28Я конечно извиняюсь за свой французский, но этот код — просто леденящий душу п… ц. Если бы я преподавал студентам питон, то я бы показывал этот код и говорил «пишите как угодно, лишь бы не так».
Грамматика и смысловая нагрузка тоже так себе. В чём суть статьи-то? «У меня есть неработающая куча кода, держите»?
ganqqwerty
16.01.2022 09:26+2Мне интересно, а почему ребята, пишущие подобные инструменты, не торгуют собственно этими инструментами за комиссию? Это же исполнение мечиы инвестора было бы – отдавать риски и разделять прибыль.
unsignedchar
16.01.2022 10:36+4отдавать риски и разделять прибыль.
Мне звонили с подобным предложением. Правда, не алгоритм предлагали, а целого человека-тренера. Но смысл тот же - если я выигрываю - должен им небольшой процент. Если проигрываю - ок, не должен ;)
Думаю, человека-тренера продать проще.
tempick
16.01.2022 20:12если я выигрываю — должен им небольшой процент. Если проигрываю — ок, не должен ;)
А если я проигрываю — мне тренер возвращает деньги?) Иначе ответственность как-то не сбалансированаtmaxx
16.01.2022 22:05+3Классика же.
"Предсказываю пол будущего ребёнка. Гарантия - 100%! Если ошибусь - верну деньги!"
ganqqwerty
17.01.2022 01:12В мире финансовых инструментов она никогда не сбалансирована. Весь смысл любого банкинга, инвест-менеджмента и прочего упрощенно состоит в том, что ты даешь этим людям свои деньги, чтобы они на них трейдили. Если они выиграют – с тобой поделятся, если проиграют – ты сам понимаешь, это же рынок, ничего не гарантировано.
Nacreous1991
16.01.2022 15:03Торгуют. Ты даёшь ключ от биржи и в конце месяца отдаешь часть прибыли если она была
jvmdude
16.01.2022 22:48Сервисов автоследования уже полно - комон.ру, у алоров, у тинькова (самый хамский)...
Другой вопрос - то что в статье никуда не годится по очевидным причинам.
Хотя в некоторые периоды и такая стратегия будет в профит работать.
pohjalainen
16.01.2022 10:39+8Уберите тег "криптография". И так уже невозможно ничего в интернетах по этой тематике найти - везде койны.
Ninil
16.01.2022 13:56+1ИМХО, если пишете статью про алгоритмы, то либо опишите его сначала на «человеко-понятном» языке, либо, уж если ограничиваетесь кодом, пишите внятный и читаемый код
gban
16.01.2022 18:04Какие там еще алгоритмы... Один известный хомяк Мистер Гокс (Mr. Goxx) занимался торговлей криптовалютой прямо из своей хомячьей клетки, и вроде бы даже портфель увеличил на 30% (недвано помер, хомяки живут недолго).
R0DIPIT
16.01.2022 19:48-1Хоть и алгоритм не самый хитрый, но все равно спасибо за него, мало кто делится инфой в трейдинге
jvmdude
16.01.2022 21:57Описание алгоритма коротким видео:
http://img2.joyreactor.cc/pics/post/webm/гифки-трейдер-демонстрация-ребенок-7149992.webm
kai3341
16.01.2022 23:40+1Дорогой автор! Если этот код прогнать через обсускатор -- он станет более читаемым. С таким успехом можно было выкладывать байткод -- он и компактнее, и читаемость не слишком пострадает, да ещё и решит проблему чувствительности к форматированию
z3ro
выглядит интересно, но ничего не понятно:( не все торгуют на биржах биткоинами