ChatGPT для трейдинга

ChatGPT для трейдинга

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

ChatGPT для трейдинга

Я начал со следующего вопроса:"Напиши скрипт на Python, который использует Binance API для торговли BTCUSDT".А вот ответ ChatGPT:

Чтобы написать скрипт на Python, который использует Binance API для торговли BTCUSDT, вам сначала нужно будет установить библиотеку binance. Вы можете сделать это, выполнив следующую команду pip:

pip install binance

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

from binance.client import Client # Replace with your Binance API key and secret api_key = '<your-api-key>' api_secret = '<your-api-secret>' # Initialize the Binance client client = Client(api_key, api_secret) # Place a market buy order for 1 BTC of BTCUSDT order = client.order_market_buy( symbol='BTCUSDT', quantity=1 ) # Print the order ID print(order['id'])Pyh

Этот код разместит рыночный ордер на покупку за 1 BTC BTCUSDT. Вы можете настроить параметр quantity для торговли другим количеством BTC.

Неплохо, да?

Но если вы работали с Binance trading API, вы, вероятно, столкнулись с проблемой минимального размера ордера. Так что давайте также позаботимся об этом.

Вопрос:"Можешь ли ты подтвердить, превышает ли значение количества минимальное значение, запрошенное Binance?"

Чтобы подтвердить, что значение количества больше минимального значения, требуемого Binance, вы можете использовать метод client.get_min_notional(). Этот метод возвращает минимальное условное значение, разрешённое для сделки. Вы можете использовать этот метод, чтобы проверить минимальное условное значение для BTCUSDT и убедиться, что количество, которым вы пытаетесь торговать, больше или равно этому минимальному значению.

Вот пример того, как вы можете использовать метод client.get_min_notional() для проверки значения количества в вашем скрипте на Python:

from binance.client import Client # Replace with your Binance API key and secret api_key = '<your-api-key>' api_secret = '<your-api-secret>' # Initialize the Binance client client = Client(api_key, api_secret) # Get the minimum notional value for BTCUSDT min_notional = client.get_min_notional(symbol='BTCUSDT') # Place a market buy order for 1 BTC of BTCUSDT if the quantity is greater than or equal to the minimum notional value quantity = 1 if quantity >= min_notional: order = client.order_market_buy( symbol='BTCUSDT', quantity=quantity ) # Print the order ID print(order['id']) else: print('Quantity must be greater than or equal to the minimum notional value of {} BTCUSDT'.format(min_notional))

В этом коде мы сначала используем метод client.get_min_notional(), чтобы получить минимальное условное значение для BTCUSDT. Затем мы проверяем, является ли переменная количества больше или равна этому минимальному значению, и если это так, мы размещаем рыночный ордер на покупку указанного количества BTCUSDT. Если количество меньше минимального условного значения, мы выводим сообщение об ошибке.

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

Вопрос:"Можешь ли ты создать функцию из этого кода и использовать symbol и quantity в качестве входной переменной и возвращать order_id в качестве выходной переменной? ap_key и api_secret объявлены глобально?"

Вот пример того, как вы можете превратить код из предыдущего ответа в функцию, которая принимает symbol и quantity в качестве входных переменных и использует глобальные значения api_key и api_secret:

from binance.client import Client # Replace with your Binance API key and secret api_key = '<your-api-key>' api_secret = '<your-api-secret>' # Initialize the Binance client client = Client(api_key, api_secret) def buy_order(symbol, quantity): # Get the minimum notional value for the specified symbol min_notional = client.get_min_notional(symbol=symbol) # Place a market buy order for the specified quantity of the symbol if the quantity is greater than or equal to the minimum notional value if quantity >= min_notional: order = client.order_market_buy( symbol=symbol, quantity=quantity ) # Return the order ID return order['id'] else: print('Quantity must be greater than or equal to the minimum notional value of {} {}'.format(min_notional, symbol)) return None # Trade 1 BTC of BTCUSDT order_id = buy_order('BTCUSDT', 1) print(order_id)

В этом коде мы сначала определяем функцию с именем 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() для проверки статуса заказа на покупку:

def check_order_status(symbol, order_id): # Get the order details for the specified symbol and order ID order = client.get_order( symbol=symbol, orderId=order_id ) # Print the order status print('Order status: {}'.format(order['status'])) # Trade 1 BTC of BTCUSDT order_id = buy_order('BTCUSDT', 1) # Check the status of the order check_order_status('BTCUSDT', order_id)

В этом коде мы добавили функцию под названием 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, а при необходимости проверяет и корректирует количество:

def sell_order(symbol, quantity): # Get the symbol information symbol_info = client.get_symbol_info(symbol=symbol) # Calculate the required chunk size chunk_size = symbol_info['filters'][2]['stepSize'] # Adjust the quantity to the required chunk size if necessary if quantity % chunk_size != 0: quantity = int(quantity / chunk_size) * chunk_size # Place a market sell order for the specified quantity of the symbol order = client.order_market_sell( symbol=symbol, quantity=quantity ) # Return the order ID return order['id'] # Sell 1 BTC of BTCUSDT order_id = sell_order('BTCUSDT', 1) print(order_id)

В этом коде мы определили функцию 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:

pip install pandas

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

from binance.client import Client import pandas as pd # Replace with your Binance API key and secret api_key = '<your-api-key>' api_secret = '<your-api-secret>' # Initialize the Binance client client = Client(api_key, api_secret) def get_candles(symbol, period, interval): # Get the candles data for the specified symbol, period, and interval candles = client.get_klines( symbol=symbol, interval=interval, limit=period ) # Create a Pandas DataFrame from the candles data df = pd.DataFrame(candles, columns=[ 'open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore' ]) # Convert the column values to numerical values df = df.apply(pd.to_numeric) # Return the Pandas DataFrame return df # Get the candles data for BTCUSDT for the past 1 hour with a 1 minute interval df = get_candles('BTCUSDT', 60, '1m') print(df)

В этом коде мы определили функцию с именем 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:

pip install TA-Lib

Как только библиотека TA-Lib установлена, вы можете использовать следующий код для вычисления RSI для фрейма данных Pandas и возврата результатов в виде нового фрейма данных:

import talib def get_rsi(df, length): # Calculate the RSI rsi = talib.RSI(df['close'], timeperiod=length) # Create a Pandas DataFrame with the RSI values rsi_df = pd.DataFrame(rsi, columns=['RSI']) # Return the RSI DataFrame return rsi_df # Get the candles data for BTCUSDT for the past 1 hour with a 1 minute interval df = get_candles('BTCUSDT', 60, '1m') # Calculate the RSI for the candles data with a length of 14 rsi = get_rsi(df, 14) print(rsi)

Давайте объединим все функции вместе, чтобы у нас было хорошее представление о том, что создал ChatGPT:

from binance.client import Client import pandas as pd import talib # Replace with your Binance API key and secret api_key = '<your-api-key>' api_secret = '<your-api-secret>' # Initialize the Binance client client = Client(api_key, api_secret) def buy_order(symbol, quantity): # Get the minimum notional value for the specified symbol min_notional = client.get_min_notional(symbol=symbol) # Place a market buy order for the specified quantity of the symbol if the quantity is greater than or equal to the minimum notional value if quantity >= min_notional: order = client.order_market_buy( symbol=symbol, quantity=quantity ) # Return the order ID return order['id'] else: print('Quantity must be greater than or equal to the minimum notional value of {} {}'.format(min_notional, symbol)) return None def sell_order(symbol, quantity): # Get the symbol information symbol_info = client.get_symbol_info(symbol=symbol) # Calculate the required chunk size chunk_size = symbol_info['filters'][2]['stepSize'] # Adjust the quantity to the required chunk size if necessary if quantity % chunk_size != 0: quantity = int(quantity / chunk_size) * chunk_size # Place a market sell order for the specified quantity of the symbol order = client.order_market_sell( symbol=symbol, quantity=quantity ) # Return the order ID return order['id'] def check_order_status(symbol, order_id): # Get the order details for the specified symbol and order ID order = client.get_order( symbol=symbol, orderId=order_id ) # Print the order status print('Order status: {}'.format(order['status'])) def get_candles(symbol, period, interval): # Get the candles data for the specified symbol, period, and interval candles = client.get_klines( symbol=symbol, interval=interval, limit=period ) # Create a Pandas DataFrame from the candles data df = pd.DataFrame(candles, columns=[ 'open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore' ]) # Convert the column values to numerical values df = df.apply(pd.to_numeric) # Return the Pandas DataFrame return df def get_rsi(df, length): # Calculate the RSI rsi = talib.RSI(df['close'], timeperiod=length) # Create a Pandas DataFrame with the RSI values rsi_df = pd.DataFrame(rsi, columns=['RSI']) # Return the RSI DataFrame return rsi_df

Итак, что мы имеем на данный момент?

  • 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%:

# Replace with your symbol, period, and interval symbol = 'BTCUSDT' period = 60 interval = '1m' # Get the candles data df = get_candles(symbol, period, interval) # Calculate the RSI rsi_df = get_rsi(df, 14) # Initialize the purchase price purchase_price = 0 # Continuously check the RSI value and execute a buy order if the RSI is greater than 60 while True: # Get the latest RSI value rsi = rsi_df['RSI'].iloc[-1] # Check if the RSI is greater than 60 if rsi > 60 and purchase_price == 0: # Place a buy order order_id = buy_order(symbol, 1) # Get the latest candles data df = get_candles(symbol, period, interval) # Get the latest close price close = df['close'].iloc[-1] # Set the purchase price purchase_price = close # Print the purchase price print('Purchase price: {}'.format(purchase_price)) else: # Check if the purchase price is set if purchase_price > 0: # Get the latest candles data df = get_candles(symbol, period, interval) # Get the latest close price close = df['close'].iloc[-1] # Calculate the profit profit = (close - purchase_price) / purchase_price * 100 # Check if the profit is greater than 5% or the loss is greater than 2% if profit > 5 or profit < -2: # Place a sell order order_id = sell_order(symbol, 1) # Reset the purchase price purchase_price = 0 # Print the profit print('Profit: {}%'.format(profit))

В этот код мы добавили код для расчёта прибыли и исполнения ордера на продажу, если прибыль превышает 5% или убыток превышает 2%. Внутри цикла while мы проверяем, больше ли значение RSI 60, и если это так, мы выполняем ордер на покупку и устанавливаем переменную purchase_price на текущую цену закрытия. Если значение RSI не превышает 60, мы проверяем, установлена ли переменная purchase_price.

Разве это не удивительный инструмент? Я уверен, что ChatGPT изменит то, как мы работаем, и это будет моим любимым инструментом!

Статья была взята из этого источника:

1 комментарий

Ну и че, много робот твой наторговал с 12 февраля?

Ответить