ChatGPT для трейдинга
ChatGPT - это увлекательный инструмент, и как только вы научитесь правильно использовать подсказки, он откроет для вас все свои бесконечные возможности.Я поставил перед собой задачу использовать ChatGPT для написания криптоторгового бота для Binance с нуля.
Я начал со следующего вопроса:"Напиши скрипт на Python, который использует Binance API для торговли BTCUSDT".А вот ответ ChatGPT:
Чтобы написать скрипт на Python, который использует Binance API для торговли BTCUSDT, вам сначала нужно будет установить библиотеку binance. Вы можете сделать это, выполнив следующую команду pip:
Как только библиотека binance установлена, вы можете использовать следующий код для торговли BTCUSDT:
Этот код разместит рыночный ордер на покупку за 1 BTC BTCUSDT. Вы можете настроить параметр quantity для торговли другим количеством BTC.
Неплохо, да?
Но если вы работали с Binance trading API, вы, вероятно, столкнулись с проблемой минимального размера ордера. Так что давайте также позаботимся об этом.
Вопрос:"Можешь ли ты подтвердить, превышает ли значение количества минимальное значение, запрошенное Binance?"
Чтобы подтвердить, что значение количества больше минимального значения, требуемого Binance, вы можете использовать метод client.get_min_notional(). Этот метод возвращает минимальное условное значение, разрешённое для сделки. Вы можете использовать этот метод, чтобы проверить минимальное условное значение для BTCUSDT и убедиться, что количество, которым вы пытаетесь торговать, больше или равно этому минимальному значению.
Вот пример того, как вы можете использовать метод client.get_min_notional() для проверки значения количества в вашем скрипте на Python:
В этом коде мы сначала используем метод client.get_min_notional(), чтобы получить минимальное условное значение для BTCUSDT. Затем мы проверяем, является ли переменная количества больше или равна этому минимальному значению, и если это так, мы размещаем рыночный ордер на покупку указанного количества BTCUSDT. Если количество меньше минимального условного значения, мы выводим сообщение об ошибке.
Это уже выглядит довольно круто, но я бы хотел, чтобы этот код был упакован как функция, чтобы я мог его повторно использовать.
Вопрос:"Можешь ли ты создать функцию из этого кода и использовать symbol и quantity в качестве входной переменной и возвращать order_id в качестве выходной переменной? ap_key и api_secret объявлены глобально?"
Вот пример того, как вы можете превратить код из предыдущего ответа в функцию, которая принимает symbol и quantity в качестве входных переменных и использует глобальные значения api_key и api_secret:
В этом коде мы сначала определяем функцию с именем buy_order(), которая принимает symbol и quantity в качестве входных аргументов. Внутри функции мы используем метод client.get_min_notional(), чтобы получить минимальное условное значение для указанного symbol, а затем проверить, больше ли количество или равно этому минимальному значению. Если это так, мы размещаем рыночный ордер на покупку указанного количества. Если quantity меньше минимального условного значения, мы выводим сообщение об ошибке.
Затем вы можете вызвать функцию buy_order(), чтобы обменять определённое количество BTCUSDT или любого другого объекта, который поддерживается Binance API.
Ладно, по-моему, это выглядит довольно прилично. Скрипт выполнит рыночный ордер на покупку на Binance и выдаст идентификатор ордера в качестве выходной переменной. Но я также хотел бы проверить статус моего заказа.
Вопрос:"Добавь функцию, которая проверяет статус заказа на покупку".
Чтобы добавить функцию, которая проверяет статус заказа на покупку, вы можете использовать метод client.get_order() из библиотеки binance. Этот метод принимает symbol и orderId в качестве входных аргументов и возвращает сведения о заказе с указанным orderId для указанного symbol.
Вот пример того, как вы можете добавить функцию с именем check_order_status(), которая использует метод client.get_order() для проверки статуса заказа на покупку:
В этом коде мы добавили функцию под названием check_order_status(), которая принимает symbol и order_id в качестве входных аргументов. Внутри функции мы используем метод client.get_order(), чтобы получить подробную информацию о заказе с указанным order_id для указанного symbol. Затем мы выводим поле status из словаря order, которое содержит статус заказа.
Затем вы можете вызвать функцию check_order_status(), чтобы проверить статус заказа на покупку, который был размещён с помощью функции buy_order().
По-моему, это выглядит изящно. Теперь мне нужна функция, которая также может разместить рыночный ордер на продажу. И моя следующая подсказка будет немного сложнее. Давайте посмотрим, как OpenGPT может справиться с этим…
Вопрос:"Напиши функцию, которая также размещает заказ на продажу, проверяет количество продажи с требуемым размером блока из Binance, при необходимости уменьшает количество продажи до требуемого размера блока".
Чтобы написать функцию, которая размещает ордер на продажу, вы можете использовать метод client.order_market_sell() из библиотеки binance. Этот метод принимает symbol, quantity и другие параметры в качестве входных аргументов и размещает рыночный ордер на продажу для указанного количества символа.
Чтобы проверить количество продажи и при необходимости уменьшить его до требуемого размера, вы можете использовать метод client.get_symbol_info(). Этот метод возвращает информацию о символе, включая поле stepSize, которое содержит минимальное количество, которое можно обменять на символ. Вы можете использовать это значение stepSize для расчёта требуемого размера блока и при необходимости скорректировать количество заказа на продажу.
Вот пример того, как вы можете написать функцию с именем sell_order(), которая размещает рыночный ордер на продажу для указанного quantity из symbol, а при необходимости проверяет и корректирует количество:
В этом коде мы определили функцию sell_order(), которая принимает symbol и quantity в качестве входных аргументов. Внутри функции мы используем метод client.get_symbol_info() для получения информации о символе, а затем вычисляем требуемый размер фрагмента, используя поле stepSize. Если quantity не кратно размеру, мы корректируем количество в соответствии с требованиями. Затем мы используем метод client.order_market_sell(), чтобы разместить рыночный ордер на продажу для скорректированного количества symbolи вернуть идентификатор заказа.
Затем вы можете вызвать функцию sell_order(), чтобы разместить рыночный ордер на продажу указанного количества символа, и функция проверит и скорректирует количество, если необходимо, перед размещением заказа.
Честно говоря, я очень впечатлён! У меня не получилось бы написать сделать это лучше. Отличная работа OpenGPT!
Итак, пока у нас есть 3 функции:
- buy_order()
- sell_order()
- check_order_status()
Это функции движка для торгового бота, но чтобы сделать его полностью автономным, нам нужны некоторые торговые индикаторы, которые можно использовать в качестве триггера для действий по покупке и продаже.
Вопрос:"Давай добавим функцию, которая считывает данные о свечах из Binance, make period, interval в качестве входных данных, а на выходе получается фрейм данных Pandas со значениями close,open, high, low и volume в числовом формате".
Чтобы прочитать данные из Binance и вернуть их в виде фрейма данных Pandas, вам нужно будет установить библиотеку pandas. Вы можете сделать это, выполнив следующую команду pip:
Как только библиотека pandas установлена, вы можете использовать следующий код для считывания данных из Binance и возврата их в виде фрейма данных Pandas:
В этом коде мы определили функцию с именем get_candles(), которая принимает symbol, period и interval в качестве входных аргументов. Внутри функции мы используем метод client.get_klines() для получения данных о свечах для указанного symbol, period и interval. Затем мы создаем фрейм данных Pandas из данных и преобразуем значения столбцов в числовые значения, используя метод pd.to_numeric(). Наконец, мы возвращаем фрейм данных Pandas.
Затем вы можете вызвать функцию get_candles(), чтобы получить данные о свечах для определенного символа, периода и интервала, и функция вернёт данные о свечах в виде фрейма данных Pandas. Вы можете использовать возвращаемый фрейм данных для выполнения различных операций с данными о свечах, таких как вычисление скользящих средних, построение графика данных и многое другое.
Это тоже отлично сработало, молодец, ChatGPT!Давайте возьмем индикатор RSI в качестве функции, не так ли?
Вопрос:"Добавь функцию, которая вычисляет RSI на основе фрейма данных pandas, сделай длину RSI входной переменной и верни результаты RSI в виде фрейма данных".
Чтобы рассчитать индекс относительной силы (RSI) на основе фрейма данных Pandas, вы можете использовать функцию talib.RSI() из библиотеки TA-Lib. Эта библиотека предоставляет широкий спектр индикаторов технического анализа, включая RSI.
Чтобы установить библиотеку TA-Lib, вы можете выполнить следующую команду pip:
Как только библиотека TA-Lib установлена, вы можете использовать следующий код для вычисления RSI для фрейма данных Pandas и возврата результатов в виде нового фрейма данных:
Давайте объединим все функции вместе, чтобы у нас было хорошее представление о том, что создал ChatGPT:
Итак, что мы имеем на данный момент?
- buy_order()
- sell_order()
- check_order_status()
- get_candles()
- get_rsi()
Теперь нам нужно связать всё воедино, и давайте посмотрим, как ChatGPT сможет с этим справиться.
Вопрос:"Напиши скрипт, который выполняет buy_order, если RSI повышается более чем на 60, сохраняет цену покупки в переменной и вычисляет прибыль по ней, а также выполняет ордер на продажу, если прибыль превышает 5% или убыток превышает 2%".
Чтобы написать скрипт, который выполняет ордер на покупку, если значение RSI больше 60, а затем сохраняет цену покупки в переменной и вычисляет прибыль, вы можете использовать функцию buy_order(), которую мы определили ранее, вместе с функциями get_candles() и get_rsi(). Затем вы можете использовать простой цикл while для непрерывной проверки значения RSSI и исполнения ордера на покупку, если RSI больше 60.
Вот пример того, как вы можете написать скрипт, который выполняет ордер на покупку, когда RSI превышает 60, вычисляет прибыль, а затем выполняет ордер на продажу, если прибыль превышает 5% или убыток превышает 2%:
В этот код мы добавили код для расчёта прибыли и исполнения ордера на продажу, если прибыль превышает 5% или убыток превышает 2%. Внутри цикла while мы проверяем, больше ли значение RSI 60, и если это так, мы выполняем ордер на покупку и устанавливаем переменную purchase_price на текущую цену закрытия. Если значение RSI не превышает 60, мы проверяем, установлена ли переменная purchase_price.
Разве это не удивительный инструмент? Я уверен, что ChatGPT изменит то, как мы работаем, и это будет моим любимым инструментом!
Статья была взята из этого источника: