Уважаемые форумчане, требуется исправить часть кода, язык python. Оплата в USDT ( TRC 20 ), сумма обговаривается перед выполнением.
Описание процесса : торговый бот совершает ордер на покупку, после этого включается функция trailing stop ( процесс подтягивания стоп-лосса к растущему тренду ), часть кода, отвечающая за отслеживание trailing stop, прилагается. После того, как срабатывает стоп-лосс, начинается новый цикл, а именно: сначала ордер на покупку, затем снова функция trailing stop и т.д.
Суть проблемы : после срабатывания стоп-лосса и последующей покупки по рынку новый цикл с trailing stop начинает отслеживать цену выбранной пары со стоп-лоссом, оставшимся от предыдущего цикла, т.е. новое значение стоп-лосса не высчитывается на основе новых данных.
Задание: требуется исправить код, отвечающий за функцию trailing stop, таким образом, чтобы при начале нового торгового цикла стоп-лосс высчитывался заново , использую актуальные на данный момент данные.
Это код, отвечающий за функцию trailing stop:
Описание процесса : торговый бот совершает ордер на покупку, после этого включается функция trailing stop ( процесс подтягивания стоп-лосса к растущему тренду ), часть кода, отвечающая за отслеживание trailing stop, прилагается. После того, как срабатывает стоп-лосс, начинается новый цикл, а именно: сначала ордер на покупку, затем снова функция trailing stop и т.д.
Суть проблемы : после срабатывания стоп-лосса и последующей покупки по рынку новый цикл с trailing stop начинает отслеживать цену выбранной пары со стоп-лоссом, оставшимся от предыдущего цикла, т.е. новое значение стоп-лосса не высчитывается на основе новых данных.
Задание: требуется исправить код, отвечающий за функцию trailing stop, таким образом, чтобы при начале нового торгового цикла стоп-лосс высчитывался заново , использую актуальные на данный момент данные.
Это код, отвечающий за функцию trailing stop:
Python:
# Если ордер уже исполнен
if order_status == 'FILLED':
got_qty = float(stock_order_data['executedQty'])
log.info("""
Ордер {order} выполнен, получено {exec_qty:0.8f}.
Проверяем, не стоит ли создать ордер на продажу
""".format(
order=order, exec_qty=got_qty
))
multiplier = -1 if settings['strategy'] == "Long" else 1
log.debug("Получаем настройки пар с биржи")
symbols = bot.exchangeInfo()['symbols']
step_sizes = {symbol['symbol']:symbol for symbol in symbols}
for symbol in symbols:
for f in symbol['filters']:
if f['filterType'] == 'LOT_SIZE':
step_sizes[symbol['symbol']] = float(f['stepSize'])
log.debug('Проверяю пару {pair}, стратегия {strategy}'.format(pair=settings['symbol'], strategy=settings['strategy']))
# Получаем текущие курсы по паре
current_rates = bot.depth(symbol=settings['symbol'], limit=5)
bid=float(current_rates['bids'][0][0])
ask=float(current_rates['asks'][0][0])
# Если играем на повышение, то ориентируемся на цены, по которым продают, иначе на цены, по которым покупают
curr_rate = bid if settings['strategy'] == "Long" else ask
if settings['stop_loss_fixed'] == 0:
settings['stop_loss_fixed'] = (curr_rate/100) * (settings['stop_loss_perc']*multiplier+100)
log.debug("Текущие курсы bid {bid:0.8f}, ask {ask:0.8f}, выбрана {cr:0.8f} stop_loss {sl:0.8f}".format(
bid=bid, ask=ask, cr=curr_rate, sl=settings['stop_loss_fixed']
))
# Считаем, каким был бы stop-loss, если применить к нему %
curr_rate_applied = (curr_rate/100) * (settings['stop_loss_perc']*multiplier+100)
if settings['strategy'] == "Long":
# Выбрана стратегия Long, пытаемся продать монеты как можно выгоднее
if curr_rate > settings['stop_loss_fixed']:
log.debug("Текущая цена выше цены Stop-Loss")
if curr_rate_applied > settings['stop_loss_fixed']:
log.debug("Пора изменять stop-loss, новое значение {sl:0.8f}".format(sl=curr_rate_applied))
settings['stop_loss_fixed'] = curr_rate_applied
else:
# Текущая цена ниже или равна stop loss, продажа по рынку
res = bot.createOrder(
symbol=settings['symbol'],
recvWindow=15000,
side='SELL',
type='MARKET',
quantity=settings['amount']
)
log.debug('Текущая цена ниже или равна stop loss, Ордер на продажу по рынку исполнен', res)
if 'orderId' in res:
log.info("Сработал Стоп-Лосс. Создан ордер на продажу по рынку {res}".format(res=res))
store_sell_order(cursor, conn, order, res['orderId'], got_qty, 0)
order_trades = get_order_trades(
order_id=res['orderId'],
pair=orders_info[order]['order_pair'], bot=bot
)
avg_rate = calc_sell_avg_rate(order_trades, log)
if avg_rate > 0:
update_sell_rate(cursor, conn, res['orderId'], avg_rate)
# Получаем из базы все ордера, по которым есть торги, и исключаем их из списка, по которому будем создавать новые ордера
for row in get_db_running_pairs(cursor):
del all_pairs[row]
# Если остались пары, по которым нет текущих торгов
if all_pairs:
log.debug('Найдены пары, по которым нет неисполненных ордеров: {pairs}'.format(pairs=list(all_pairs.keys())))
for pair_name, pair_obj in all_pairs.items():
try:
log.debug("Работаем с парой {pair}".format(pair=pair_name))
# Получаем лимиты пары с биржи
for elem in limits['symbols']:
if elem['symbol'] == pair_name:
CURR_LIMITS = elem
break
else:
raise Exception("Не удалось найти настройки выбранной пары " + pair_name)
Последнее редактирование: