This example is just like the one above, except that it also requires that the previous bar (the previous day) was a down day for the stock, in addition to gapping down 2% at today’s open.

using System;
using System.Drawing;

using OpenQuant.API;
using OpenQuant.API.Indicators;

public class MyStrategy : Strategy
{
	[Parameter("Order quantity (number of contracts to trade)")]
	double Qty = 100;

	[Parameter("Percent")]
	double Percent = 2;	
	
	private Order sellOrder;
	
	private double prevClose;
	
	private bool downDay = false;
	
	public override void OnBar(Bar bar)
	{
		prevClose = bar.Close;
		
		downDay = (bar.Open > bar.Close);
		
		if (HasPosition)
		{
			sellOrder.Cancel();
			
			Sell(Qty, "Exit");
		}
	}

	public override void OnBarOpen(Bar bar)
	{	
		if (downDay)
		{
			if ((prevClose - bar.Open) / prevClose > Percent / 100)
				Buy(Qty, "Entry");
		}
	}
	
	public override void OnPositionOpened()
	{
		sellOrder = SellLimitOrder(Qty, prevClose, "Limit Exit");
		sellOrder.Send();
	}	
}