вторник, 9 июня 2020 г.

GS.Trade.TradeWindows

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());
            }

        }

воскресенье, 7 июня 2020 г.

GS.Trade.TradeWindows

PositionTotals_Windows4 Standard Deviation Added

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.CalculateStandardDeviation(g.Select(t => t.PnL2)),

                        DailyMaxProfit = g.Max(t => t.Strategy.DailyMaxProfit),
                        DailyMinProfit = g.Min(t => t.Strategy.DailyMinProfit),
                        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;

TimeSeries DataBase

TimeSeries01 DataBase.
Bars.Count 39 700 342 bars

Delete BarSeries URANUS, MARS BarSeriesId = 6,7,8,9

Last BackUp with URANUS, MARS TimeSeries01_200608

After Delete
Bars.Count 32 554 851 bars


пятница, 5 июня 2020 г.

736Z1 Ma2KAtr

736Z1 
NewPositionEvaneHandler() =>

 if (Ma1KAtr2.IsEquals(0.0f)) return;
            if (Ma1KAtr2.IsGreaterThan(Ma1KAtr))
            {
                var pos = Position.Quantity;
                var k = Ma1KAtr + (Ma1KAtr2 - Ma1KAtr)*pos/Contracts;
                XTrend.SetKAtr(k);
            }
            else if (Ma1KAtr2.IsLessThan(Ma1KAtr))
            {
                //var pos = Position.Quantity;
                //var zn = Math.Ceiling(Contracts/2f);
                //if (!(pos >= zn)) return;
                //var diff = zn - (Contracts - pos);
                //var k = Ma1KAtr - (Ma1KAtr2 - Ma1KAtr)*diff/zn;
                //XTrend.SetKAtr((float) k);
                var pos = Position.Quantity;
                // var posdiff = Contracts - pos;
                var k = Ma1KAtr - (Ma1KAtr - Ma1KAtr2) * pos / Contracts;
                XTrend.SetKAtr(k);

            }

if (Ma1KAtr2.IsEquals(0.0f)) return;
            if (Ma1KAtr2.IsGreaterThan(Ma1KAtr))
            {
                var pos = Position.Quantity;
                var k = Ma1KAtr + (Ma1KAtr2 - Ma1KAtr)*pos/Contracts;
                XTrend.SetKAtr(k);
            }
            else if (Ma1KAtr2.IsLessThan(Ma1KAtr))
            {
                //var pos = Position.Quantity;
                //var zn = Math.Ceiling(Contracts/2f);
                //if (!(pos >= zn)) return;
                //var diff = zn - (Contracts - pos);
                //var k = Ma1KAtr - (Ma1KAtr2 - Ma1KAtr)*diff/zn;
                //XTrend.SetKAtr((float) k);
                var pos = Position.Quantity;
                // var posdiff = Contracts - pos;
                var k = Ma1KAtr - (Ma1KAtr - Ma1KAtr2) * pos / Contracts;
                XTrend.SetKAtr(k);
            }


736T
<Z00736T>
    <Name>Z00736.100</Name>
    <Code>Z00736T.5.5.188.068.224.19</Code>
    <TradeAccountKey>Quik.Simulate</TradeAccountKey>
    <TradeTerminalType>Simulator</TradeTerminalType>
    <TradeTerminalKey>MyTerminal</TradeTerminalKey>
    <TimePlanKey>Forts.Standard</TimePlanKey>
    <TickerKey>SiM0</TickerKey>
    <TimeInt>5</TimeInt>

    <Ma1Length>300</Ma1Length>
    <Ma1AtrLength>100</Ma1AtrLength>
    <Ma1KAtr>1.4</Ma1KAtr>
    <Ma1Mode>1</Ma1Mode>

    <TimeInt2>68</TimeInt2>

    <Ma2KAtr>2.24</Ma2KAtr>

Z007 Init()
 if (TimeInt2 > 0 && TimeInt2 != TimeInt)
                {
                    if (Ma2KAtrMltp.IsGreaterThan(0f))
                        PrimTrend = TradeContext.RegisterTimeSeries(
                            new Xma018("Xma18_2", Ticker, (int) TimeInt2, Ma1Length, MaAtrLength1, MaAtrLength2,  Ma1KAtr*Ma2KAtrMltp,
                                Ma1Mode)) as Xma018;
                    else if (Ma2KAtr.IsGreaterThan(0f))
                        PrimTrend = TradeContext.RegisterTimeSeries(
                            new Xma018("Xma18_2", Ticker, (int) TimeInt2, Ma1Length, MaAtrLength1, MaAtrLength2, Ma2KAtr,
                                Ma1Mode)) as Xma018;
                    //else if (Ma2KAtr > 0f)
                    //    PrimTrend = TradeContext.RegisterTimeSeries(
                    //        new Xma018("Xma18_2", Ticker, (int) TimeInt, Ma1Length, MaAtrLength1, MaAtrLength2, Ma2KAtr,
                    //            Ma1Mode)) as Xma018;
                }
                else
                {
                    if (Ma2KAtrMltp.IsGreaterThan(0f))
                        PrimTrend = TradeContext.RegisterTimeSeries(
                            new Xma018("Xma18_2", Ticker, (int)TimeInt, Ma1Length, MaAtrLength1, MaAtrLength2, Ma1KAtr * Ma2KAtrMltp,
                                Ma1Mode)) as Xma018;
                    else if (Ma2KAtr.IsGreaterThan(0f))
                        PrimTrend = TradeContext.RegisterTimeSeries(
                            new Xma018("Xma18_2", Ticker, (int)TimeInt, Ma1Length, MaAtrLength1, MaAtrLength2, Ma2KAtr,
                                Ma1Mode)) as Xma018;
                }