using System;
using System.Drawing;
using System.Linq;
using PowerLanguage.Function;
using ATCenterProxy.interop;
namespace PowerLanguage.Strategy
{
public class Example_StopLimit : SignalObject
{
private IOrderMarket buyMarketOrder, sellMarketOrder;
private IOrderStopLimit sellStopLimitOrder;
private double sellStopPrice, sellLimitPrice;
public Example_StopLimit(object _ctx) : base(_ctx) { }
protected override void Create()
{
buyMarketOrder = OrderCreator.MarketNextBar(new SOrderParameters(
Contracts.Default, "EnterLong", EOrderAction.Buy));
sellMarketOrder = OrderCreator.MarketNextBar(new SOrderParameters(
Contracts.Default, "ExitLong", EOrderAction.Sell));
sellStopLimitOrder = OrderCreator.StopLimit(new SOrderParameters(
Contracts.Default, "StopLMT", EOrderAction.Sell));
}
protected override void StartCalc()
{
Output.Clear();
}
protected override void CalcBar()
{
if ((StrategyInfo.MarketPosition == 0) && (Bars.Time[0].Date != Bars.Time[1].Date))
{
buyMarketOrder.Send();
sellStopPrice = Bars.Low[0] - Bars.Range();
sellLimitPrice = Bars.Low[0] - (Bars.Range() * 1.5);
Output.WriteLine("{0} - Buy order submitted. Sell stop calculated @ {1} with limit {2}",
Bars.Time[0].ToString("d-M HH:mm:ss"),
sellStopPrice,
sellLimitPrice);
}
if (StrategyInfo.MarketPosition > 0)
{
sellStopLimitOrder.Send(sellStopPrice, sellLimitPrice);
Output.WriteLine("{0} - Submitting sell stop @ {1} with limit {2}",
Bars.Time[0].ToString("d-M HH:mm:ss"),
sellStopPrice,
sellLimitPrice);
double barsInPosition = Bars.CurrentBar - CurrentPosition.OpenTrades[0].EntryOrder.BarNumber;
if (barsInPosition >= 15)
{
sellMarketOrder.Send();
Output.WriteLine("{0} - Position open for {1} bars, submitting exit long market order",
Bars.Time[0].ToString("d-M HH:mm:ss"),
barsInPosition);
}
}
}
}
}