Блог им. SciFi

Анализ торгового журнала и стратегий с помощью R

    • 05 июня 2016, 17:34
    • |
    • SciFi
  • Еще
Сегодня я решил провести анализ своего торгового журнала средствами и возможностями языка R.

Я понимаю, что есть специальные сервисы, которые позволяют анализировать торговый журнал. Но во-первых, они платные. Во-вторых, я веду свой журнал сам в Excel и мне удобнее было написать собственную программу. Тем более, что средствами R можно делать то, чего не будет в этих платных сервисах.

Взял все сделки на ФОРТС с 1 января по 1 июня 2016 года (за полгода). Их у меня было 565 штук. Торгую я роботом и руками по разным стратегиям, но записываю в журнал, почему открыл и закрыл каждую сделку. Стратегий было много разных, но я решил выделить все сделки в две группы — где я торговал роботом и где руками. 

Предварительно подготовил данные в Excel — выбрал только те столбцы, которые я планировал анализировать: дата сделки, маржа, номер стратегии (0 и 1 для ручной и робот. торговли). Создал файл CSV. И приступил к анализу в среде R. 

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

Описательная статистика

Анализ торгового журнала и стратегий с помощью R

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



Графики

Анализ торгового журнала и стратегий с помощью R

Выводы

1. Робот торгует в плюс, руками я торгую в минус. С этого дня постараюсь перестать торговать руками вообще. 
2. Нужно стремиться, чтобы гистограмма имела короткий хвост слева и длинный хвост справа (как на гистограмме для робота). Для этого нужно резать убытки и дать прибыли расти. 
3. Когда я торговал руками, я не давал прибыли расти. Когда торговал робот, я четко знал, когда закрываться, поэтому давал прибыли расти.
4. Плюс робота образовался за счет длинных хвостов справа — нескольких жирных сделок. Большая часть сделок гасила друг друга. 
5. В торговле очень важна аккуратность и системность. Системно торговать руками сложнее.
6. Направленная алгоритмическая торговля на индикаторах может приносить прибыль. 


Код на R с комментариями

# КОЛИЧЕСТВЕННЫЙ АНАЛИЗ ТОРГОВОГО ЖУРНАЛА
# ©SciFi, 2016

print(getwd())
# Распечатываем расположение рабочей папки, в нее нужно положить csv файл

data <- read.csv("JournalData.csv")
# Считываем csv файл с нужными данными из журнала

names(data) <- c("n", "date", "margin", "strategy")
# Переименовываем столбцы так, чтобы названия были удобны при обращении к ним

print(head(data))
# Распечатываем первые 6 строк из считанных данных для проверки

print("Total summary")
print(summary(data$margin))
# Выводим краткую описательную статистику журнала (среднее, отклонения, макс, мин и т.д.)

data.1 <- subset(data, data$strategy==1)
# Получаем подмножество из журнала со стратегией 1 (в моем случае, 1 - это торговля роботом, 0 - торговля руками)

print("Robot trading summary")
print(summary(data.1$margin))
# Выводим описательную статистику для стратегии 1

data.0 <- subset(data, data$strategy==0)
# Аналогично для стратегии 0

print("Hand trading summary")
print(summary(data.0$margin))
# Аналогично для стратегии 0

par(mfrow=c(3,1))
# Создаем таблицу графиков с 3 строками и 1 столбцом

h <- hist(data$margin, breaks=100, main="Histogram of all margins", xlab="Margin (RUR)", ylab="Frequency", col="green", border="black")
# Строим гистограмму частоты определенного размера маржи на сделку и форматируем ее, чтобы было красиво

lines(x = d$x, y = d$y * length(x) * diff(h$breaks)[1], lwd = 2, col="blue")
# Добавляем кривую

h.0 <- hist(data.0$margin, breaks=100, main="Histogram of margins for hand trading", xlab="Margin (RUR)", ylab="Frequency", col="green", border="black")
# Строим гистограмму для ручной торговли (стратегия 0)

lines(x = d$x, y = d$y * length(x) * diff(h.0$breaks)[1], lwd = 2, col="blue")
# Добавляем кривую

h.1 <- hist(data.1$margin, breaks=100, main="Histogram of margins for robot trading", xlab="Margin (RUR)", ylab="Frequency", col="green", border="black")
# Строим гистограмму для торговли роботом (стратегия 1)

lines(x = d$x, y = d$y * length(x) * diff(h.1$breaks)[1], lwd = 2, col="blue")
# Добавляем кривую

Использованные источники

Combining Plots

How can I subset a data set

Add density lines to histogram and cumulative histogram

R:Histograms

Read table, csv


★19
3 комментария
Когда торговал робот, я четко знал, когда закрываться

алгоритм в твоей голове. ты в него, просто, не веришь. поэтому, постоянно нарушаешь. поверь в свою систему и торгуй придерживаясь собственных правил: стопы, тейки. и все получится.
avatar
а как запилить абстракицю, чтобы потом можно было скормить любой csv и получить какое то заранее заданное поведение?

типа такого

statistics = Statictics.createFrom(«myfile.csv»)

statistics.drawGraph
statistics.printTable
statistics.changeField(«myFieldName», newDataset)

и тд

так можно в этом Вашем R?
sortarray sortarray, из скрипта, который я опубликовал, можно сделать функцию. Классов в R нет, есть пакеты. Любой csv скормить можно, если заранее известно, какие поля в нем точно будут. CSV считывается и превращается в data frame, своего рода таблица. Далее можно использовать только нужные поля из этой таблицы.
avatar

теги блога SciFi

....все тэги



UPDONW
Новый дизайн