5% Down-In-One-Day Panic Recovery

Концепция, лежащая в основе этой стратегии, заключается в том, что иногда рынок паникует из-за некоторых новостей и на короткое время снижается курс акций. Через несколько часов люди оправляются от паники, понимают, что цена акций слишком низкая, и начинают покупать.

В конце каждого торгового дня эта стратегия получает дневной бар в обработчике события OnBar. Если позиция не открыта, стратегия использует сегодняшнюю цену закрытия для расчета новой лимитной цены, которая на 5% ниже сегодняшней цены закрытия, и выдает лимитный ордер на покупку, который будет исполнен при открытии рынка на следующий день.

Напротив, если позиция открыта в конце дня, это означает, что где-то сегодня произошел 5% -ный разрыв, и поэтому стратегия немедленно закрывает позицию с помощью рыночного ордера (который будет выполнен при открытии рынка на следующее утро).


Код


using OpenQuant.API;

public class MyStrategy : Strategy
{
	[Parameter("Buy when a stock drops this number of percents in one day")]
	double Percent = 5;

	[Parameter("Order quantity (number of contracts to trade)")]
	double Qty = 100;

	Order buyOrder;

	public override void OnBar(Bar bar)
	{
		// if we do not have a position, update the limit buy order to be 5% above today's close
		if (!HasPosition)
		{
			// cancel the old limit order (it's out of date now)
			if (buyOrder != null)
				buyOrder.Cancel();

			// issue a new buy order at 5% below today's close this order will execute tomorrow 
			// if price is matched
			double buy_price = bar.Close * (1 - (Percent / 100));

			buyOrder = BuyLimitOrder(Qty, buy_price, "Entry");
			buyOrder.Send();
		}

		// else we opened a position today using our limit order from yesterday, so now close 
		// the position at the end of today. We expect that such a big drop was freaky, and that 
		// prices recovered during the day. If not, this order stops further losses.
		else
			Sell(Qty, "Exit");
	}
}