Главная » Правописание слов » Как написать бота для биржи криптовалют

Слово Как написать бота для биржи криптовалют - однокоренные слова и морфемный разбор слова (приставка, корень, суффикс, окончание):


Морфемный разбор слова:

Однокоренные слова к слову:

Простой бот для торговли на криптобирже

Всем привет! Сегодня мы напишем своего первого боевого торгового робота для игры на бирже. Криптобирже. Почему криптобирже?

а) хайповая тема;
б) у них как-то все попроще.

Во-первых, хочу сразу предупредить любителей казино «три топора»: на машину вы завтра не заработаете. Статья больше о том, как начать писать своих роботов, поэтому алгоритм будет примитивный, но рабочий.

Во-вторых, Вы заработаете. Просто немного.

— Этот запах, что это? Чем пахнет?
— Одеколоном?
— Нет…
— Возможностями?
— Нет. Деньгами.
— Оу….всё ясно
— Запах денег!
— Понятно.

Для самых нетерпеливых, весь код на гитхабе exmo-exchange-trade-bot.

Этап №1: Биржа.

Торговать мы будем на бирже EXMO. Причин несколько. Биржа популярна на просторах СНГ, она русскоязычная и поддерживает ввод рублей, имеет возможность создания пар к рублю.

Среди минусов — неудобный процесс ввода рублей, приличная комиссия, мало торгующихся пар.

Для нас главное, что она имеет готовые решения для работы с их API. Это безусловно облегчит нашу работу.

Разумеется, на бирже нужно зарегистрироваться и внести немного денег. Я для примера внес 5$.

Далее в личном кабинете Вы получите ключи для доступа к API.

Я буду использовать клиент для NodeJS (поэтому потребуется установить nodejs и npm).

На своем компьютере создаем новую папку и файлом, в котором будет наш торговый робот (напр. exmo/index.js), открываем консоль и делаем последние стандартные приготовления.

Переходим в папку с нашим проектом и пишем — npm init, далее на все вопросы нажимаем клавишу enter.

Пока пакеты устанавливаются, создадим еще один файлик, назовем его exmo.js и наполним вот этим содержимым.

Этот фаил содержит адрес API, подключение дополнительных библиотек, которые нам нужны для работы с API и основную функцию для запросов к API.

Всё, мы все подготовили и теперь можем непосредственно приступить к созданию персональной «машины по зарабатыванию денег» 😉

Этап №2: Код

Открываем наш index.js и подключим фаил exmo.js:

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

Теперь создадим две переменные:
currency1 — это ЧТО покупаем;
currency2 — валюта, за которую покупаем.

Я хочу купить биткоины за доллары:

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

Идем по адресу https://api.exmo.com/v1/pair_settings/ ищем свою пару (для меня это BTC_USD) и смотрим первый параметр — min_quantity — 0.001

И ещё немного переменных:

количество минут, через которое неисполненный ордер на покупку будет отменен currency1

биржевая комиссия (0.002 = 0.2%)

период времени (в минутах) для вычисления средней цены (это понадобится для нашего алгоритма)

количество currency2 для покупки currency1 при единоразовой сделки (я закинул 5$ — ими и буду оперировать)

желаемое количество прибыли с каждой сделки (0.001 = 0.1%)

Если расходится время биржи с текущим

Для удобства объединяем нашу пару через _

Для теста можете запросить информацию о себе:

Переходим в консоль и запускаем

Если все сделано верно, то Вы увидите информацию по Вам!

Все работает и можно переходит к самому интересному — функции, которая будет генерировать нам бабки.

Итак, я выше уже говорил что наш алгоритм будет тупым, сейчас Вы поймете на сколько)

Весь фокус состоит в том, чтобы взять историю завершенных сделок за какой-либо период — у нас за это отвечает переменная avgPricePeriod — и посчитать среднюю цену, за которую была продана currency1. За эту среднюю цену мы и выставим свой ордер.

Итак, приступим. Пишем нашу функцию trade()

Сначала получим список наших открытых ордеров:

1) проверяем есть ли у нас открытые ордера по нашей паре с помощью api-метода user_open_orders. Если есть и они на продажу,

то мы просто ждем, когда они исполнятся ( иногда до скончания веков). Если есть ордера на покупку, просто их запоминаем.

2) Проверяем, если у нас есть открытые ордера на покупку.

Перебираем все ордера и получаем историю по ним с помощью метода order_trades, передав туда id ордера.

Здесь может быть 3 варианта:

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

2) при втором варианте нам нужно проверить не слишком ли долго висит наш ордер. Цены меняются быстро и, возможно, средняя цена уже не актуальна. Для этого мы завели переменную orderLifeTime, где указываем, сколько наш ордер должен висеть в минутах.

Если время вышло, то отменяем ордер с помощью метода order_cancel, передав ему id ордера.

3) если время ещё не вышло, то мы просто надеемся, что сможем купить по нашей цене.

Все, с открытыми ордерами мы разобрались, теперь наш робот знает, что делать с ордерами когда их создаст. Половина дела сделано.

Итак, блок если у нас нет ордеров.

Получаем информацию по нашему аккаунту с помощью метода user_info:

Для удобства запишем балансы по нашим парам:

Проверим, есть ли currency1, которую можно продать?

Если да, нам нужно высчитать курс продажи.

Нужно продать всю валюту, которую купили, на сумму которую купили плюс прибыль за вычетом комиссии биржи.

Важный момент! Валюты у нас меньше, чем купили — биржа взяла комиссию.

При создании ордеров, методу order_create нужно передать параметры:

Мы хотим продать — в типе указываем sell.

и отправляем запрос, если все верно, то Вы увидите запись «Создан ордер на продажу»

Здесь все. Если у нас была валюта, мы просто создали ордер на его продажу.

Теперь переходим к самому интересному блоку: случай, если у нас нет currency1(btc) и мы хотим ее купить за нашу currency2 (usd).

Для начала проверим, достаточно ли денег на балансе в валюте currency2.

Если есть, то нам нужно получить среднюю цену, за которую продают currency1(btc) за промежуток времени, который мы указали в avgPricePeriod.

Немного лирики:
У Exmo есть метод ticker со статистикой и объемами торгов по валютным парам. В статистике указана средняя цена за последние 24 часа. Однако разница средней цены и той, по которой идут торги сейчас может очень отличатся.

Из за этого мы можем долго ждать, когда исполниться ордер на продажу.

Мы сделаем свой велосипед.

У Exmo есть метод trades, он возвращает список сделок по валютной паре.

Мы возьмем совершенные сделки за интересующий нас avgPricePeriod и из них посчитаем среднюю цену.

Это не идеальный вариант, но он покажет реальные цены, по которым продают и покупают.

Например, на момент написания статьи средняя цена BTC_USD — 8314, при этом покупка на бирже осуществляется по цене 7970.

Если мы выставим ордер по средней цене, он сразу же исполнится по минимальной цене, значащейся в ордерах на продажу.

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

Итак, обратимся к методу trades и запросим у него статистику по нашей паре currentPair:

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

И посчитаем среднюю цену.

Средняя цена у нас есть, но нам нужно ее немного подправить — вычесть комиссию биржи stockFee и добавить желаемый профит. Таким образом, получив цену ниже средней цены рынка, мы купим чуть больше валюты, так как биржа впоследствии забирает ее часть;

Получаем конечное количество, которое нам нужно купить.

Проверяем можно ли купить такое количество валюты (не нарушается ли минимальная сумма покупки).

Если наше количество больше, то формируем параметры для метода order_create, только на этот раз уже с типом buy.

Теперь нужно поставить нашу функцию на таймер (диапазон — раз в 5 секунду, например) и можем запускать.

Думаю у вас возник резонный вопрос «Сколько же денег так можно заработать?»

За одну операцию с 5$ я зарабатываю примерно 2-3 цента. Это связано с примитивностью алгоритма, который работает в случае, если цена колеблется в определенном диапазоне (а это почти всегда не так на криптобиржах). За сутки происходит порядка 10-20 операций (при хороших раскладах). Посчитать можете сами;)

Но мы же не ради денег код мастерим)

Ещё раз ссылка на гитхаб с полной версией бота и комментариями.
https://github.com/v-florinskiy/exmo-exchange-trade-bot

Эта моя первая статья — не судите строго)

P.S.: Для тех, кто не работал с node, ваш скрипт естественно будет работать, пока отрыта консоль.

Чтобы ваш робот работал 24/7, вам нужен какой-нибудь vps: там вы ставите nodejs, npm и, например, pm2. С помощью этой утилиты скрипт продолжит работу, даже если консоль закрыта.

Источник

Разработка собственного торгового бота для криптовалюты

Рад приветствовать всех читателей топового блога о крипте!

Как все начиналось

Когда в размеренных буднях фрилансера настает полный штиль и заказов становится все меньше, поневоле обращаешь больше внимания на то, что происходит вокруг:

Последний работодатель пропал с письмом о том, что с разработки профильного ПО их команда переключается на программы, связанные с криптовалютами. И даже Топовый блог о хайпах стал не менее Топовым блогом о крипте 🙂

Я на минутку закрыл глаза и дал себе помечтать – чем занялся бы, если бы смог обеспечить себе достаточный пассивный доход. Как распорядился бы временем, которое не будет больше целиком проводиться в работе «на дядю», пусть даже и удаленно. Ради любопытства вбил в поисковик «криптобиржа», и среди прочих новостей взгляд зацепился за строчку о закрытии BTC-e. Еще через несколько минут после пары запросов в гугле я вышел на «наследника» соскамившейся биржи – Wex – и наблюдал размеренные волны «японских свечей» графика. И какой-то неугомонный исследователь внутри шепнул: «Смотри, как это интересно! Попробуй, ты же сможешь!»

Что именно я должен смочь и что вообще делать на бирже, я тогда представлял с трудом, но интерес не отпускал. С нулевыми знаниями финансового анализа и таким же нулевым чутьем я понимал, что торговать вручную – не вариант. Небольшой, но стабильный заработок без нервов и метания «а вот сейчас купить или не купить, продать или не продать?» казался идеальным вариантом. И еще через пару часов раздумий паззл, громко щелкнув, сложился.

Торговый бот! Вот она, мечта каждого ленивого уважающего себя трейдера! Не знающая усталости программа, торгующая на бирже 24 часа в сутки 7 дней в неделю. И, разумеется, постоянно приумножающая депозит.

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

Знакомство с биржей

Еще день или два прошли в изучении биржи и методов работы с ней. Я читал инструкции по инструментам разработчика (API), и, низкий поклон создателям биржи, там же нашел много примеров. Обнаружились готовые коды и на Python, и на PHP, и на С++/C#, и даже наработки для Excel (привет, старый добрый Visual Basic). Через некоторое время я уже мог смотреть на сделанное собственными руками окошко с динамикой курсов покупки и продажи.

Смотреть на статистику было приятно, и особых знаний такая мини-программа тоже не требовала, но к цели это не приблизило меня ни на шаг. И от публичного API я перешел к изучению торгового API. Он позволял:

Баланса еще не было. Поняв, что от теории пора переходить к практике, я зарегистрировался на бирже и пополнил счет, переведя с кошелька Advanced Cash оставшиеся после старых забав с хайпами 350 долларов. Еще день или два ушли на то, чтобы разобраться с тем, как получать ключи для торговли, отправлять через программу команды на биржу и как настроить аутентификацию через HTTP-запросы. Поначалу понятного было мало, но примеры чужих кодов, собственное упорство и всезнающий гугл помогли успешно пройти это испытание.

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

Круговорот валюты

И вот тут началось самое интересное. Я примерно понимал принцип работы программы, но четкой стратегии торговли еще не было. Да, разумеется: купить подешевле и продать подороже. Но когда и сколько купить? Когда и сколько продать? Как найти оптимальную точку входа и начала торгов? Все эти вопросы и еще с десяток других роем рассерженных ос клубились в голове. И ответов на них не было.

Дисклеймер: все, что касается выбранной мной стратегии, является лишь личным мнением человека, еще очень и очень далекого от принципов торговли. Не пробуйте подобное, не осознавая последствий. И не ругайте автора за незнание базовых принципов чего бы то ни было. Любым идеям и мнениям я буду рад в комментариях.

Я попробовал рассмотреть ситуацию с «механической» позиции. Иными словами, бот торгует криптовалютой полностью самостоятельно, без моего участия. С момента включения и далее постоянно. Что в это время происходит с ценой? Правильно: она может расти или падать.

Если цена падает, нужно закупить какое-то количество криптовалюты. Чтобы потом при росте курса продать ее по более выгодной цене. Если цена растет, нужно продавать купленное ранее. Все было логичным, за исключением одного «но»: наблюдая за скачкообразным ростом цены на биткоин, я подумал, что можно покупать монеты и по текущей цене, не ожидая снижения – при росте их все равно получится продать более выгодно. Впрочем, этот момент для меня до сих пор остается спорным, и в самом конце я объясню, почему.

Стоимость ордера решил сделать минимальным для данной биржи – 0,001 BTC, и сразу столкнулся с тем, что продать купленную крипту и получить обратно доллары не получится. Биржа берет комиссию в 0,2% от каждой сделки, поэтому на балансе после исполненного ордера на покупку окажется не 0,001, а 0,00998 BTC. В итоге цену ордера увеличил до 0,0011 BTC. При дальнейшем падении цены бот должен был снова и снова закупать 0,0011 BTC, пока на балансе есть средства для этого, а с приближением баланса к нулю – перестать закупать крипту и ждать исполнения ордеров на продажу. Если баланс пополнится – снова начать закупать. Шаг изменения цены для выставления нового ордера я определил в 10 долларов.

При росте цены бот, соответственно, должен продавать крипту и получать взамен фиат, но уже с определенной прибылью. Прибыль я ограничил 1% от каждой пары сделок (закупка + продажа). Жадничать и стремиться к большей прибыли не стал, так как в этом случае роста курса пришлось бы ждать долго. В то же время и уменьшать прибыль до минимума не имело смысла, так как большую ее часть «съедала» бы двойная комиссия – с покупки крипты и с ее последующей продажи.

Алгоритм работы бота для торговли криптовалютой становился все яснее и яснее:

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

В теории все должно было замечательно работать. Заставив мозг хорошенько выложиться, я даже смог обучить бота всем этим премудростям. Время летело незаметно, и от идеи до первой стратегии и до ее реализации в строчках кода прошли уже без малого две недели. Усталость давала о себе знать, но в один прекрасный момент я внезапно осознал: все, бот готов. Мозг молил о передышке, но желание опробовать программу в действии было гораздо сильнее 🙂

Испытание боем

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

Ох, как я завидовал в те дни мирно дремавшему рядом кошаку…

Не забросить всю мою затею помогла только появившаяся «спортивная злость». Если уже потратил столько времени на изучение, стратегию, код, так уж доделай все до конца!

И прогресс с каждым днем становился заметнее и заметнее. Программа все реже вылетала с ошибками, а потом я и вовсе мог спокойно спать всю ночь, а бот работал без сбоев. Это была маленькая, но такая ценная победа! При текущих колебаниях курса накапливалось 10-15 ордеров на продажу, но в течение дня, как правило, они все исполнялись. И баланс ежедневно подрастал на доллар-полтора. Через некоторое время я осмелел и увеличил стоимость торгуемых ордеров. Прирост баланса возрос уже до 3-4-5 долларов в день. В абсолютных цифрах, разумеется, это немного. Но в относительных накапливалась неплохая прибыль – 1-1,5% от суммы баланса за сутки.

Конечно, со временем находились и другие, незаметные при начальной отладке программы, «косяки». К примеру, она вылетала с ошибкой при неправильном ответе от сервера биржи (такое случается, когда торги ведутся слишком активно). Или файл со списком ордеров, предназначенный для первоначальной загрузки бота при сбое – при выключении электричества или перезагрузке компьютера – был «криво» пересохранен программой как раз во время выключения электричества. Шанс подобного совпадения – минимален, но оно случилось, и такие случаи тоже нужно учитывать. Спас вовремя сделанный бэкап.

А после я стал «счастливым» обладателем BTC по цене в 7500-7700 долларов. Так ли это плохо? Не думаю. С одной стороны, за время работы бот вывел баланс в полный безубыток, даже если я продам крипту по текущей цене. С другой – я верю, что курс биткоина вернется на прежний уровень и дальше будет расти, и тогда бот продолжит приносить небольшую, но ежедневную прибыль.

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

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

Вместо заключения

Искренне надеюсь, что этот рассказ будет для кого-то полезным.

Он не о том, как можно научиться торговать или программировать… Вовсе нет. Я просто хотел рассказать вам о том, как важно пробовать себя в чем-то новом и не бояться неизвестного, ставить новые цели и не отказываться от старых.

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

Хотите зарабатывать на крипте? Подписывайтесь на наши Telegram каналы!

Источник

Пошаговое руководство по созданию торгового бота на любом языке программирования

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

Часто можно встретить статьи, которые называются примерно так: «10 проектов, которые нужно реализовать программисту». Часто в списки этих статей входят торговые боты. Я считаю, что разработка торгового бота — это достойное вложение сил. Поэтому я решил уделить некоторое время тому, чтобы написать учебное руководство об этом.

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

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

Я буду демонстрировать примеры, написанные на псевдокоде. Поэтому вы сможете читать это руководство и тут же писать собственного бота на выбранном вами языке программирования.

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

Шаг 1. Выбираем оружие

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

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

Шаг 2. Ищем поле битвы

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

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

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

Более «традиционными» активами можно торговать только в определённые временные промежутки, и часто — только по будним дням. Рынки акций, например, обычно открыты с 9 утра до 4 вечера и по выходным они не работают. Рынки FOREX, хотя и могут работать круглосуточно, обычно закрыты в выходные.

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

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

И ещё, что так же важно, как и всё остальное, я порекомендовал бы оценить объём торгов биржи. Биржи с низкими объёмами имеют свойство «отставать» от ценовых движений. На них, кроме того, сложнее бывает выполнять лимитные заявки (подробнее об этом мы поговорим ниже).

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

Шаг 3. Строим лагерь

Если биржа — это поле битвы, то теперь мы поговорим о том месте, из которого будем отправлять на поле битвы свои войска. Кстати, мне, пожалуй, пора завязывать с такими аналогиями.

Здесь я говорю о сервере. Код бота должен выполняться на некоем сервере, что позволит боту отправлять запросы к API биржи.

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

Тут у меня есть два предложения:

Но большинство создателей ботов, вероятно, остановят свой выбор на каком-нибудь провайдере облачных услуг вроде AWS, Azure, GCS или Digital Ocean.

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

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

Шаг 4. Создаём бота

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

▍Простейший бот

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

У нашего бота будут некоторые ограничения:

▍Механизм принятия решений

Вот простая диаграмма, дающая общий обзор функционирования нашего бота.

А теперь можно приступать к планированию архитектуры бота.

Нам, для начала, понадобится переменная, в которой будут храниться сведения о том, в каком именно состоянии находится бот в текущий момент. Это либо BUY, либо — SELL. Для хранения подобных сведений хорошо подойдёт логическая переменная или перечисление.

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

В нашем случае подобные значения будут константами. Нам понадобится 4 таких значения — по 2 на каждое состояние бота.

▍Пороговые значения для выполнения операции BUY (если бот находится в состоянии SELL)

▍Пороговые значения для выполнения операции SELL (если бот находится в состоянии BUY)

Теперь, после того, как у нас сформировалось общее понимание того, как функционирует бот, пришло время рассмотреть псевдокод.

▍Вспомогательные функции для работы с API

Первое, что понадобится боту, это возможности обмена данными с API биржи. Эти возможности мы реализуем с помощью нескольких вспомогательных функций:

Вышеприведённый код должен быть понятен без особых объяснений. Но, реализуя этот функционал, вы должны точно знать о том, какие именно данные нужно передать API при выполнении POST-запросов, инициирующих покупку или продажу чего-либо.

Часто, например, когда торгуют парой XAU/USD (золото и доллары США), при выполнении запроса можно указать или то, сколько золота нужно купить, или то, сколько долларов нужно продать. При выполнении подобных запросов очень важно чётко понимать смысл производимых действий.

▍Главный цикл бота

Теперь, когда мы подготовили вспомогательные функции, приступим к описанию действий бота. Для начала нам нужно создать бесконечный цикл, выполняемый с некоторой периодичностью. Предположим, нам нужно, чтобы бот пытался бы выполнить некую операцию каждые 30 секунд. Вот как может выглядеть такой цикл:

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

Обратите внимание на то, что пороговые значения в этом коде выбраны произвольным образом. Вам следует подобрать эти значения самостоятельно, в соответствии с применяемой вами торговой стратегией.

На каждой итерации цикла бот будет проверять своё текущее состояние (BUY или SELL) и будет пытаться выполнить торговую операцию, используя при анализе текущей ситуации жёстко заданные в его коде пороговые значения. Затем, если операция будет выполнена, бот обновит сведения о своём текущем состоянии и данные о цене, по которой была совершена последняя операция.

Шаг 5. Улучшаем бота

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

▍Журналы

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

Каждый шаг работы программы должен был сопровождаться примерно такими записями:

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

▍Идентификация трендов

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

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

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

▍База данных?

Простому боту, на самом деле, база данных не нужна. Ведь он оперирует весьма небольшими объёмами данных и хранит всю необходимую ему информацию в памяти.

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

▍Панель управления

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

Это потребует наличия у бота собственного серверного API, предназначенного для управления его функционалом.

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

Существует множество шаблонов панелей управления, а значит вам, если вы решите сделать что-то подобное, даже не придётся создавать такую панель с нуля. Взгляните, например, на Start Bootstrap и Creative Tim.

▍Тестирование стратегий на исторических данных

Многие биржи дают клиентам доступ к историческим ценовым данным. Кроме того, если вам нужны такие данные, их обычно несложно достать.

Их использование весьма полезно для тестирования торговых стратегий перед их реальным применением. Это позволяет запустить симуляцию, используя исторические данные и «ненастоящие» деньги. Благодаря этому можно узнать о том, насколько удачно показали бы себя пороговые значения, и, если нужно, поменять эти значения.

▍Дополнительные сведения о пороговых значениях и заявках

При размещении заявок нужно учитывать несколько моментов.

Во-первых, нужно знать о том, что существуют два типа заявок: лимитные и рыночные. Если вы совсем ничего об этом не знаете — вам, определённо, стоит почитать специальную литературу. Я тут объясню эти идеи буквально в двух словах.

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

Лимитные заявки, с другой стороны, это заявки, которые размещают, указывая цену, которая ниже рынка (в случае с заявками на покупку), или выше рынка (в случае с заявками на продажу). При этом нет гарантии того, что эти заявки будут исполнены, так как цена может не достигнуть заданного значения.

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

Кроме того, к таким заявкам обычно применяются более низкие комиссии, чем к рыночным. Это так из-за того, что к рыночным заявкам обычно применимо то, что называется «taker fee» («комиссия получателя»), а к лимитным заявкам — то, что обычно называется «maker fee» («комиссия создателя»).

Причины, по которым эти комиссии называются именно так, заключаются в том, что тот, кто размещает рыночную заявку, просто принимает («taking») текущую рыночную цену. А лимитные заявки находятся за пределами рыночных цен, они добавляют рынку ликвидности и, в результате, «создают рынок», за что их создатели вознаграждаются более низкими комиссиями.

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

И, завершая разговор о комиссиях, хочу отметить, что задавая значение PROFIT_THRESHOLD нужно учитывать и комиссии.

Для того чтобы получить прибыль, бот должен сначала выполнить операцию BUY, а потом — операцию SELL. А это значит, что комиссия будет взята два раза.

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

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

Итоги

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

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

Я рассказал вам о разработке торговых ботов всё, что хотел. Надеюсь, теперь вы сможете создать собственного бота.

Источник

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

Какие вы еще знаете однокоренные слова к слову Как написать бота для биржи криптовалют:



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *