Алгоритм торговли на бирже криптовалют -26


В 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):

  1. z3ro
    /#23945457 / +1

    выглядит интересно, но ничего не понятно:( не все торгуют на биржах биткоинами

  2. Vetto
    /#23945479 / +1

    Предлагаю попробовать этот алгоритм на других волатильных парах. Есть ещё много других криптовалют, вдруг комиссии не съедят прибыль.

    • blue_limon
      /#23945489

      Возможно!!, только сигнал на продажу или покупку идет с волантильности биткоина!

  3. Nacreous1991
    /#23945487 / +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. Не обижайтесь на мой комментарий. Учитесь и у вас все получится

  4. ZiggiPop
    /#23945493 / +3

    Помнится, в году эдак 2005-м один мой приятель задвигал про супералгоритмы торговли по индикаторам парой USDEUR на платформе MetaTrader4. Всякие Adaptive MA, Alligator и прочие Momentum.

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

    • Elsajalee
      /#23945629 / +13

      Зато алгоритмы продаёт и на жизнь хватает.

  5. PKav
    /#23945571 / +4

    Один проскользнувший стоп вынесет всю полученную ранее прибыль. А проскальзывать он может очень сильно. К примеру, если кто то продает большое количество монет по маркету, то биржевые роботы, стоящие в стакане для удержания курса, резко разбегаются, цена пролетает вниз до 50%, и где то там уже срабатывает стоп. В результате на графике огромный фитиль вниз и вы без денег.

    А вообще, трейдинг может быть только ручным. Все алгоритмы всегда сливают депозит. И, в целом, лучше заниматься инвестициями в долгосрок, собирать портфель из перспективных монет и терпеливо ждать роста.

    • Ryav
      /#23945609

      Так сами монеты (криптовалюты) — спекулятивный инструмент, о каких инвестициях вообще речь? Да и с чего это им расти? Если бы это была одна монета, тогда об этом ещё можно было бы говорить, но каждый день появляются десятки новых.

      • znsoft
        /#23945645

        Почему биток так вырос ?

        • Ryav
          /#23945653

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

          • znsoft
            /#23945663

            для меня с 2012 по 2022 биток это долгосрок , правда я не спекулирую им.

            но если под долгосроком понимать более 10 лет, то так то и акции крупных компании и прочие инструменты обрушивались за такие сроки

            • znsoft
              /#23945665

              получается и золото тоже на хайпе растет ?

              • Ryav
                /#23945737

                А при чём тут золото? Это совсем другой по структуре актив.

            • Ryav
              /#23945739

              И вы прям с 2012 начали вкладываться и регулярно пополняли всё это время, независимо от его стоимости? :)

              А кто говорит об отдельных акциях? Смотрите на весь рынок в целом, а согласно историческим данным любая просадка восстанавливалась за 30 лет (последнее время так вообще быстро восстанавливаются).

      • PKav
        /#23945769 / -3

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

        И растет практически любая монета, даже откровенная лажа. Все монеты плюс-минус следуют за биткоином в едином потоке, биржевые роботы ведут их. В долгом цикле сначала растет биткоин, потом на дорогой биткоин покупаются дешёвые монеты, резко вырастая на сотни и тысячи процентов, после чего весь рынок уходит на коррекцию. Главное тут не спешить и не жадничать, тогда все получится.

        • Ryav
          /#23945775 / +3

          Простите, конечно, но все эти гадания на свечах и тому подобное, никакого отношения к инвестициям не имеют. И было бы неплохо продемонстрировать публичный портфель, который на этих ваших уровнях Фибоначчи даёт доходность хотя бы на промежутке нескольких лет. В ином случае, это всего лишь совпадения.

          • PKav
            /#23948039

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

            Портфель? Ну, из последнего я в марте-апреле покупал BNB по 285, Solana по 26 и Luna по 15. Понятное дело, что купил далеко не по самой низкой и продал далеко не по самой высокой цене, но суммарная прибыль составила около 400%.

    • jvmdude
      /#23948381

      >А вообще, трейдинг может быть только ручным

      Я встречал якобы успешных "скальперов руками", но не очень верю в их консистентность.

      Да и не скальперы они, а просто дэйтрейдеры. Настоящий скальп руками не успеешь ни посчитать, ни ордеры кинуть (как минимум 2 сразу, а если лестницей хочется?)

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

  6. Flux
    /#23945687 / +28

    Я конечно извиняюсь за свой французский, но этот код — просто леденящий душу п… ц. Если бы я преподавал студентам питон, то я бы показывал этот код и говорил «пишите как угодно, лишь бы не так».

    Грамматика и смысловая нагрузка тоже так себе. В чём суть статьи-то? «У меня есть неработающая куча кода, держите»?

  7. ganqqwerty
    /#23945823 / +2

    Мне интересно, а почему ребята, пишущие подобные инструменты, не торгуют собственно этими инструментами за комиссию? Это же исполнение мечиы инвестора было бы – отдавать риски и разделять прибыль.

    • unsignedchar
      /#23945979 / +4

      отдавать риски и разделять прибыль.

      Мне звонили с подобным предложением. Правда, не алгоритм предлагали, а целого человека-тренера. Но смысл тот же - если я выигрываю - должен им небольшой процент. Если проигрываю - ок, не должен ;)

      Думаю, человека-тренера продать проще.

      • tempick
        /#23947899

        если я выигрываю — должен им небольшой процент. Если проигрываю — ок, не должен ;)
        А если я проигрываю — мне тренер возвращает деньги?) Иначе ответственность как-то не сбалансирована

        • tmaxx
          /#23948225 / +3

          Классика же.

          "Предсказываю пол будущего ребёнка. Гарантия - 100%! Если ошибусь - верну деньги!"

        • ganqqwerty
          /#23948721

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

    • Nacreous1991
      /#23946869

      Торгуют. Ты даёшь ключ от биржи и в конце месяца отдаешь часть прибыли если она была

    • jvmdude
      /#23948391

      Сервисов автоследования уже полно - комон.ру, у алоров, у тинькова (самый хамский)...

      Другой вопрос - то что в статье никуда не годится по очевидным причинам.

      Хотя в некоторые периоды и такая стратегия будет в профит работать.

  8. pohjalainen
    /#23945985 / +8

    Уберите тег "криптография". И так уже невозможно ничего в интернетах по этой тематике найти - везде койны.

  9. Ninil
    /#23946627 / +1

    ИМХО, если пишете статью про алгоритмы, то либо опишите его сначала на «человеко-понятном» языке, либо, уж если ограничиваетесь кодом, пишите внятный и читаемый код

  10. gban
    /#23947501

    Какие там еще алгоритмы... Один известный хомяк Мистер Гокс (Mr. Goxx) занимался торговлей криптовалютой прямо из своей хомячьей клетки, и вроде бы даже портфель увеличил на 30% (недвано помер, хомяки живут недолго).

  11. R0DIPIT
    /#23947839 / -1

    Хоть и алгоритм не самый хитрый, но все равно спасибо за него, мало кто делится инфой в трейдинге

  12. niyaho8778
    /#23948383

    трейдинг в 2022 не на флеш лоанах на дэфи ? вы остали на года 3

  13. kai3341
    /#23948555 / +1

    Дорогой автор! Если этот код прогнать через обсускатор -- он станет более читаемым. С таким успехом можно было выкладывать байткод -- он и компактнее, и читаемость не слишком пострадает, да ещё и решит проблему чувствительности к форматированию

  14. BobArctor
    /#23952569

    Аллигатора уже построили?

    Вышла ли сущность в виде черепашки?