Пример #1
0
        void HandleTradeRemoveCommand(string msg, TradeSession trade)
        {
            string[] args = msg.Split(' ');
            if (args.Length < 2)
            {
                trade.SendChatMessage("Invalid arguments.");
                return;
            }

            var pattern = string.Format(".*{0}.*",
                                        msg.Substring(msg.IndexOf(" ")).Trim());

            if (string.IsNullOrWhiteSpace(pattern))
            {
                return;
            }

            UpdateBackpack();

            var assets = GetAssetsMatchingPattern(pattern);

            foreach (var asset in assets)
            {
                var item = GetItemFromDefIndex(asset.DefIndex);
                Logger.WriteLine("Removing from trade: {0}", item.Name);

                trade.RemoveItem(asset.Id);
            }
        }
Пример #2
0
        void HandleTradeMessage(TradeSession trade, TradeEvent @event)
        {
            Logger.WriteLine("{0} says in trade: {1}",
                             SteamFriends.GetFriendPersonaName(trade.OtherSteamId),
                             @event.message);

            HandleTradeTextCommand(trade, @event);
        }
Пример #3
0
        private DateTime GetStartDate(string timeframe, IList <TradeSession> sessions, DateTime currentDate)
        {
            IDictionary <string, int> _frameDic = new Dictionary <string, int>();

            _frameDic.Add("5", 5);
            _frameDic.Add("60", 60);

            TradeSession lastSession = sessions.Last();

            //if (lastSession.Date.AddHours(19) < currentDate)
            //{
            //    currentDate = lastSession.Date.AddHours(19).AddMinutes(-1);
            //}

            //if (lastSession.Date.AddHours(10) > currentDate)
            //{
            //    currentDate = sessions[sessions.Count -2].Date.AddHours(19).AddMinutes(-1);
            //}

            //количество фреймов
            int count = 80;

            //текущая сессия

            var          ss            = sessions.Where(s => currentDate >= s.Date.AddHours(10) && currentDate < s.Date.AddHours(19)).ToList();
            TradeSession curentSession = sessions.Single(s => currentDate >= s.Date.AddHours(10) && currentDate < s.Date.AddHours(19));

            int curIndex = sessions.IndexOf(curentSession);

            DateTime curentSessionDt = curentSession.Date.AddHours(10);

            int currPart = (currentDate.Hour * 60 + currentDate.Minute) - (curentSessionDt.Hour * 60 + curentSessionDt.Minute);

            //длина сессии
            int sessionlength = 9 * 60;
            //длина смещения
            int sessiondiv = _frameDic[timeframe] * count;

            //полных сессий
            int fullSession = sessiondiv / sessionlength;
            //часть сессии
            int partSession = sessiondiv % sessionlength;

            DateTime res;

            if (currPart < partSession)
            {
                res = sessions[curIndex - fullSession - 1].Date.AddHours(19).AddMinutes(currPart - partSession);
            }
            else
            {
                res = sessions[curIndex - fullSession].Date.AddHours(10).AddMinutes(currPart - partSession);
            }

            return(res);
        }
Пример #4
0
        void HandleTradeEvent(TradeSession trade, TradeEvent @event)
        {
            switch (@event.type)
            {
            case ETradeEventType.Initialized:
                HandleTradeInitialized(trade, @event);
                break;

            case ETradeEventType.Message:
                HandleTradeMessage(trade, @event);
                break;

            case ETradeEventType.ItemAdded:
                HandleTradeItemAdded(trade, @event);
                break;

            case ETradeEventType.ItemRemoved:
                var itemRemoved = trade.ForeignInventory.LookupItem(@event.item);
                Logger.WriteLine("Item removed: " + itemRemoved.details.name);
                break;

            case ETradeEventType.Confirmed:
                HandleTradeConfirmed(trade, @event);
                break;

            case ETradeEventType.InventoryLoaded:
                Logger.WriteLine("Inventory loaded: " + @event.ToString());
                break;

            case ETradeEventType.ForeignInventoryLoaded:
                Logger.WriteLine("Foreign Inventory loaded: " + @event.ToString());
                break;

            case ETradeEventType.Ready:
                Logger.WriteLine("Trader is ready to trade.");
                break;

            case ETradeEventType.Unready:
                Logger.WriteLine("Trader is not ready to trade.");
                break;

            case ETradeEventType.Finished:
                var s = string.Format("Trade is finished: " + trade.Status);
                if (trade.Status == ETradeTransactionStatus.Finished)
                {
                    s += string.Format(" id = {0}", @event.tradeId);
                }
                Logger.WriteLine(s);
                break;

            default:
                Logger.WriteLine("Unhandled trade event: " + @event);
                break;
            }
        }
Пример #5
0
        protected void signalPerformanceOptimization(TA.PriceVolumeSeries series, double[] data, int windowSize)
        {
            double stopLossFrom   = 0.02;
            double stopLossTo     = 0.04;
            double stopLossStep   = 0.001;
            double buySignalFrom  = 0.9;;
            double buySignalTo    = 1.1;
            double sellSignalFrom = 0.9;
            double sellSignalTo   = 1.1;
            double signalStep     = 0.002;
            int    maxDays        = 1000;
            int    daysFrom       = 1;
            int    daysTo         = 10;
            int    daysStep       = 1;
            long   loopsTotal     = (long)(((buySignalTo - buySignalFrom) / signalStep) * ((sellSignalFrom - sellSignalTo) / signalStep) * ((stopLossTo - stopLossFrom) / stopLossStep) * (daysFrom - daysTo));

            System.Collections.Generic.List <TradeSession> bestBlocks = new System.Collections.Generic.List <TradeSession>(40);

            double buySignal = buySignalFrom;

            while (buySignal < buySignalTo)
            {
                double sellSignal = sellSignalFrom;
                while (sellSignal < sellSignalTo)
                {
                    double stopLoss = stopLossFrom;
                    while (stopLoss < stopLossTo)
                    {
                        int days = daysFrom;
                        while (days < daysTo)
                        {
                            signalPerformanceOptimization(series, data, windowSize, stopLoss, maxDays, sellSignal, buySignal, days, bestBlocks);
                            loopsTotal--;
                            if ((loopsTotal & 0xFFFF) == 0)
                            {
                                System.Console.Write("." + loopsTotal);
                            }
                            days = days + daysStep;
                        }
                        stopLoss += stopLossStep;
                    }
                    sellSignal += signalStep;
                }
                buySignal += signalStep;
            }

            TradeSession bs = findBest(bestBlocks);

            System.Console.WriteLine("pTotal=" + (int)(100 * bs.p) + ", days=" + bs.days +
                                     ", hits=" + bs.hits + ", maxDrawDown=" + (int)(100 * bs.maxDrawDown) + "" +
                                     ", trades=" + bs.trades.Count + ", stopLoss=" + bs.stopLoss + ", maxDays=" + bs.maxDays +
                                     ", sellSig=" + bs.sellSignal + ", buySig=" + bs.buySignal + ", wind=" + windowSize);
            signalPerformancePrintTrades(bs.trades);
        }
Пример #6
0
        void HandleTradeInitialized(TradeSession trade, TradeEvent @event)
        {
            if (trade.Inventory != null)
            {
                return;
            }

            foreach (var ctx in @event.inventoryApps)
            {
                Logger.WriteLine("Loading inventory: " + ctx.name);
                trade.LoadInventory(SteamUser.SteamID, ctx.appid, ctx.contexts[0].id);
                return;
            }
        }
Пример #7
0
        internal async Task <ExchangeOrder> BuyLimitOrderAsync(TradeSession tradeSession, decimal amount, decimal price)
        {
            var executedOrder = await _exchange.BuyLimitOrderAsync(tradeSession.PairCode, amount, price);

            if (executedOrder.Id == 0)
            {
                throw new Exception("Buy order not executed (order id = 0)");
            }

            BuyLimitOrderPlaced?.Invoke(this, new BitstampOrderEventArgs(executedOrder));
            tradeSession.LastBuyTimestamp = DateTime.Now;

            return(executedOrder);
        }
        /// <summary>
        /// 更新会话信息
        /// </summary>
        /// <param name="tradeToken"></param>
        /// <param name="session"></param>
        /// <returns></returns>
        public bool UpdateSession(string tradeToken, TradeSession session)
        {
            if (string.IsNullOrWhiteSpace(tradeToken))
            {
                return(false);
            }
            string key = GetRedisKey(tradeToken);

            if (session.ExpireTime.TotalMinutes > 0)
            {
                return(this.distributedCache.Set <TradeSession>(key, session, session.ExpireTime));
            }
            return(this.distributedCache.Set <TradeSession>(key, session));
        }
Пример #9
0
        internal Trade(SteamID me, SteamID other, string sessionId, string token, Inventory myInventory, Inventory otherInventory)
        {
            mySteamId = me;
            OtherSID  = other;
            session   = new TradeSession(sessionId, token, other, "440");

            this.eventList = new List <TradeEvent>();

            OtherOfferedItems   = new List <ulong>();
            myOfferedItems      = new Dictionary <int, ulong>();
            steamMyOfferedItems = new List <ulong>();

            OtherInventory = otherInventory;
            MyInventory    = myInventory;
        }
Пример #10
0
        internal Trade(SteamID me, SteamID other, string sessionId, string token, Inventory myInventory, Inventory otherInventory)
        {
            mySteamId = me;
            OtherSID = other;
            session = new TradeSession(sessionId, token, other, "440");

            this.eventList = new List<TradeEvent>();

            OtherOfferedItems = new List<ulong>();
            myOfferedItems = new Dictionary<int, ulong>();
            steamMyOfferedItems = new List<ulong>();

            OtherInventory = otherInventory;
            MyInventory = myInventory;
        }
Пример #11
0
        void HandleTradeItemsCommand(string msg, TradeSession trade)
        {
            trade.SendChatMessage("Not implemented yet!");
            return;

            var sb = new StringBuilder();

            sb.AppendLine("Items:");

            foreach (var item in trade.ItemsToReceive)
            {
                sb.AppendLine(string.Format("{0} | {1}", item.id,
                                            item.details.name));
            }

            trade.SendChatMessage(sb.ToString());
        }
 public Dialog_TradeAerialVehicle(AerialVehicleInFlight aerialVehicle, Pawn playerNegotiator, ITrader trader, bool giftsOnly = false)
 {
     this.aerialVehicle = aerialVehicle;
     this.giftsOnly     = giftsOnly;
     TradeSession.SetupWith(trader, playerNegotiator, giftsOnly);
     SetupPlayerCaravanVariables();
     forcePause = true;
     absorbInputAroundWindow = true;
     soundAppear             = SoundDefOf.CommsWindow_Open;
     soundClose = SoundDefOf.CommsWindow_Close;
     if (trader is PassingShip)
     {
         soundAmbient = SoundDefOf.RadioComms_Ambience;
     }
     sorter1 = TransferableSorterDefOf.Category;
     sorter2 = TransferableSorterDefOf.MarketValue;
 }
Пример #13
0
        public async Task GetTradeSession()
        {
            TradeSession.Clear();

            // Account trade session
            TTTradeSession tradeSession = await _client.GetTradeSessionAsync();

            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.PlatformName), tradeSession.PlatformName));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.PlatformCompany), tradeSession.PlatformCompany));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.PlatformAddress), tradeSession.PlatformAddress));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.PlatformTimezoneOffset), tradeSession.PlatformTimezoneOffset));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.SessionId), tradeSession.SessionId));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.SessionStatus), tradeSession.SessionStatus));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.SessionStartTime), tradeSession.SessionStartTime.ToString("u")));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.SessionEndTime), tradeSession.SessionEndTime.ToString("u")));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.SessionOpenTime), tradeSession.SessionOpenTime.ToString("u")));
            TradeSession.Add(new KeyValuePair <string, object>(nameof(tradeSession.SessionCloseTime), tradeSession.SessionCloseTime.ToString("u")));
        }
Пример #14
0
        internal Trade(SteamID me, SteamID other, string sessionId, string token, GenericInventory myInventory, GenericInventory otherInventory)
        {
            TradeStarted = false;
            OtherIsReady = false;
            MeIsReady    = false;
            mySteamId    = me;
            OtherSID     = other;

            session = new TradeSession(sessionId, token, other);

            this.eventList = new List <TradeEvent>();

            OtherOfferedItems   = new List <GenericInventory.GenericItem>();
            MyOfferedItems      = new List <GenericInventory.GenericItem>();
            steamMyOfferedItems = new Dictionary <int, GenericInventory.GenericItem>();

            MyInventory    = myInventory;
            OtherInventory = otherInventory;
        }
Пример #15
0
        void HandleTradeItemAdded(TradeSession trade, TradeEvent @event)
        {
            if (@event.item.appid != TF2App)
            {
                Logger.WriteLine("Ignored item: not TF2 item...");
                return;
            }

            var asset = trade.ForeignInventory.LookupItem(@event.item);
            var item  = GetItemFromAsset(asset);

            if (item == null)
            {
                Logger.WriteLine("Unknown item added: " + @event.item);
                return;
            }

            Logger.WriteLine("Item added: " + item.ItemName);
        }
Пример #16
0
        internal Trade(SteamID me, SteamID other, SteamWeb steamWeb, Task <Inventory> myInventoryTask, Task <Inventory> otherInventoryTask)
        {
            TradeStarted = false;
            OtherIsReady = false;
            MeIsReady    = false;
            mySteamId    = me;
            OtherSID     = other;

            session = new TradeSession(other, steamWeb);

            this.eventList = new List <TradeEvent>();

            myOfferedItemsLocalCopy = new Dictionary <int, TradeUserAssets>();
            otherOfferedItems       = new List <TradeUserAssets>();
            myOfferedItems          = new List <TradeUserAssets>();

            this.otherInventoryTask = otherInventoryTask;
            this.myInventoryTask    = myInventoryTask;
        }
Пример #17
0
        internal Trade(SteamID me, SteamID other, string sessionId, string token, Task <Inventory> myInventoryTask, Task <Inventory> otherInventoryTask)
        {
            TradeStarted = false;
            OtherIsReady = false;
            MeIsReady    = false;
            mySteamId    = me;
            OtherSID     = other;

            session = new TradeSession(sessionId, token, other);

            this.eventList = new List <TradeEvent>();

            OtherOfferedItems   = new List <ulong>();
            steamMyOfferedItems = new Dictionary <int, ulong>();
            MyOfferedItems      = new List <ulong>();

            this.otherInventoryTask = otherInventoryTask;
            this.myInventoryTask    = myInventoryTask;
        }
Пример #18
0
        protected void _signalPerformanceOptimization(TA.PriceVolumeSeries series, double[] data, int windowSize)
        {
            double stopLossStep = 0.001;

            System.Collections.Generic.List <TradeSession> bestBlocks = new System.Collections.Generic.List <TradeSession>(40);

            double buySignal  = -1.94;
            double sellSignal = 1.7;
            double stopLoss   = 0.026;

            signalPerformanceOptimization(series, data, windowSize, stopLoss, 1000, 1.05, 0.9, 3, bestBlocks);

            TradeSession bs = findBest(bestBlocks);

            System.Console.WriteLine("pTotal=" + (int)(100 * bs.p) + ", days=" + bs.days +
                                     ", hits=" + bs.hits + ", maxDrawDown=" + (int)(100 * bs.maxDrawDown) + "" +
                                     ", trades=" + bs.trades.Count + ", stopLoss=" + bs.stopLoss + ", maxDays=" + bs.maxDays +
                                     ", sellSig=" + bs.sellSignal + ", buySig=" + bs.buySignal + ", wind=" + windowSize);
            signalPerformancePrintTrades(bs.trades);
        }
Пример #19
0
        /// <summary>
        /// This function will initialize the trading.
        /// First it will check if the desired target is a existing target and fill it
        /// to your characer.target, by using is Character we check if the target is a valid
        /// Character or a other type of actor.
        ///
        /// If the selected character is a non-character or the target is yourself
        /// we'll send a reason of NO_TARGET. If the selected target already has a tradesession
        /// active we send a TRADE_ACTIVE. IF everything goes according to plans we'll not set
        /// a reason which equals sucess.
        /// </summary>
        /// <param name="cpkt"></param>
        private void CM_TRADEINVITATION(CMSG_REQUESTTRADE cpkt)
        {
            if (Regiontree.TryFind(cpkt.TargetActor, this.character, out this.character._target))
            {
                if (character.Target is Character)
                {
                    Character Target = this.character.Target as Character;
                    if (Target.TradeSession != null)
                    {
                        //CHARACTER CAN'T TRADE, HE IS ALREADY IN A TRADE
                        SMSG_TRADERESULT spkt = new SMSG_TRADERESULT();
                        spkt.ActorId   = cpkt.TargetActor;
                        spkt.SessionId = this.character.id;
                        spkt.Reason    = (byte)TradeResult.TargetAlreadyInTrade;
                        this.Send((byte[])spkt);
                    }
                    else
                    {
                        //TRADE SESSION ESTABLISHED
                        TradeSession tradesession = new TradeSession(this.character, Target);
                        Target.TradeSession         = tradesession;
                        this.character.TradeSession = tradesession;

                        //TRADE INVITATION WAIT FOR CONFIRMATION
                        SMSG_TRADEINVITATION spkt = new SMSG_TRADEINVITATION();
                        spkt.SessionId = Target.id;
                        spkt.ActorId   = this.character.id;
                        Target.client.Send((byte[])spkt);
                    }
                }
                else
                {
                    //SELECTED TARGET WAS NOT FOUND
                    SMSG_TRADERESULT spkt = new SMSG_TRADERESULT();
                    spkt.ActorId   = cpkt.TargetActor;
                    spkt.SessionId = this.character.id;
                    spkt.Reason    = (byte)TradeResult.TargetNotFound;
                    this.Send((byte[])spkt);
                }
            }
        }
Пример #20
0
        protected TradeSession findBest(System.Collections.Generic.List <TradeSession> sessions)
        {
            TradeSession bestSession = null;
            double       p           = Double.MinValue;
            double       maxDrawDown = Double.MaxValue;
            int          hits        = Int32.MinValue;
            int          trades      = Int32.MinValue;

            foreach (TradeSession s in sessions)
            {
                if (s.p > p)
                {
                    p           = s.p;
                    maxDrawDown = s.maxDrawDown;
                    bestSession = s;
                    trades      = s.trades.Count;
                }
            }

            return(bestSession);
        }
        /// <summary>
        /// 保存会话信息,并更新该会话对应账号下面的TradeToken
        /// </summary>
        /// <param name="tradeToken"></param>
        /// <param name="session">存储的交易账户信息,过期时间为0代表永久有效</param>
        /// <returns></returns>
        public bool SaveSession(string tradeToken, TradeSession session)
        {
            if (string.IsNullOrWhiteSpace(tradeToken))
            {
                return(false);
            }
            if (session == null || string.IsNullOrEmpty(session.BrokerAccount))
            {
                return(false);
            }

            var allToken = InnerGetAllToken(session.CompCounter, session.BrokerAccount);

            if (allToken == null)
            {
                allToken = new List <string>();
            }
            allToken.Add(tradeToken);
            this.distributedCache.Set(GetBrokerAccountKey(session.CompCounter, session.BrokerAccount), allToken);

            return(UpdateSession(tradeToken, session));
        }
Пример #22
0
        void ProcessCurrentTrade()
        {
            if (CurrentTrade == null)
            {
                return;
            }

            CurrentTrade.Update();

            TradeEvent @event = null;

            while (CurrentTrade.Events.TryDequeue(out @event))
            {
                //Logger.WriteLine("Got event: " + evt.type);
                HandleTradeEvent(CurrentTrade, @event);
            }

            if (CurrentTrade.Status != ETradeTransactionStatus.InProgress)
            {
                CurrentTrade = null;
            }
        }
Пример #23
0
        public async Task TradeAsync(SocketUser user)
        {
            Context.TryGetUser(user.Id, out ArcadeUser account);

            if (await CatchEmptyAccountAsync(account))
            {
                return;
            }

            if (!Context.Account.CanTrade)
            {
                return;
            }

            Context.Account.CanTrade = false;

            var session = new TradeSession(Context, account);

            await StartSessionAsync(session, TimeSpan.FromSeconds(20));

            Context.Account.CanTrade = true;
            account.CanTrade         = true;
        }
Пример #24
0
        public void MaxNumberOfBuyOrdersHolder()
        {
            // arrange
            var sessionWithZeroOrders = new TradeSession {
                OpenOrders = new List <ExchangeOrder> ()
            };
            var sessionWithOneOrder = new TradeSession {
                OpenOrders = new List <ExchangeOrder> {
                    new ExchangeOrder {
                        Type = BitstampOrderType.Buy
                    }
                }
            };
            var sessionWithTwoOrders = new TradeSession
            {
                OpenOrders = new List <ExchangeOrder> {
                    new ExchangeOrder {
                        Type = BitstampOrderType.Buy
                    },
                    new ExchangeOrder {
                        Type = BitstampOrderType.Buy
                    }
                }
            };
            var tradeHolder = new MaxNumberOfBuyOrdersHolder(2);

            // act
            var resultWithZeroOrders = tradeHolder.Execute(sessionWithZeroOrders);
            var resultWithOneOrder   = tradeHolder.Execute(sessionWithOneOrder);
            var resultWithTwoOrders  = tradeHolder.Execute(sessionWithTwoOrders);

            // assert
            Assert.AreEqual(resultWithZeroOrders, false);
            Assert.AreEqual(resultWithOneOrder, false);
            Assert.AreEqual(resultWithTwoOrders, true);
        }
Пример #25
0
        void HandleTradeTextCommand(TradeSession trade, TradeEvent @event)
        {
            SendChatDelegate sendDelegate = (sender, entry, text) =>
            {
                trade.SendChatMessage(text);
            };

            TradeCommand cmd;

            if (!HandleCommandCommon(
                    @event.message, @event.sender, sendDelegate, out cmd))
            {
                return;
            }

            var messageMap = new Dictionary <TradeCommand, Action <string, TradeSession> >
            {
                { TradeCommand.Help, HandleTradeHelpCommand },
                { TradeCommand.Ready, HandleTradeReadyCommand },
                { TradeCommand.Add, HandleTradeAddCommand },
                { TradeCommand.Remove, HandleTradeRemoveCommand },
                { TradeCommand.Confirm, HandleTradeConfirmCommand },
                { TradeCommand.Items, HandleTradeItemsCommand },
                { TradeCommand.Cancel, HandleTradeCancelCommand },
            };

            Action <string, TradeSession> func;

            if (!messageMap.TryGetValue(cmd, out func))
            {
                Logger.WriteLine("Unhandled trade command: {0}", cmd);
                return;
            }

            func(@event.message, trade);
        }
Пример #26
0
        public void WaitPeriodAfterBuyOrderHolder()
        {
            // arrange
            var tradeSession1 = new TradeSession {
                Timestamp = DateTime.Now, LastBuyTimestamp = DateTime.Now
            };
            var tradeSession2 = new TradeSession {
                Timestamp = DateTime.Now, LastBuyTimestamp = DateTime.Now.AddSeconds(-30)
            };
            var tradeSession3 = new TradeSession {
                Timestamp = DateTime.Now, LastBuyTimestamp = DateTime.Now.AddSeconds(-61)
            };
            var tradeHolder = new WaitPeriodAfterBuyOrderHolder(TimeSpan.FromMinutes(1));

            // act
            var result1 = tradeHolder.Execute(tradeSession1);
            var result2 = tradeHolder.Execute(tradeSession2);
            var result3 = tradeHolder.Execute(tradeSession3);

            // assert
            Assert.AreEqual(result1, true);
            Assert.AreEqual(result2, true);
            Assert.AreEqual(result3, false);
        }
Пример #27
0
 public void setTrade(TradeSession tradeSession)
 {
     this.tradeSession = tradeSession;
 }
Пример #28
0
 void HandleTradeCancelCommand(string msg, TradeSession trade)
 {
     trade.CancelTrade();
 }
Пример #29
0
 void HandleTradeConfirmCommand(string msg, TradeSession trade)
 {
     trade.Confirm();
 }
        public bool Execute(TradeSession tradeSession)
        {
            var openOrders = tradeSession.OpenOrders.Where(o => o.PairCode == tradeSession.PairCode).ToList();

            return(openOrders.Count(o => o.Type == BitstampOrderType.Buy) >= _maxNumberOfBuyOrders);
        }
Пример #31
0
        protected void signalPerformanceOptimization(TA.PriceVolumeSeries series, double[] data, int windowSize,
            double stopLoss,
            int maxDays, double diffSell, double diffBuy, int days,
            System.Collections.Generic.List<TradeSession> bestBlocks)
        {
            Trade trade;
            System.Collections.Generic.List<Trade> trades = new System.Collections.Generic.List<Trade>(10);
            int i = 0;
            while (i < (data.Length - 1))
            {
                int idx = i + windowSize;
                TA.Candle candle = (TA.Candle)series.Data[idx];
                double p;
                if (signalSell(series, idx, diffSell, days))
                {
                    signalPerformance(series, stopLoss, maxDays, idx, false, diffSell, diffBuy, days, out trade);
                    if (trades.Count < 200) trades.Add(trade);
                    else break;
                    i += Math.Max(1, trade.days);
                    //                        System.Console.Write("\tSell at "+idx+" entry="+trade.entry+" exit="+trade.exit+" "+candle.ToString());
                    //                        System.Console.WriteLine(" p="+trade.p+", days="+trade.days+", exit at "+(idx+trade.days));
                }
                else if (signalBuy(series, idx, diffBuy, days))  // buy condition and trigger
                {
                    signalPerformance(series, stopLoss, maxDays, idx, true, diffSell, diffBuy, days, out trade);
                    if (trades.Count < 200) trades.Add(trade);
                    else break;
                    i += Math.Max(1, trade.days);
                    //                        System.Console.Write("\tBuy at "+idx+" entry="+trade.entry+" exit="+trade.exit+" "+candle.ToString());
                    //                        System.Console.WriteLine(" p="+trade.p+", days="+trade.days+", exit at "+(idx+trade.days));
                }
                else i++;
            }

            double pTotal;
            int daysTotal;
            int hits;
            double maxDrawDown;
            signalPerformanceGetTrades(trades, out daysTotal, out hits, out pTotal, out maxDrawDown);
            int misses = trades.Count - hits;
            if ((pTotal > 1.1) && (trades.Count > 5) && (bestBlocks.Count < 1000))
            {
                TradeSession ts = new TradeSession();
                ts.trades = trades;
                ts.maxDays = maxDays;
                ts.p = pTotal;
                ts.days = daysTotal;
                ts.hits = hits;
                ts.stopLoss = stopLoss;
                ts.sellSignal = diffSell;
                ts.buySignal = diffBuy;
                ts.maxDays = maxDays;
                ts.maxDrawDown = maxDrawDown;
                bestBlocks.Add(ts);
                System.Console.Write("+");
                //                System.Console.WriteLine("p="+pTotal);
                //                signalPerformancePrintTrades(trades);
            }
            if ((pTotal > 2) && (trades.Count > 5) && (bestBlocks.Count > 1000))
                System.Console.Write("-");
            //            System.Console.Write("1");
        }
Пример #32
0
        /// <summary>
        /// Occurs when your aggreeing with the trade.
        /// After the trade content has been agreed.
        /// </summary>
        private void CM_TRADECONFIRM(CMSG_TRADECONFIRM cpkt)
        {
            TradeSession session = this.character.TradeSession;

            if (session != null)
            {
                //OBTAIN THE ORGIN TARGET
                Character target;
                TradeSession.TradeItem[] Items;
                if (this.character.TradeSession.Source == this.character)
                {
                    target = session.Target;
                    Items  = session.TargetItem;
                }
                else
                {
                    target = session.Source;
                    Items  = session.SourceItem;
                }

                //Calculate required slots
                int slots = 0;
                for (int i = 0; i < 16; i++)
                {
                    if (Items[i] == null)
                    {
                        continue;
                    }
                    slots++;
                }

                if (slots > this.character.container.Capacity - this.character.container.Count)
                {
                    //Not enough space oponent
                    SMSG_TRADERESULT2 spkt = new SMSG_TRADERESULT2();
                    spkt.Reason    = (byte)TradeResult.TargetNotEnoughInventorySpace;
                    spkt.SessionId = target.id;
                    target.client.Send((byte[])spkt);

                    //Not enough space myself
                    SMSG_TRADERESULT2 spkt2 = new SMSG_TRADERESULT2();
                    spkt2.Reason    = (byte)TradeResult.NotEnoughIventorySpace;
                    spkt2.SessionId = this.character.id;
                    this.Send((byte[])spkt2);

                    //Set tradesession to null;
                    this.character.TradeSession = null;
                    target.TradeSession         = null;
                    return;
                }
                else
                {
                    if (session.Source == this.character)
                    {
                        session.SourceHasAgreed = true;
                    }
                    else
                    {
                        session.TargetHasAgreed = true;
                    }
                }

                if (session.TargetHasAgreed && session.SourceHasAgreed)
                {
                    target.ZENY         += session.ZenySource;
                    this.character.ZENY -= session.ZenySource;

                    target.ZENY         -= session.ZenyTarget;
                    this.character.ZENY += session.ZenyTarget;

                    List <Rag2Item> SourceList = new List <Rag2Item>();
                    List <Rag2Item> TargetList = new List <Rag2Item>();
                    for (int i = 0; i < 16; i++)
                    {
                        TradeSession.TradeItem item = session.SourceItem[i];
                        if (item == null)
                        {
                            continue;
                        }

                        Rag2Item ragitem = this.character.container[item.Slot];
                        if (ragitem.count - item.Count == 0)
                        {
                            SourceList.Add(ragitem);
                            this.character.container.RemoveAt(item.Slot);
                            SMSG_DELETEITEM spkt = new SMSG_DELETEITEM();
                            spkt.Container    = 2;
                            spkt.Index        = item.Slot;
                            spkt.SessionId    = this.character.id;
                            spkt.UpdateReason = (byte)ItemUpdateReason.SendToTrader;
                            this.Send((byte[])spkt);
                        }
                        else
                        {
                            SourceList.Add(ragitem.Clone(item.Count));
                            ragitem.count -= item.Count;
                            SMSG_UPDATEITEM spkt = new SMSG_UPDATEITEM();
                            spkt.Container    = 2;
                            spkt.Index        = item.Slot;
                            spkt.SessionId    = this.character.id;
                            spkt.UpdateReason = (byte)ItemUpdateReason.SendToTrader;
                            spkt.UpdateType   = 4;
                            this.Send((byte[])spkt);
                        }
                    }

                    for (int i = 0; i < 16; i++)
                    {
                        TradeSession.TradeItem item = session.TargetItem[i];
                        if (item == null)
                        {
                            continue;
                        }

                        Rag2Item ragitem = target.container[item.Slot];
                        if (ragitem.count - item.Count == 0)
                        {
                            TargetList.Add(ragitem);
                            this.character.container.RemoveAt(item.Slot);
                            SMSG_DELETEITEM spkt = new SMSG_DELETEITEM();
                            spkt.Container    = 2;
                            spkt.Index        = item.Slot;
                            spkt.SessionId    = target.id;
                            spkt.UpdateReason = (byte)ItemUpdateReason.SendToTrader;
                            target.client.Send((byte[])spkt);
                        }
                        else
                        {
                            TargetList.Add(ragitem.Clone(item.Count));
                            ragitem.count -= item.Count;
                            SMSG_UPDATEITEM spkt = new SMSG_UPDATEITEM();
                            spkt.Container    = 2;
                            spkt.Index        = item.Slot;
                            spkt.SessionId    = target.id;
                            spkt.UpdateReason = (byte)ItemUpdateReason.SendToTrader;
                            spkt.UpdateType   = 4;
                            target.client.Send((byte[])spkt);
                        }
                    }

                    for (int i = 0; i < SourceList.Count; i++)
                    {
                        Rag2Item     ragitem = SourceList[i];
                        int          index   = target.container.Add(ragitem);
                        SMSG_ADDITEM spkt    = new SMSG_ADDITEM();
                        spkt.Container    = 2;
                        spkt.UpdateReason = (byte)ItemUpdateReason.ReceiveFromTrade;
                        spkt.SessionId    = target.id;
                        spkt.SetItem(ragitem, index);
                        target.client.Send((byte[])spkt);
                    }

                    for (int i = 0; i < TargetList.Count; i++)
                    {
                        Rag2Item     ragitem = TargetList[i];
                        int          index   = this.character.container.Add(ragitem);
                        SMSG_ADDITEM spkt    = new SMSG_ADDITEM();
                        spkt.Container    = 2;
                        spkt.UpdateReason = (byte)ItemUpdateReason.ReceiveFromTrade;
                        spkt.SessionId    = this.character.id;
                        spkt.SetItem(ragitem, index);
                        this.Send((byte[])spkt);
                    }

                    //Update zeny yourself
                    SMSG_SENDZENY spkt4 = new SMSG_SENDZENY();
                    spkt4.SessionId = this.character.id;
                    spkt4.Zeny      = this.character.ZENY;
                    this.Send((byte[])spkt4);

                    //Update zeny opponent
                    SMSG_SENDZENY spkt5 = new SMSG_SENDZENY();
                    spkt5.SessionId = target.id;
                    spkt5.Zeny      = target.ZENY;
                    target.client.Send((byte[])spkt5);

                    //Set traderesult to succesfull
                    SMSG_TRADERESULT2 spkt3 = new SMSG_TRADERESULT2();
                    spkt3.SessionId = this.character.id;
                    this.Send((byte[])spkt3);

                    //Set traderesult successfull oponent
                    SMSG_TRADERESULT2 spkt2 = new SMSG_TRADERESULT2();
                    spkt2.SessionId = target.id;
                    target.client.Send((byte[])spkt2);

                    //Set the tradesession to null
                    this.character.TradeSession = null;
                    target.TradeSession         = null;
                }
            }
        }
Пример #33
0
 public static void PrepareVirtualTrade(Pawn pawn, VirtualTrader trader)
 {
     TradeSession.SetupWith(trader, pawn, false);
     trader.InvokeTradeUI();
 }