Без категории

Разработка игры по маржинальной торговле

Trader

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

Основные Компоненты Проекта

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

  1. game.py: Основной скрипт, запускающий игровой цикл, отслеживающий действия пользователей и взаимодействующий с другими модулями для обеспечения целостности игры.
  2. trader.py: Содержит класс Trader, моделирующий действия трейдера на рынке. Включает методы для открытия и закрытия позиций, установки тейк-профита, стоп-лосса и трейлинг-стопа, а также расчета комиссий и прибыли/убытков.
  3. market.py: Моделирует рынок и генерирует изменения цен на биткоин, учитывая заданную волатильность и диапазон цен.
  4. trading_math.py: Содержит функции для расчета комиссий, процентов за удержание позиций и прибыли/убытков по итогам торговли.
  5. settings.py: Файл с настройками игры, включая начальный депозит, максимальную волатильность, комиссию за сделки и другие параметры.
  6. analysis.py: Модуль для анализа результатов торговли, расчета общей прибыли и вывода информации о производительности трейдера.
  7. dev_game_ui.py: Отвечает за вывод сообщений и интерфейс пользователя, включая различные шаблоны сообщений и взаимодействия с пользователем.
  8. transaction.py: Записывает транзакции в журнал сделок и выводит их по запросу.
  9. rules.txt: Содержит текстовые описания правил игры и инструкции для пользователей.

Архитектура Проекта

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

Класс Trader (trader.py)

Класс Trader управляет депозитом, банком, позициями и отслеживает уровни тейк-профита, стоп-лосса и трейлинг-стопа. Основные атрибуты и методы:

  • Атрибуты:
    • self.deposit: Текущий депозит трейдера.
    • self.bank: Банк трейдера, хранящий средства сверх начального депозита.
    • self.position: Словарь, отслеживающий текущую позицию (тип, цена входа, объем, уровни тейк-профита, стоп-лосса и трейлинг-стопа).
    • self.leverage: Плечо трейдера (5x).
  • Методы:
    • open_position(direction, price, leverage): Открытие позиции (лонг или шорт).
    • close_position(): Закрытие текущей позиции.
    • set_take_profit(value): Установка уровня тейк-профита.
    • set_stop_loss(value): Установка уровня стоп-лосса.
    • set_trailing_stop(value): Установка уровня трейлинг-стопа.
    • update_position(current_price): Обновление позиции в соответствии с текущей ценой.

Класс Market (market.py)

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

  • Атрибуты:
    • self.start_price: Начальная цена.
    • self.end_price: Конечная цена.
    • self.max_volatility: Максимальная волатильность.
    • self.current_price: Текущая цена.
  • Методы:
    • change_price(): Изменение текущей цены на случайное значение в пределах волатильности.

Модуль trading_math.py

Содержит функции для расчета комиссий, процентов за удержание позиций и прибыли/убытков.

  • Функции:
    • calculate_opening_commission(amount): Расчет комиссии за открытие позиции.
    • calculate_interest(amount, hours): Расчет процентов за удержание позиции.
    • calculate_liquidation_fee(amount): Расчет комиссии за ликвидацию.

Интерфейс Пользователя (dev_game_ui.py)

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

Примеры Шаблонов

  • Шаблон 1: 0 РАУНД -------------------------------------------------- Шаблон 1: 0 РАУНД -------------------------------------------------- current_price... -------------------------------------------------- Можете пропустить ход нажав Enter или открыть сделку Long или Short. 1. Тейк-профит 2. Стоп-лосс в % 3. Открыть (открывает сделку) 4. Редактировать (можно снова задать параметры сделки и ее тип) 5. Отмена (отменяется создание сделки) 6. Перейти на шаблон 5 ВВЕДИТЕ НОМЕР ДЕЙСТВИЯ: НЕВЕРНОЕ ДЕЙСТВИЕ.
  • Шаблон 5: ПОЗИЦИЯ ОТКРЫТА -------------------------------------------------- Шаблон 5: ПОЗИЦИЯ ОТКРЫТА -------------------------------------------------- Состояние позиции: True Номер раунда 1 Цена открытия позиции: 27000 | Разница: 500 Тип сделки: long Стоп-лосс: 26500 Тейк-профит: 27500 Трейлинг-стоп: 26800 Комиссия за открытие сделки: 27 Комиссия за удержание позиции: 8.33 Общая комиссия за ход: 92.59 Прибыль или убытки: Ваш депозит: 20000 | Разница от начального: -30000 Всего уплачено комиссий: 0 | Чистый остаток: 20000 0. Закрыть позицию 5. Продолжить играть ВВЕДИТЕ НОМЕР ДЕЙСТВИЯ: НЕВЕРНОЕ ДЕЙСТВИЕ.

Логика Игры

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

Основные Правила

  1. Стартовая цена биткоина: Диапазон от 23,000 до 28,000 долларов.
  2. Начальный депозит: 50,000 долларов.
  3. Управление депозитом:
    • Если депозит превышает 50,000 долларов, избыточные средства переносятся в банк.
    • Если депозит ниже 50,000 долларов, учитывается оставшаяся сумма.
  4. Типы позиций: Лонг (длинная) и шорт (короткая).
  5. Уровни управления:
    • Тейк-профит: Уровень, при достижении которого позиция автоматически закрывается с прибылью.
    • Стоп-лосс: Уровень, при достижении которого позиция автоматически закрывается с убытком.
    • Трейлинг-стоп: Плавающий стоп, который автоматически обновляется при движении цены в выгодном направлении.
  6. Комиссии:
    • Комиссия биржи: 0.01% от каждой сделки.
    • Комиссия за ликвидацию: Рассчитывается по формуле: Комиссия за ликвидацию = Ликвидированные активы × Ставка комиссии за ликвидацию.
  7. Риск: 5% от начального депозита при каждой сделке.
  8. Плечо: 5x, что позволяет управлять суммой в 5 раз большей, чем депозит.
  9. Раунды: Всего 20 раундов, каждый из которых включает открытие и закрытие позиции.

Отладка и Тестирование

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

  • dev_game_ui.py:
    • Добавить выделение строк для блоков приветствия и меню действий.
  • trader.py:
    • Реализовать логику проверки и установки уровней стоп-лосса, тейк-профита и трейлинг-стопа.
    • Обеспечить корректную работу трейлинг-стопа как для лонг, так и для шорт позиций.
    • Внедрить режимы ввода (number/percent) для установки уровней.
  • market.py:
    • Обеспечить генерацию первого значения цены как случайного числа в диапазоне начальной и конечной цены.
    • Отслеживать количество раз, когда цена достигает минимума и максимума.
  • trading_math.py:
    • Добавить логику расчета комиссий и перенос комиссий на предыдущие ходы.
    • Внести комментарии для улучшения читаемости кода.

Возможности и Дальнейшее Развитие

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

  1. Добавление новостей по крипте: Введение случайных новостей с разным влиянием на курс биткоина, что сделает игру более реалистичной и динамичной.
  2. Режим реального трейдинга: Подключение к API криптовалютных бирж для использования реальных цен и данных.
  3. Оповещения при изменении цены: Внедрение системы уведомлений, информирующих пользователя о значительных изменениях цены для возможности своевременной установки трейлинг-стопа.
  4. Выбор языка и сохранение настроек: Добавление многоязыковой поддержки и возможности сохранения пользовательских настроек.
  5. Возможность делиться результатами: Реализация функций для обмена результатами игры в социальных сетях или других платформах.
  6. Скачивание журнала трейдера: Предоставление пользователю возможности скачивать журнал сделок и аналитику для дальнейшего анализа.
  7. Обнуление игры: Возможность начать игру заново, сбрасывая все параметры и статистику.
  8. Обучение трейдингу и риск-менеджменту: Введение обучающих материалов и практических упражнений для пользователей, желающих улучшить свои навыки торговли.

Автоматическая стратегия торговли самим ботом

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

Пример стратегии:

  1. Если текущая цена ниже начальной на 5%, открываем длинную позицию (long).
  2. Если текущая цена выше начальной на 5%, открываем короткую позицию (short).
  3. Устанавливаем уровень тейк-профита на 10% от текущей цены.
  4. Устанавливаем уровень стоп-лосса на 5% от текущей цены.
  5. Устанавливаем трейлинг-стоп на 2% от текущей цены.

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

Вставил следующий код в метод play класса TraderGame:

if not self.trader.position:
    if self.market.current_price < self.initial_price * 0.95:
        self.trader.open_position('long', self.market.current_price, LEVERAGE)
    elif self.market.current_price > self.initial_price * 1.05:
        self.trader.open_position('short', self.market.current_price, LEVERAGE)
else:
    self.stage += 1
    if self.stage == 2:
        self.trader.set_take_profit(self.market.current_price * 1.1)
    elif self.stage == 3:
        self.trader.set_stop_loss(self.market.current_price * 0.95)
    elif self.stage == 4:
        self.trader.set_trailing_stop(self.market.current_price * 0.02)
    elif self.stage > 5:  # предполагается 5 этапов за раунд
        self.round += 1
        self.stage = 1
        self.initial_price = self.market.current_price

Также убедился, что в классе Trader есть соответствующие методы set_take_profit, set_stop_loss и set_trailing_stop, которые устанавливают соответствующие значения в словаре self.position.

Проценты

Проценты в кросс-маржинальной торговле начисляются каждый час.

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

Комиссия за удержание позиции рассчитывается по формуле:

Процент = сумма займа × суточная процентная ставка / 24 × часы

  • Дневная процентная ставка: 0.01858347%
  • Годовая процентная ставка: 8.230000%

Пример: Андрей занимает 10,000 USDT в 8:05 UTC и погашает в 10:00 UTC.
Суточная процентная ставка: 0.02%
Часовая процентная ставка: 0.02% / 24
Андрею необходимо оплатить проценты в 0.167 USDT по формуле:
процент = 10,000 × 0.02% / 24 × 2

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

Формула: Комиссия за ликвидацию = Ликвидированные активы × Ставка комиссии за ликвидацию

Пример:
Ликвидационный актив = 93.8069873440 / (1 + 0.02) = 91.96763465 USDT
Комиссия за ликвидацию = 91.96763465 × 0.02 = 1.8393526930 USDT

Логика работы раундов

Номер раунда 1 номер этапа 1 Каждая новая сделка — это один раунд. Пока открыта сделка, каждый ход — это новый этап в том же раунде. Например, номер раунда 0 — пока мы не открыли ни одной сделки, пропускаем ход, пропускаем ход, открываем сделку (номер раунда становится 1). Далее просто продолжить играть или трейлинг-стоп. Если сделка не закрылась, будет раунд 1, этап 1, этап 2, этап 3 и т.д. В рамках этапов каждый шаг, даже если не было раунда, считается новым этапом, независимо от действий. Если мы закроем сделку, раунды перестанут меняться, пока мы не откроем новую сделку. Тогда раунд увеличивается на 1. Всего сделок = количество раундов Количество сделок (раундов) задается в параметрах игры, по умолчанию — 20.

Новые идеи

  • Добавить новости по крипте (с разным влиянием на курс).
  • Режим игра или трейдинг: в режиме трейдинга подключаемся к API и используем реальные данные.
  • Для трейдинга добавить оповещения при изменении цены (курса) для возможности установки трейлинг-стопа.
  • При старте игры добавить выбор языка, сохранять пользователя и его настройки.
  • Добавить возможность делиться своим результатом.
  • Добавить возможность скачивать журнал трейдера и свою аналитику.
  • Добавить возможность обнуления игры.
  • Добавить обучение трейдингу и риск-менеджменту.

Заключение

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

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

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