Стратегия Котирование
Atom Ответить
20.10.2011


Можно ли добавить в стратегии Котирование , параметр минимально допустимый спред :

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

Важно чтоб отодвигатся назад .

Спасибо.


Теги:


Спасибо:




6 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 20.10.2011
Ответить


lesser Перейти

Важно чтоб отодвигатся назад .


Наследуйтесь от стратегии и переопределяйте ее поведение.
Спасибо:

lesser

Фотография
Дата: 20.10.2011
Ответить


А можно где-то посмотреть код стратегии Котирование что-б легче было , а то опыта в програмировании у меня совсем мало , могу неосилить. А вот внести изменения в уже готовую логику думаю получится.
Автор топика
Спасибо:

lesser

Фотография
Дата: 22.10.2011
Ответить


Может мои вопросы и кажутся вам смешными и потому вы их игнорируете , но я как множество людей торгующих на бирже не програмист , и потому мне сложно сразу все понять. Вы ж тоже не за один день стали програмистом.

Хочу понять логику как мне внести изменения в котирование , допустим я наследуюсь и пересоздам правило для маркетчендж , но ведь вся стратегия котирования наверно построена на этом событии ?

Тогда выходит мне нужно создавать свою оддельую марекеткуоте стратегию, с учетом всен нюансов о которых вы уже знаете , а я пока нет :(

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 22.10.2011
Ответить


lesser Перейти
А можно где-то посмотреть код стратегии Котирование что-б легче было , а то опыта в програмировании у меня совсем мало , могу неосилить. А вот внести изменения в уже готовую логику думаю получится.



Код
/// <summary>
	/// Котирование по рыночной цене.
	/// </summary>
	public class MarketQuotingStrategy : BestByPriceQuotingStrategy
	{
		/// <summary>
		/// Создать <see cref="MarketQuotingStrategy"/>.
		/// </summary>
		/// <param name="quotingDirection">Направление котирования.</param>
		/// <param name="quotingVolume">Объем, который необходимо скотировать.</param>
		public MarketQuotingStrategy(OrderDirections quotingDirection, decimal quotingVolume)
			: base(quotingDirection, quotingVolume)
		{
			PriceType = MarketPriceTypes.Following;
			PriceOffset = new Unit();
		}

		/// <summary>
		/// Создать <see cref="MarketQuotingStrategy"/>.
		/// </summary>
		/// <param name="order">Заявка, которую необходимо котировать.</param>
		/// <param name="bestPriceOffset">Отступ от лучшей цены, на которую может уйти котируемая заявка.</param>
		/// <param name="priceOffset">Отступ цены для выставляемой заявки. Определяет размер отступа от лучшей котировки (для покупки прибавляется к цене, для продажи - вычитается).</param>
		/// <returns>Стратегия.</returns>
		public MarketQuotingStrategy(Order order, Unit bestPriceOffset, Unit priceOffset)
			: base(order, bestPriceOffset)
		{
			PriceType = MarketPriceTypes.Following;
			PriceOffset = priceOffset;
		}

		/// <summary>
		/// Тип рыночной цены. По умолчанию равен <see cref="MarketPriceTypes.Following"/>.
		/// </summary>
		public MarketPriceTypes PriceType { get; set; }

		private Unit _priceOffset;

		/// <summary>
		/// Отступ цены для выставляемой заявки. Определяет размер отступа от лучшей котировки (для покупки прибавляется к цене, для продажи - вычитается).
		/// </summary>
		public Unit PriceOffset
		{
			get { return _priceOffset; }
			set
			{
				if (value == null)
					throw new ArgumentNullException("value");

				_priceOffset = value;
			}
		}

		/// <summary>
		/// Получить новую цену для заявки.
		/// </summary>
		/// <returns>Новая цена заявки.</returns>
		protected override decimal GetNewPrice()
		{
			Unit newPrice;

			switch (PriceType)
			{
				case MarketPriceTypes.Opposite:
					var quotes = Security.GetFilteredQuotes(QuotingDirection.Invert(), Order);
					newPrice = QuotingDirection == OrderDirections.Buy
						? quotes.Min(q => q.Price) - PriceOffset
						: quotes.Max(q => q.Price) + PriceOffset;
					break;
				case MarketPriceTypes.Following:
					newPrice = base.GetNewPrice();

					if (QuotingDirection == OrderDirections.Buy)
						newPrice += PriceOffset;
					else
						newPrice -= PriceOffset;
					break;
				case MarketPriceTypes.Middle:
					newPrice = Security.GetMarketPrice(QuotingDirection, null, MarketPriceTypes.Middle);
					break;
				default:
					throw new ArgumentOutOfRangeException();
			}

			return (decimal)newPrice;
		}
	}


Код
/// <summary>
	/// Котирование по лучшей цене. Для данного котирования указывается отступ от лучшей цены <see cref="BestPriceOffset"/>,
	/// на который может уйти котируемая заявка.
	/// </summary>
	public class BestByPriceQuotingStrategy : QuotingStrategy
	{
		/// <summary>
		/// Создать <see cref="BestByPriceQuotingStrategy"/>.
		/// </summary>
		/// <param name="quotingDirection">Направление котирования.</param>
		/// <param name="quotingVolume">Объем, который необходимо скотировать.</param>
		public BestByPriceQuotingStrategy(OrderDirections quotingDirection, decimal quotingVolume)
			: base(quotingDirection, quotingVolume)
		{
			BestPriceOffset = new Unit();
		}

		/// <summary>
		/// Создать <see cref="BestByPriceQuotingStrategy"/>.
		/// </summary>
		/// <param name="order">Заявка, которую необходимо котировать.</param>
		/// <param name="bestPriceOffset">Отступ от лучшей цены, на который может уйти котируемая заявка.</param>
		public BestByPriceQuotingStrategy(Order order, Unit bestPriceOffset)
			: base(order)
		{
			BestPriceOffset = bestPriceOffset;
		}

		private Unit _bestPriceOffset;

		/// <summary>
		/// Отступ от лучшей цены, на который может уйти котируемая заявка.
		/// </summary>
		public Unit BestPriceOffset
		{
			get { return _bestPriceOffset; }
			set
			{
				if (value == null)
					throw new ArgumentNullException("value");

				_bestPriceOffset = value;
			}
		}

		/// <summary>
		/// Нужно ли перерегистрировать заявку.
		/// </summary>
		/// <param name="bestPrice">Лучшая цена.</param>
		/// <returns>True, нужно, иначе, false.</returns>
		protected override bool NeedReRegister(decimal bestPrice)
		{
			return (decimal)(bestPrice - BestPriceOffset) > Order.Price || (decimal)(bestPrice + BestPriceOffset) < Order.Price;
		}
	}
Спасибо: lesser

lesser

Фотография
Дата: 24.10.2011
Ответить


Тут не совсем тот код который я хотел увидеть :(
Мне больше интересно как стратегия котирование работает с ордерами , как их отслеживает , как меняет .
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.10.2011
Ответить


lesser Перейти
Тут не совсем тот код который я хотел увидеть :(
Мне больше интересно как стратегия котирование работает с ордерами , как их отслеживает , как меняет .


Я отвечал на этот вопрос. Что касается того, как она работает с ордерами, то как любая другая стратегия, через ITrader.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy