Математическое ожидание — это среднее значение случайной величины, которое ожидается в результате большого числа экспериментов или случайных событий. В контексте торговли, это важнейший показатель ожидаемой прибыльности торговой стратегии.
Математическое ожидание бывает двух видов: в пунктах и валюте депозита.
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)
double CalculateExpectation(double profit_losses[]) {
int n = ArraySize(profit_losses);
double sum = 0;
for (int i = 0; i < n; i++) {
sum += profit_losses[i];
}
double expectation = sum / n;
return expectation;
}
// Использование
double profit_losses[] = {100, -50, 75, -30, 120}; // пример прибыли/убытка от сделок
double expectation = CalculateExpectation(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)
double CalculateProfitFactor(double profits[], double losses[]) {
double total_profit = ArraySum(profits);
double total_loss = ArraySum(losses);
double profit_factor = total_profit / total_loss;
return profit_factor;
}
// Использование
double profits[] = {100, 50, 75, 30, 120}; // пример прибыли от сделок
double losses[] = {-50, -30, -20, -10, -25}; // пример убытков от сделок
double profit_factor = CalculateProfitFactor(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, "%")
// MQL5
double CalculateProfitability(double total_profit, double initial_capital) {
double profitability = (total_profit / initial_capital) * 100;
return profitability;
}
// Пример использования
double total_profit = 5000; // пример общей прибыли
double initial_capital = 10000; // пример начального капитала
double profitability = CalculateProfitability(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)
double CalculateRecoveryFactor(double absolute_profit, double max_drawdown)
{
return absolute_profit / max_drawdown;
}
// Пример использования
double absolute_profit = 1500; // пример абсолютной прибыли
double max_drawdown = 1000; // пример максимальной просадки
double recovery_factor = CalculateRecoveryFactor(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}")
Фактор линейности (Linearity Factor, LF) - это показатель, который оценивает линейность или стабильность роста капитала при использовании торговой стратегии. Он измеряет степень отклонения кривой капитала от идеальной прямой линии.
Идеальное значение фактора линейности равно 1, что означает полную линейность роста капитала. Значения меньше 1 указывают на нелинейный и нестабильный рост капитала, а значения выше 1 означают, что рост капитала происходит слишком быстро, что может быть признаком высокого риска.
Коэффициент Шарпа - это мера риска-прибыли, которая позволяет оценить доходность инвестиции или стратегии торговли относительно риска. Чем выше значение коэффициента Шарпа, тем лучше отношение доходности к риску.
Где:
Средняя доходность - среднее арифметическое значение доходности инвестиции или стратегии торговли.
Безрисковая ставка - ожидаемая доходность безрискового актива (например, государственных облигаций).
Стандартное отклонение доходности - мера риска инвестиции или стратегии торговли. Показатель позволяет оценить эффективность торговой стратегии с учетом принимаемого риска.
Коэффициент детерминации — это мера, которая показывает, какую часть дисперсии зависимой переменной объясняет модель. Он представляет собой квадрат коэффициента корреляции между фактическими и прогнозируемыми значениями.
Где:
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
Важно отметить, что коэффициент детерминации R2 может принимать значения от 0 до 1. Значение ближе к 1 указывает на лучшее соответствие модели данным.
Этот код принимает массив фактических значений (actual_values) и массив прогнозируемых значений (predicted_values) и возвращает коэффициент детерминации R2.
ProfitStability (Стабильность прибыли)
Описание:
Формула
Показатель "ProfitStability" отражает степень стабильности прибыли торговой стратегии. Чем выше значение этого показателя, тем более стабильной является прибыльность стратегии.
Где:
Среднее значение прибыли - среднее арифметическое значение прибыли от сделок.
Стандартное отклонение прибыли - мера разброса прибыли относительно её среднего значения. Чем меньше стандартное отклонение, тем более стабильной является прибыльность стратегии.
double CalculateProfitStability(double profits[])
{
int n = ArraySize(profits);
double mean_profit = ArraySum(profits) / n;
double sum_squared_difference = 0;
for (int i = 0; i < n; i++)
{
sum_squared_difference += MathPow(profits[i] - mean_profit, 2);
}
double std_dev_profit = MathSqrt(sum_squared_difference / n);
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)
double CalculateSecurityCoefficient(double max_drawdown, double absolute_drawdown)
{
return max_drawdown / absolute_drawdown;
}
// Пример использования
double max_drawdown = 1000; // пример максимальной просадки
double absolute_drawdown = 500; // пример абсолютной просадки
double security_coefficient = CalculateSecurityCoefficient(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}%")