PositionTotals_Windows4
Update Totals with PositionNpc2 via Strategy?.DailyMaxProfit
Strategy.Positions2:
pp.Strategy.PositionTotal.Update(p); // 07.01.2014
CreateStat(); FireTotalPositionUpdateEvent(pp.Strategy.PositionTotal);
public void FireTotalPositionUpdateEvent(IPosition2 p)
{
if (p == null) return;
// var pcl = p.Clone();
Strategy.OnChangedEvent(new Events.EventArgs
{
Category = "UI.Positions",
Entity = "Total",
Operation = "Update",
Object = p,
Sender = this
});
}
public PositionNpc2(IPosition2 ip)
{
Strategy = ip.Strategy;
FirstTradeDT = ip.FirstTradeDT;
FirstTradeNumber = ip.FirstTradeNumber;
LastTradeDT = ip.LastTradeDT;
LastTradeNumber = ip.LastTradeNumber;
Operation = ip.PosOperation;
Status = ip.PosStatus;
Quantity = ip.Quantity;
Price1 = ip.Price1;
Price2 = ip.Price2;
DailyPnLFixed = ip.DailyPnLFixed;
PosPnLFixed = ip.PosPnLFixed;
DailyProfitLimit = ip.DailyProfitLimit;
LastPrice = ip.LastPrice;
//PnL1 = ip.PnL;
// 17.04.11
//PnL2 = ip.PnL2;
PnL2 = ip.PnL;
PnL3 = ip.PnL3;
StrategyKeyEx = ip.StrategyKeyEx;
TickerCodeEx = ip.TickerCodeEx;
AccountCodeEx = ip.AccountCodeEx;
Delta = ip.Delta;
//TotalDailyMaxProfit = ip.TotalDailyMaxProfit;
//TotalDailyMaxLoss = ip.TotalDailyMaxLoss;
//TotalDailyMaxProfitDT = ip.TotalDailyMaxProfitDT;
//TotalDailyMaxLossDT = ip.TotalDailyMaxLossDT;
TotalDailyMaxProfit = ip.Strategy?.DailyMaxProfit ?? 0;
TotalDailyMaxLoss = ip.Strategy?.DailyMaxLoss ?? 0;
TotalDailyMaxProfitDT = ip.Strategy?.DailyMaxProfitDT ?? DateTime.Now;
TotalDailyMaxLossDT = ip.Strategy?.DailyMaxLossDT ?? DateTime.Now;
Comment = ip.Comment;
}
public void Update(IPosition2 ip)
{
if (Quantity == 0)
{
FirstTradeDT = ip.FirstTradeDT;
FirstTradeNumber = ip.FirstTradeNumber;
}
LastTradeDT = ip.LastTradeDT;
LastTradeNumber = ip.LastTradeNumber;
Operation = ip.PosOperation;
Status = ip.PosStatus;
Quantity = ip.Quantity;
Price1 = ip.Price1;
Price2 = ip.Price2;
LastPrice = ip.LastPrice;
//PnL1 = ip.PnL;
// 17.04.11
//PnL2 = ip.PnL2;
PnL2 = ip.PnL;
PnL3 = ip.PnL3;
DailyPnLFixed = ip.DailyPnLFixed;
PosPnLFixed = ip.PosPnLFixed;
DailyProfitLimit = ip.DailyProfitLimit;
StrategyKeyEx = ip.StrategyKeyEx;
AccountCodeEx = ip.AccountCodeEx;
TickerCodeEx = ip.TickerCodeEx;
Delta = ip.Delta;
TotalDailyMaxProfit = ip.Strategy?.DailyMaxProfit ?? 0;
TotalDailyMaxLoss = ip.Strategy?.DailyMaxLoss ?? 0;
TotalDailyMaxProfitDT = ip.Strategy?.DailyMaxProfitDT ?? DateTime.Now;
TotalDailyMaxLossDT = ip.Strategy?.DailyMaxLossDT ?? DateTime.Now;
// TotalDailyMaxProfit = ip.TotalDailyMaxProfit;
// TotalDailyMaxLoss = ip.TotalDailyMaxLoss;
// TotalDailyMaxProfitDT = ip.TotalDailyMaxProfitDT;
// TotalDailyMaxLossDT = ip.TotalDailyMaxLossDT;
Comment = ip.Comment;
}
Update Totals Strategies, Tickers, TimeInt
private void CreateTotalTickersReport(object sender, RoutedEventArgs routedEventArgs)
{
var method = MethodBase.GetCurrentMethod().Name + "()";
TotalTickersList.Clear();
if (PositionCollection == null || !PositionCollection.Any()) return;
try
{
var v = (from t in PositionCollection
group t by t.Ticker.Code
into g
select new TotalStat01()
{
Strategy = "All",
Ticker = g.Key,
TimeInt = 0,
Quantity = g.Sum(t=>t.Quantity),
Count = g.Count(),
ProfitLoss = g.Sum(t => t.PnL2),
ProfitAvg = g.Average(t => t.PnL2),
ProfitMax = g.Max(t=>t.PnL2),
ProfitMin = g.Min(t => t.PnL2),
ProfitStd = GSMath.Math.StandardDeviation(g.Select(t => t.PnL2)),
DailyMaxProfit = g.Max(t => t.Strategy.DailyMaxProfit),
DailyMaxLoss = g.Min(t => t.Strategy.DailyMaxLoss),
FirstTradeDT = g.Min(t => t.FirstTradeDT),
LastTradeDT = g.Max(t => t.LastTradeDT)
}).OrderBy(t => t.Ticker); // .ToList();
foreach (var i in v) TotalTickersList.Add(i);
_isNeedRefreshStat = false;
}
catch (Exception e)
{
_evl?.Evlm2(EvlResult.FATAL, EvlSubject.PROGRAMMING, GetType().FullName, e.GetType().Name,
method, e.Message, ToString());
}
}
Update Totals with PositionNpc2 via Strategy?.DailyMaxProfit
Strategy.Positions2:
pp.Strategy.PositionTotal.Update(p); // 07.01.2014
CreateStat(); FireTotalPositionUpdateEvent(pp.Strategy.PositionTotal);
public void FireTotalPositionUpdateEvent(IPosition2 p)
{
if (p == null) return;
// var pcl = p.Clone();
Strategy.OnChangedEvent(new Events.EventArgs
{
Category = "UI.Positions",
Entity = "Total",
Operation = "Update",
Object = p,
Sender = this
});
}
public PositionNpc2(IPosition2 ip)
{
Strategy = ip.Strategy;
FirstTradeDT = ip.FirstTradeDT;
FirstTradeNumber = ip.FirstTradeNumber;
LastTradeDT = ip.LastTradeDT;
LastTradeNumber = ip.LastTradeNumber;
Operation = ip.PosOperation;
Status = ip.PosStatus;
Quantity = ip.Quantity;
Price1 = ip.Price1;
Price2 = ip.Price2;
DailyPnLFixed = ip.DailyPnLFixed;
PosPnLFixed = ip.PosPnLFixed;
DailyProfitLimit = ip.DailyProfitLimit;
LastPrice = ip.LastPrice;
//PnL1 = ip.PnL;
// 17.04.11
//PnL2 = ip.PnL2;
PnL2 = ip.PnL;
PnL3 = ip.PnL3;
StrategyKeyEx = ip.StrategyKeyEx;
TickerCodeEx = ip.TickerCodeEx;
AccountCodeEx = ip.AccountCodeEx;
Delta = ip.Delta;
//TotalDailyMaxProfit = ip.TotalDailyMaxProfit;
//TotalDailyMaxLoss = ip.TotalDailyMaxLoss;
//TotalDailyMaxProfitDT = ip.TotalDailyMaxProfitDT;
//TotalDailyMaxLossDT = ip.TotalDailyMaxLossDT;
TotalDailyMaxProfit = ip.Strategy?.DailyMaxProfit ?? 0;
TotalDailyMaxLoss = ip.Strategy?.DailyMaxLoss ?? 0;
TotalDailyMaxProfitDT = ip.Strategy?.DailyMaxProfitDT ?? DateTime.Now;
TotalDailyMaxLossDT = ip.Strategy?.DailyMaxLossDT ?? DateTime.Now;
Comment = ip.Comment;
}
public void Update(IPosition2 ip)
{
if (Quantity == 0)
{
FirstTradeDT = ip.FirstTradeDT;
FirstTradeNumber = ip.FirstTradeNumber;
}
LastTradeDT = ip.LastTradeDT;
LastTradeNumber = ip.LastTradeNumber;
Operation = ip.PosOperation;
Status = ip.PosStatus;
Quantity = ip.Quantity;
Price1 = ip.Price1;
Price2 = ip.Price2;
LastPrice = ip.LastPrice;
//PnL1 = ip.PnL;
// 17.04.11
//PnL2 = ip.PnL2;
PnL2 = ip.PnL;
PnL3 = ip.PnL3;
DailyPnLFixed = ip.DailyPnLFixed;
PosPnLFixed = ip.PosPnLFixed;
DailyProfitLimit = ip.DailyProfitLimit;
StrategyKeyEx = ip.StrategyKeyEx;
AccountCodeEx = ip.AccountCodeEx;
TickerCodeEx = ip.TickerCodeEx;
Delta = ip.Delta;
TotalDailyMaxProfit = ip.Strategy?.DailyMaxProfit ?? 0;
TotalDailyMaxLoss = ip.Strategy?.DailyMaxLoss ?? 0;
TotalDailyMaxProfitDT = ip.Strategy?.DailyMaxProfitDT ?? DateTime.Now;
TotalDailyMaxLossDT = ip.Strategy?.DailyMaxLossDT ?? DateTime.Now;
// TotalDailyMaxProfit = ip.TotalDailyMaxProfit;
// TotalDailyMaxLoss = ip.TotalDailyMaxLoss;
// TotalDailyMaxProfitDT = ip.TotalDailyMaxProfitDT;
// TotalDailyMaxLossDT = ip.TotalDailyMaxLossDT;
Comment = ip.Comment;
}
Update Totals Strategies, Tickers, TimeInt
private void CreateTotalTickersReport(object sender, RoutedEventArgs routedEventArgs)
{
var method = MethodBase.GetCurrentMethod().Name + "()";
TotalTickersList.Clear();
if (PositionCollection == null || !PositionCollection.Any()) return;
try
{
var v = (from t in PositionCollection
group t by t.Ticker.Code
into g
select new TotalStat01()
{
Strategy = "All",
Ticker = g.Key,
TimeInt = 0,
Quantity = g.Sum(t=>t.Quantity),
Count = g.Count(),
ProfitLoss = g.Sum(t => t.PnL2),
ProfitAvg = g.Average(t => t.PnL2),
ProfitMax = g.Max(t=>t.PnL2),
ProfitMin = g.Min(t => t.PnL2),
ProfitStd = GSMath.Math.StandardDeviation(g.Select(t => t.PnL2)),
DailyMaxProfit = g.Max(t => t.Strategy.DailyMaxProfit),
DailyMaxLoss = g.Min(t => t.Strategy.DailyMaxLoss),
FirstTradeDT = g.Min(t => t.FirstTradeDT),
LastTradeDT = g.Max(t => t.LastTradeDT)
}).OrderBy(t => t.Ticker); // .ToList();
foreach (var i in v) TotalTickersList.Add(i);
_isNeedRefreshStat = false;
}
catch (Exception e)
{
_evl?.Evlm2(EvlResult.FATAL, EvlSubject.PROGRAMMING, GetType().FullName, e.GetType().Name,
method, e.Message, ToString());
}
}