using System; using System.Collections.Generic; using System.Linq; using System.Text; using TradeIdeas.MiscSupport; namespace TIProAutoTradeExtension { public class ReduceRiskExit : IAdvancedExit { private Position _position = null; public Position Position { get { return _position; } set { _position = value; } } private bool _triggered = false; public bool Triggered { get { return _triggered; } } public ReduceRiskExit(Position position) { _position = position; } private readonly double TIMESTOP_PERCENT_COMPLETE_TRESHOLD = 75; public void Evaluate() { if (null != _position && _position.TimeStop.HasValue && _position.Shares != 0 && null != _position.TimeStopOrder) { DateTime positionOpened = _position.Created; DateTime timeStop = _position.TimeStop.Value; TimeSpan totalTimeStop = timeStop - positionOpened; TimeSpan elapsed = ServerFormats.Now - positionOpened; double percentComplete = elapsed.TotalMinutes / totalTimeStop.TotalMinutes * 100; if (percentComplete > TIMESTOP_PERCENT_COMPLETE_TRESHOLD && _position.TotalProfit < 0) { _triggered = true; foreach (TradeOrder timeStopOrder in _position.TimeStopOrder.ToList()) { TradeOrder updatedOrder = new TradeOrder(timeStopOrder); updatedOrder.GoodAfterTime = ServerFormats.Now; _position.Broker.ModifyOrder(updatedOrder); } } } } } }