Блок задач

5. Парочка классов

Темы
Сложность 6

Задача «Робот-трейдер»

Реализовать автоматическую систему (робота) для торговли на колебаниях какого-либо биржевого курса.

Принципы биржевой торговли на рынке Forex

Опишем упрощенную модель маржинальной торговли с кредитным плечом на примере колебаний курса USD/EUR.

Пусть игрок имеет некоторый начальный капитал: 100 USD. Начальный курс предположим равным 1,6000 USD/EUR. Игрок использует кредитное плечо 1:100. Рассмотрим несколько вариантов поведения.

1. Игрок предполагает, что курс будет расти

Для проведения сделки игрок берет у биржевого брокера кредит. Например, игрок использует свои 100 USD в качестве залога (маржи) и получает для проведения сделки в 100 раз большую сумму - 10000 USD. Игрок покупает на эту сумму 6250 EUR по текущему курсу (открывает позицию), и дает указание брокеру продать эти 6250 EUR (закрыть позицию) при достижении обменного курса 1,6500 USD/EUR.

Если предположения игрока оправдались и курс вырос до 1,6500 USD/EUR, то после закрытия позиции и продажи по новому курсу игрок получит 10312,5 USD, вернет 10000 USD заёмных средств, заберет обратно залог 100 USD и получит чистую прибыль 312,5 USD.

Легко проверить, что без использования кредитного плеча игрок получил бы прибыль только 3,125 USD.

Это упрощенная модель не описывает уплату процентов за пользование кредитными средствами.

Если предположения игрока не оправдались и курс USD/EUR упал, то с использованием кредитного плеча игрок может потерять значительные средства, которых у него в наличии нет. Для предотвращения этой ситуации брокер имеет право автоматически закрыть позицию игрока (stop-loss), как только размер убытков вырастет до величины залога.

Рассчитаем для нашего примера курс, при котором позиция игрока будет автоматически закрыта. Легко видеть, что при курсе 1,5680 USD/EUR игрок после продажи 6250 EUR получит лишь 9800 USD, что вместе с залогом равно объёму заёмных средств, которые игроку необходимо вернуть. В результате при падении курса до указанной величины игрок потеряет 100 USD залога.

Легко проверить, что без использования кредитного плеча игрок потерял бы только 2 USD.

2. Игрок предполагает, что курс будет падать

Для проведения сделки игрок берет у биржевого брокера кредит в EUR. Используя свои 100 USD в качестве залога, игрок получает для проведения сделки 6250 EUR. Игрок покупает на эту сумму 10000 USD по текущему курсу (открывает позицию) и дает указание брокеру продать эти 10000 USD (закрыть позицию) при падении обменного курса до 1,5000 USD/EUR.

Если курс действительно упал до 1,5500 USD/EUR, то после закрытия позиции и продажи по новому курсу, игрок получит 6451,61 EUR, вернет 6250 EUR заёмных средств, переведет разницу по новому курсу в USD, заберет обратно залог 100 USD и получит чистую прибыль 130,07 USD.

Рассчитаем также курс, при котором позиция игрока будет автоматически закрыта брокером для фиксации убытков (stop-loss). Легко видеть, что при курсе 1,6160 USD/EUR игрок после продажи 10000 USD получит лишь 6188,12 EUR, что вместе с залогом (100 USD = 61,88 EUR по новому курсу) равно объёму заёмных средств, которые игроку необходимо вернуть. В результате при подъеме курса до указанной величины игрок потеряет весь залог.

Можно найти примеры реальной торговли по этой схеме на форексе.

картинка для привлечения внимания

Требования к системе

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

Торговая система:

  • принимает и устанавливает очередное значение курса;
  • позволяет открывать и закрывать позиции, получить ткущий баланс по позиции, ведет учет позиций;
  • автоматически закрывает позицию с при достижении желаемой величины курса;
  • автоматически закрывает позицию при фиксации убытков (stop-loss).

При этом каждая открываемая позиция содержит:

  • размер залога;
  • стратегию игры (рост/падение курса);
  • целевая величина курса для автоматического закрытия.

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

Робот-трейдер:

При реализации этого класса многие моменты остаются на усмотрение студента.

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

Примеры курсов валют для тренировки можно поискать на сайтах форекса и ЦБ РФ.