← Назад

Предложение по улучшению алгоритма расчета параметров Equity

  1. Сейчас максимальная просадка считается с учетом бумажной прибыли/убытков. В результате стратегия, которая совершила прибыльный трейд, но не зафиксировала часть прибыли, выглядит так же, как и стратегия, совершившая убыточный трейд, а это совсем не одно и то же.

  2. Нет даты максимальной просадки, неудобно искать.

  3. Хотелось бы видеть всю историю просадок, или хотя бы какую-нибудь статистику, а не только одну максимальную.

В связи с этим вопрос: кто-нибудь еще в этом заинтересован и есть ли у кого-нибудь наработки или идеи по реализации?

Комментарии (6)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Alexander
Alexander

Готовы взяться за реализацию?

Camill
Camill Автор

Готов, но хотелось бы сначала прощупать почву. Вдруг все уже написано до нас.

Camill
Camill Автор

Как я понимаю, всем фиолетово.

Тогда просьба к разработчикам - посоветуйте, как правильно добавить параметры к существующему EquityManager.

Навскидку я бы отнаследовался от него, переопределил свойство EquityManager.Parameters, добавив свои параметры, добавил свой обработчик на NewEquityData, и считал бы в нем нужные мне параметры.

Для использования заменил бы _strategy.EquityManager на свой, взяв ITrader и IPnLManager у оригинального.

Есть более прямой способ?

Mikhail Sukhov
Mikhail Sukhov

Camill: Тогда просьба к разработчикам - посоветуйте, как правильно добавить параметры к существующему EquityManager.

Навскидку я бы отнаследовался от него, переопределил свойство EquityManager.Parameters, добавив свои параметры, добавил свой обработчик на NewEquityData, и считал бы в нем нужные мне параметры.

  1. Создается свой IPnLEquityParameter или ITradeEquityParameter (лучше наследовать от класса BaseEquityParameter).
  2. Добавляется в EquityManager.Parameters

Зачем наследоваться и переопределять я не понял.

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

Camill
Camill Автор

Ну так я же мало того что не программист ни разу, так еще и структуру Stoсk# еще не понимаю практически. Но теперь вроде направление понятно, буду копать.

Supervisor
Supervisor

Чтобы ускорить тестирование, пытаюсь сделать так чтобы стратегия прогонялась, а потом только строился график эквити (а не на лету). Тут возникает 2 неочевидные вещи:

  1. Если после тестирования остановить стратегию Strategy.Stop(); то данные EquityManager стираются. не совсем понятно зачем так сделано, ну да ладно.
  2. Вторая фича немного более странная - если НЕ подписаться на событие Strategy.EquityManager.NewEquityData хотя бы так:
Strategy.EquityManager.NewEquityData += d => { };

то данных по эквити тоже не будет даже до остановки стратегии.

Это специально так задумано? :)

Плюс пытаюсь добавить свой пустой EquityManager.Parameter:


public class MyEquityParameter : BaseEquityParameter, IPnLEquityParameter
{
	public MyEquityParameter()
	{
		Name = "MyEquityParameter";
	}

	public void Add(DateTime marketTime, decimal pnl)
	{
		Value = 333;
		RaiseValueChanged();
	}
}

public Strategy()
{
	EquityManager.Parameters.Add(new MyEquityParameter());
}

  • в кривой эквити в результате находится только одно значение, остальные параметры считаются нормально.