Основные показатели стратегии
Математическое ожидание
Математическое ожидание — это среднее значение случайной величины, которое ожидается в результате большого числа экспериментов или случайных событий. В контексте торговли, это важнейший показатель ожидаемой прибыльности торговой стратегии.
Математическое ожидание бывает двух видов: в пунктах и валюте депозита.
def calculate_expectation(profit_losses):
n = len(profit_losses)
expectation = sum(profit_losses) / n
return expectation
# Использование
profit_losses = [100, -50, 75, -30, 120] # пример прибыли/убытка от сделок
expectation = calculate_expectation(profit_losses)
print("Математическое ожидание:", expectation)
Профит фактор
Профит фактор — это показатель, который отражает отношение общей суммы прибыли к общей сумме убытков.
Чем выше значение профит фактора, тем лучше эффективность стратегии.
def calculate_profit_factor(profits, losses):
total_profit = sum(profits)
total_loss = sum(losses)
profit_factor = total_profit / total_loss
return profit_factor
# Использование
profits = [100, 50, 75, 30, 120] # пример прибыли от сделок
losses = [-50, -30, -20, -10, -25] # пример убытков от сделок
profit_factor = calculate_profit_factor(profits, losses)
print("Профит фактор:", profit_factor)
Прибыльность
Прибыльность — это показатель, который отражает успешность торговой стратегии или инвестиций. Он представляет собой отношение общей прибыли к общим затратам или капиталу, и может быть выражен как абсолютное значение или в процентах.
Где:
Общая прибыль - сумма всех прибылей от сделок.
Общий капитал - начальный капитал или текущий баланс счета. Показатель прибыльности позволяет оценить доходность стратегии или инвестиций относительно вложенных средств.
def calculate_profitability(total_profit, initial_capital):
profitability = (total_profit / initial_capital) * 100
return profitability
# Использование
total_profit = 5000 # пример общей прибыли
initial_capital = 10000 # пример начального капитала
profitability = calculate_profitability(total_profit, initial_capital)
print("Прибыльность:", profitability, "%")
Максимальная абсолютная просадка
Максимальная абсолютная просадка (Maximum Drawdown, MDD) - это показатель, отражающий максимальную величину снижения капитала от пикового значения до минимального за определенный период времени.
MDD = (Наибольшее пиковое значение капитала - Наименьшее значение капитала после пика) / Наибольшее пиковое значение капитала
Чем меньше максимальная абсолютная просадка, тем более стабильной и менее рискованной считается торговая стратегия.
def calculate_max_drawdown(equity_curve):
peak = equity_curve[0]
max_drawdown = 0
for value in equity_curve:
peak = max(peak, value)
dd = (peak - value) / peak
max_drawdown = max(max_drawdown, dd)
return max_drawdown
# Пример использования
equity_curve = [10000, 11000, 9500, 10200, 9800, 10500]
max_dd = calculate_max_drawdown(equity_curve)
print(f"Максимальная абсолютная просадка: {max_dd * 100:.2f}%")
Максимальная относительная просадка
Максимальная относительная просадка (Maximum Relative Drawdown, MRD) - это показатель, отражающий максимальную долю (процент) потерянного капитала от наибольшего пикового значения за определенный период времени. В отличие от максимальной абсолютной просадки, она показывает просадку в относительных единицах.
MRD = (Наибольшее пиковое значение капитала - Наименьшее значение капитала после пика) / Наибольшее пиковое значение капитала * 100%
def calculate_max_relative_drawdown(equity_curve):
peak = equity_curve[0]
max_drawdown = 0
for value in equity_curve:
peak = max(peak, value)
dd = (peak - value) / peak * 100
max_drawdown = max(max_drawdown, dd)
return max_drawdown
# Пример использования
equity_curve = [10000, 11000, 9500, 10200, 9800, 10500]
max_rdd = calculate_max_relative_drawdown(equity_curve)
print(f"Максимальная относительная просадка: {max_rdd:.2f}%")
Относительная просадка
Относительная просадка (Relative Drawdown, RD) - это показатель, отражающий текущую величину снижения капитала относительно его максимального предыдущего значения. Она измеряет текущий уровень просадки в процентах от наибольшего пикового значения капитала.
RD = (Наибольшее пиковое значение капитала - Текущее значение капитала) / Наибольшее пиковое значение капитала * 100%
Относительная просадка помогает оценить текущий уровень потерь по сравнению с максимально достигнутым капиталом. Чем выше значение, тем больше потери на данный момент.
def calculate_relative_drawdown(equity_curve):
peak = equity_curve[0]
drawdowns = []
for value in equity_curve:
peak = max(peak, value)
rd = (peak - value) / peak * 100
drawdowns.append(rd)
return drawdowns
# Пример использования
equity_curve = [10000, 11000, 9500, 10200, 9800, 10500]
relative_drawdowns = calculate_relative_drawdown(equity_curve)
print("Относительные просадки:")
for rd in relative_drawdowns:
print(f"{rd:.2f}%")
Фактор восстановления
-данный параметр отображает рискованностьстратегии, какой суммой рискует советник что бы заработать полученную прибыль. Он вычисляется как отношение полученной прибыли к максимальной просадке.
Где:
Абсолютная прибыль - общая прибыль от сделок.
Максимальная просадка - наибольшее уменьшение доступных средств с момента достижения максимального значения баланса.
Значения менее 2 не рассматриваем
def calculate_recovery_factor(absolute_profit, max_drawdown):
return absolute_profit / max_drawdown
# Пример использования
absolute_profit = 1500 # пример абсолютной прибыли
max_drawdown = 1000 # пример максимальной просадки
recovery_factor = calculate_recovery_factor(absolute_profit, max_drawdown)
print("Фактор восстановления:", recovery_factor)
Процент прибыльных сделок
Процент прибыльных сделок (Profit Factor, PF) - это показатель, который определяет долю успешных (прибыльных) сделок по отношению к общему количеству сделок за определенный период времени. Он помогает оценить эффективность торговой стратегии.
Процент прибыльных сделок = (Количество прибыльных сделок / Общее количество сделок) x 100%
def calculate_profit_percent(trades):
total_trades = len(trades)
profitable_trades = sum(1 for trade in trades if trade > 0)
profit_percent = (profitable_trades / total_trades) * 100
return profit_percent
# Пример использования
trades = [100, -50, 75, -30, 120, -80, 200]
profit_percent = calculate_profit_percent(trades)
print(f"Процент прибыльных сделок: {profit_percent:.2f}%")
Максимальный выигрыш
Максимальный выигрыш (Maximum Profit, MAX_PROFIT) - это наибольшая величина прибыли, полученная в результате одной успешной сделки за определенный период времени при использовании торговой стратегии.
MAX_PROFIT = max(прибыли от сделок)
def calculate_max_profit(trades):
profits = [trade for trade in trades if trade > 0]
if not profits:
return 0
max_profit = max(profits)
return max_profit
# Пример использования
trades = [100, -50, 75, -30, 120, -80, 200]
max_profit = calculate_max_profit(trades)
print(f"Максимальный выигрыш: {max_profit}")
Максимальный проигрыш
Максимальный проигрыш (Maximum Loss, MAX_LOSS) - это наибольшая величина убытка, полученного в результате одной убыточной сделки за определенный период времени при использовании торговой стратегии.
MAX_LOSS = min(убытков от сделок)
Максимальный проигрыш показывает потенциальный риск торговой стратегии в худшем случае и может использоваться для оценки ее рискованности и управления капиталом. Однако этот показатель не дает полной картины, поскольку он не учитывает прибыльные сделки и общую стабильность стратегии.
def calculate_max_loss(trades):
losses = [trade for trade in trades if trade < 0]
if not losses:
return 0
max_loss = min(losses)
return max_loss
# Пример использования
trades = [100, -50, 75, -30, 120, -80, 200]
max_loss = calculate_max_loss(trades)
print(f"Максимальный проигрыш: {max_loss}")
Средний выигрыш
Средний выигрыш - это средняя величина прибыли от одной сделки.
Средний выигрыш = (Сумма прибыльных сделок) / (Количество прибыльных сделок)
def calculate_average_profit(profits, profitable_trades):
return sum(profits) / profitable_trades
Средний проигрыш
Средний проигрыш - это средняя величина убытка от одной сделки.
Средний проигрыш = (Сумма убыточных сделок) / (Количество убыточных сделок)
def calculate_average_loss(losses, losing_trades):
return sum(losses) / losing_trades
Максимальная череда выигрышных сделок
Максимальная череда выигрышных сделок - это наибольшее количество последовательных прибыльных сделок.
Не требуется, это просто наибольшее количество последовательных прибыльных сделок.
def calculate_max_win_streak(winning_streaks):
return max(winning_streaks)
Максимальная череда проигрышных сделок
Максимальная череда проигрышных сделок - это наибольшее количество последовательных убыточных сделок.
Не требуется, это просто наибольшее количество последовательных убыточных сделок.
def calculate_max_loss_streak(losing_streaks):
return max(losing_streaks)
Средняя череда выигрышных сделок
Средняя череда выигрышных сделок - это среднее количество последовательных прибыльных сделок.
Средняя череда выигрышных сделок = (Сумма количества последовательных прибыльных сделок) / (Количество циклов прибыльных сделок)
def calculate_average_win_streak(winning_streaks):
return sum(winning_streaks) / len(winning_streaks)
Средняя череда проигрышных сделок
Средняя череда проигрышных сделок - это среднее количество последовательных убыточных сделок.
Средняя череда проигрышных сделок = (Сумма количества последовательных убыточных сделок) / (Количество циклов убыточных сделок)
def calculate_average_loss_streak(losing_streaks):
return sum(losing_streaks) / len(losing_streaks)
Фактор линейности
Фактор линейности (Linearity Factor, LF) - это показатель, который оценивает линейность или стабильность роста капитала при использовании торговой стратегии. Он измеряет степень отклонения кривой капитала от идеальной прямой линии.
LF = (Конечный капитал - Начальный капитал) / (Максимальный капитал - Минимальный капитал)
def calculate_linearity_factor(equity_curve):
start_capital = equity_curve[0]
end_capital = equity_curve[-1]
max_capital = max(equity_curve)
min_capital = min(equity_curve)
linearity_factor = (end_capital - start_capital) / (max_capital - min_capital)
return linearity_factor
# Пример использования
equity_curve = [10000, 10500, 9800, 10200, 10700, 11000]
linearity_factor = calculate_linearity_factor(equity_curve)
print(f"Фактор линейности: {linearity_factor:.2f}")
Коэффициент Шарпа
Коэффициент Шарпа - это мера риска-прибыли, которая позволяет оценить доходность инвестиции или стратегии торговли относительно риска. Чем выше значение коэффициента Шарпа, тем лучше отношение доходности к риску.
Где:
Средняя доходность - среднее арифметическое значение доходности инвестиции или стратегии торговли.
Безрисковая ставка - ожидаемая доходность безрискового актива (например, государственных облигаций).
Стандартное отклонение доходности - мера риска инвестиции или стратегии торговли. Показатель позволяет оценить эффективность торговой стратегии с учетом принимаемого риска.
import statistics
def calculate_sharpe_ratio(returns, risk_free_rate):
mean_return = statistics.mean(returns)
std_dev_return = statistics.stdev(returns)
sharpe_ratio = (mean_return - risk_free_rate) / std_dev_return
return sharpe_ratio
# Пример использования
returns = [0.05, 0.03, 0.07, 0.02, 0.06] # пример доходностей
risk_free_rate = 0.02 # пример безрисковой ставки
sharpe_ratio = calculate_sharpe_ratio(returns, risk_free_rate)
print("Коэффициент Шарпа:", sharpe_ratio)
Максимальная просадка (Drawdown)
Максимальная просадка — это максимальное уменьшение капитала счета с начала торговой истории до момента восстановления.
Drawdown = (Максимальный убыток) / (Начальный капитал)
def calculate_drawdown(max_loss, initial_capital):
return max_loss / initial_capital
Коэффициент Келли
Коэффициент Келли помогает определить оптимальный размер ставки для максимизации прибыли при минимизации риска.
Коэффициент Келли = (p * b - q) / b
Где:
p - вероятность успешной сделки
b - коэффициент прибыли
q - коэффициент убытка
def calculate_kelly_criterion(p, b, q):
return (p * b - q) / b
Индекс Уильямса (Williams’ Percent Range)
Z-счет - это стандартизированная мера, которая показывает, насколько значение отклоняется от среднего значения в единицах стандартного отклонения.
Z-счет = (X - Среднее) / Стандартное отклонение
Где:
X - значение
Среднее - среднее значение
Стандартное отклонение - стандартное отклонение
def calculate_z_score(value, mean, std_dev):
return (value - mean) / std_dev
Коэффициент детерминации — это мера, которая показывает, какую часть дисперсии зависимой переменной объясняет модель. Он представляет собой квадрат коэффициента корреляции между фактическими и прогнозируемыми значениями.
Где:
def calculate_r_squared(actual_values, predicted_values):
mean_actual = sum(actual_values) / len(actual_values)
sum_squared_total = sum((y - mean_actual) ** 2 for y in actual_values)
sum_squared_residuals = sum((actual_values[i] - predicted_values[i]) ** 2 for i in range(len(actual_values)))
r_squared = 1 - (sum_squared_residuals / sum_squared_total)
return r_squared
Важно отметить, что коэффициент детерминации может принимать значения от 0 до 1. Значение ближе к 1 указывает на лучшее соответствие модели данным.
ProfitStability (Стабильность прибыли)
Показатель "ProfitStability" отражает степень стабильности прибыли торговой стратегии. Чем выше значение этого показателя, тем более стабильной является прибыльность стратегии.
Где:
Среднее значение прибыли - среднее арифметическое значение прибыли от сделок.
Стандартное отклонение прибыли - мера разброса прибыли относительно её среднего значения. Чем меньше стандартное отклонение, тем более стабильной является прибыльность стратегии.
import statistics
def calculate_profit_stability(profits):
mean_profit = statistics.mean(profits)
std_dev_profit = statistics.stdev(profits)
return mean_profit / std_dev_profit
Этот показатель помогает оценить уровень стабильности прибыли стратегии, что может быть полезно для принятия решений о её дальнейшем использовании.
КБТС - Коэффициент безопасности торговой системы
Коэффициент безопасности торговой системы (КБТС) позволяет оценить уровень защищенности торговой стратегии от рисков и потерь. Чем выше значение КБТС, тем более безопасной считается торговая система.
Где:
Максимальная просадка - наибольшая потеря средств с момента достижения максимального баланса.
Абсолютная просадка - максимальное уменьшение доступных средств с момента достижения максимального значения.
def calculate_security_coefficient(max_drawdown, absolute_drawdown):
return max_drawdown / absolute_drawdown
# Пример использования
max_drawdown = 1000 # пример максимальной просадки
absolute_drawdown = 500 # пример абсолютной просадки
security_coefficient = calculate_security_coefficient(max_drawdown, absolute_drawdown)
print("Коэффициент безопасности торговой системы:", security_coefficient)
КБТС позволяет оценить, во сколько раз максимальная потеря превышает максимальное уменьшение средств. Чем выше значение КБТС, тем более надежной и безопасной считается торговая стратегия.
Коэффициент вариации
Коэффициент вариации - это статистический показатель, который измеряет степень разброса или изменчивости данных относительно среднего значения. Он представляет собой отношение стандартного отклонения к среднему значению и обычно выражается в процентах.
Коэффициент вариации = (Стандартное отклонение / Среднее значение) x 100%
Коэффициент вариации помогает оценить риск и стабильность торговой стратегии. Чем ниже его значение, тем более стабильны результаты стратегии и тем меньше разброс значений вокруг среднего. Высокий коэффициент вариации указывает на высокую изменчивость и нестабильность результатов.
import math
def calculate_coefficient_of_variation(profits_losses):
mean = sum(profits_losses) / len(profits_losses)
squared_diffs = [(x - mean) ** 2 for x in profits_losses]
variance = sum(squared_diffs) / len(profits_losses)
std_dev = math.sqrt(variance)
coefficient_of_variation = (std_dev / mean) * 100
return coefficient_of_variation
# Пример использования
profits_losses = [100, -50, 75, -30, 120]
coefficient_of_variation = calculate_coefficient_of_variation(profits_losses)
print(f"Коэффициент вариации: {coefficient_of_variation:.2f}%")
Last updated