Example #1
0
        internal bool UpdateTDOrderStatus(TDOrder tdOrder)
        {
            bool       res   = false;
            TradeOrder order = GetChildOrderByID(tdOrder.orderId);

            if (order != null)
            {
                switch (tdOrder.status)
                {
                case TDConstantVal.OrderStatus_Canceled:
                case TDConstantVal.OrderStatus_Rejected:
                    if (order.Status != TradeOrderStatus.Cancelled)
                    {
                        order.Status = TradeOrderStatus.Cancelled;
                        res          = true;
                    }
                    ;
                    break;

                case TDConstantVal.OrderStatus_Filled:
                    if (order.Status != TradeOrderStatus.Cancelled && order.Status != TradeOrderStatus.PendingCxl)
                    {
                        order.Status = TradeOrderStatus.Filled;
                        res          = true;
                    }
                    else
                    {
                        Log.Error("Received order OrderFilled msg, however current order status is  " + tdOrder.status);
                    };
                    break;

                case TDConstantVal.OrderStatus_Accepted:
                case TDConstantVal.OrderStatus_AwaitReview:
                case TDConstantVal.OrderStatus_Queued:
                case TDConstantVal.OrderStatus_Working:
                    if (order.Status == TradeOrderStatus.PendingSubmit || order.Status == TradeOrderStatus.Submitted)
                    {
                        order.Status = TradeOrderStatus.Submitted;
                        res          = true;
                    }
                    else
                    {
                        Log.Error("Received order submitted msg, however current order status is  " + tdOrder.status);
                    };
                    break;
                }
            }
            else
            {
                Log.Error(string.Format("Error UpdateChildOrder. Cannot find order. ChildOrderID: {0}, ParentOrderID: {1}", tdOrder.orderId, this.ID));
            }

            return(res);
        }
Example #2
0
    public static void OnPlaceOrder(string profile, TDOrder order)
    {
        if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor)
        {
#if UNITY_ANDROID
            if (adTrackingClass != null)
            {
                adTrackingClass.CallStatic("onPlaceOrder", profile, order.javaObj);
            }
#endif
#if UNITY_IPHONE
            TDATOnPlaceOrder(profile, order.ToString());
#endif
        }
    }
    public static TDOrder CreateOrder(string orderId, int total, string currencyType)
    {
        if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor)
        {
            TDOrder order = new TDOrder();
#if UNITY_ANDROID
            AndroidJavaClass javaClass = new AndroidJavaClass("com.tendcloud.appcpa.Order");
            order.javaObj = javaClass.CallStatic <AndroidJavaObject>("createOrder", orderId, total, currencyType);
#endif
#if UNITY_IPHONE
            order.orderId      = orderId;
            order.total        = total;
            order.currencyType = currencyType;
#endif
            return(order);
        }
        return(null);
    }
Example #4
0
        public List <TradeExecution> GetTDTradeExecution(TDOrder order)
        {
            List <TradeExecution> res = new List <TradeExecution>();

            if (order.orderActivityCollection != null)
            {
                foreach (var item in order.orderActivityCollection)
                {
                    if (item.executionLegs != null)
                    {
                        foreach (var leg in item.executionLegs)
                        {
                            TradeExecution exe = new TradeExecution(leg, order);
                            res.Add(exe);
                        }
                    }
                }
            }
            return(res);
        }
Example #5
0
        public TDOrder GetOrderByID(int orderId)
        {
            TDOrder res = null;

            try
            {
                string accessToken = GetAccessToken();
                string url         = string.Format("{0}/{1}", OrderURL, orderId);
                webClient = new WebClient();
                webClient.Headers[HttpRequestHeader.Authorization] = string.Format("Bearer {0}", accessToken);
                webClient.Headers[HttpRequestHeader.UserAgent]     = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36";
                string orderStr = webClient.DownloadString(url);
                res = (JsonConvert.DeserializeObject <TDOrder>(orderStr));
                webClient.Dispose();
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Error getting open orders. orderid: {0}, error: {1}", orderId, ex.ToString()));
            }

            return(res);
        }
    private void OnGUI()
    {
        int i = 0;

        GUI.Box(new Rect(10, 10, Screen.width - 20, Screen.height - 20), "Demo Menu");

        GUI.Label(new Rect(left, top + (step * i++), width, height), deviceId);
        if (GUI.Button(new Rect(left, top + (step * i++), width, height), "getDeviceId"))
        {
            deviceId = TalkingDataAdTracking.GetDeviceId();
        }

        GUI.Label(new Rect(left, top + (step * i++), width, height), oaid);
        if (GUI.Button(new Rect(left, top + (step * i++), width, height), "getOAID"))
        {
            oaid = TalkingDataAdTracking.GetOAID();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnRegister"))
        {
            TalkingDataAdTracking.OnRegister("user01", "123456");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnLogin"))
        {
            TalkingDataAdTracking.OnLogin("user01");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCreateCard"))
        {
            TalkingDataAdTracking.OnCreateCard("user01", "支付宝", "支付宝账号123456789");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnReceiveDeepLink"))
        {
            TalkingDataAdTracking.OnReceiveDeepLink("https://www.talkingdata.com");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnFavorite"))
        {
            TalkingDataAdTracking.OnFavorite("服装", "2019新款");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnShare"))
        {
            TalkingDataAdTracking.OnShare("user01", "课程");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnPunch"))
        {
            TalkingDataAdTracking.OnPunch("user01", "签到0023");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnSearch"))
        {
            TDSearch search = TDSearch.CreateSearch();
            search.SetCategory("类型");
            search.SetContent("内容");
#if TDAT_RETAIL
            search.SetItemId("商品ID");
            search.SetItemLocationId("location12314");
#endif
#if TDAT_TOUR
            search.SetDestination("目的地");
            search.SetOrigin("出发地");
            search.SetStartDate(1565176907309);
            search.SetEndDate(1565176908309);
#endif
            TalkingDataAdTracking.OnSearch(search);
        }

#if TDAT_RETAIL || TDAT_FINANCE || TDAT_TOUR || TDAT_ONLINEEDU
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnContact"))
        {
            TalkingDataAdTracking.OnContact("user01", "联系平台内容");
        }
#endif

#if TDAT_GAME || TDAT_TOUR || TDAT_ONLINEEDU || TDAT_READING || TDAT_OTHER
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnPay"))
        {
            TalkingDataAdTracking.OnPay("user01", "order02", 1077600, "CNY", "Apple Pay");
        }
#endif

#if TDAT_RETAIL || TDAT_FINANCE || TDAT_TOUR || TDAT_ONLINEEDU
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnChargeBack"))
        {
            TalkingDataAdTracking.OnChargeBack("user01", "order01", "7天无理由退货", "仅退款");
        }
#endif

#if TDAT_FINANCE || TDAT_ONLINEEDU
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnReservation"))
        {
            TalkingDataAdTracking.OnReservation("user01", "AdTracking_123456", "借贷类", 12, "商品信息");
        }
#endif

#if TDAT_RETAIL || TDAT_TOUR
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnBooking"))
        {
            TalkingDataAdTracking.OnBooking("user01", "002391", "电子", 123, "商品信息");
        }
#endif

#if TDAT_RETAIL
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnViewItem"))
        {
            TalkingDataAdTracking.OnViewItem("A1660", "手机", "iPhone 7", 538800);
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnAddItemToShoppingCart"))
        {
            TalkingDataAdTracking.OnAddItemToShoppingCart("MLH12CH", "电脑", "MacBook Pro", 1388800, 1);
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnViewShoppingCart"))
        {
            TDShoppingCart shoppingCart = TDShoppingCart.CreateShoppingCart();
            if (shoppingCart != null)
            {
                shoppingCart.AddItem("A1660", "手机", "iPhone 7", 538800, 2);
                shoppingCart.AddItem("MLH12CH", "电脑", "MacBook Pro", 1388800, 1);
                TalkingDataAdTracking.OnViewShoppingCart(shoppingCart);
            }
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnPlaceOrder"))
        {
            TDOrder order = TDOrder.CreateOrder("order01", 2466400, "CNY");
            order.AddItem("A1660", "手机", "iPhone 7", 538800, 2);
            order.AddItem("MLH12CH", "电脑", "MacBook Pro", 1388800, 1);
            TalkingDataAdTracking.OnPlaceOrder("user01", order);
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnOrderPaySucc"))
        {
            TalkingDataAdTracking.OnOrderPaySucc("user01", "order01", 2, "CNY", "AliPay");
        }
#endif

#if TDAT_FINANCE
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCredit"))
        {
            TalkingDataAdTracking.OnCredit("user01", 123456, "授信详情为......");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnTransaction"))
        {
            TDTransaction transaction = TDTransaction.CreateTransaction();
            transaction.SetTransactionId("AdTracking_123456");
            transaction.SetCategory("定期");
            transaction.SetAmount(3222);
            transaction.SetPersonA("张三");
            transaction.SetPersonB("金融平台");
            transaction.SetStartDate(1565176907309);
            transaction.SetEndDate(1565176908309);
            transaction.SetCurrencyType("CNY");
            transaction.SetContent("交易详情为......");
            TalkingDataAdTracking.OnTransaction("user01", transaction);
        }
#endif

#if TDAT_GAME
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCreateRole"))
        {
            TalkingDataAdTracking.OnCreateRole("role01");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnLevelPass"))
        {
            TalkingDataAdTracking.OnLevelPass("user01", "AdTracking_123456");
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnGuideFinished"))
        {
            TalkingDataAdTracking.OnGuideFinished("user01", "新手教程顺利通过");
        }
#endif

#if TDAT_ONLINEEDU
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnLearn"))
        {
            TalkingDataAdTracking.OnLearn("user01", "成人教育第一节", 1501234567890, 20);
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnPreviewFinished"))
        {
            TalkingDataAdTracking.OnPreviewFinished("user01", "基础课程试听结束");
        }
#endif

#if TDAT_READING
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnRead"))
        {
            TalkingDataAdTracking.OnRead("user01", "西游记第一章", 1501234567890, 20);
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnFreeFinished"))
        {
            TalkingDataAdTracking.OnFreeFinished("user01", "免费章节阅读结束");
        }
#endif

#if TDAT_GAME || TDAT_ONLINEEDU
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnAchievementUnlock"))
        {
            TalkingDataAdTracking.OnAchievementUnlock("user01", "AdTracking_123456");
        }
#endif

#if TDAT_FINANCE || TDAT_TOUR || TDAT_OTHER
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnBrowse"))
        {
            TalkingDataAdTracking.OnBrowse("user01", "详情页page1", 1501234567890, 20);
        }
#endif

#if TDAT_RETAIL || TDAT_FINANCE || TDAT_TOUR || TDAT_OTHER
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnTrialFinished"))
        {
            TalkingDataAdTracking.OnTrialFinished("user01", "试用体验结束");
        }
#endif

#if TDAT_CUSTOM
        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent1"))
        {
            TalkingDataAdTracking.OnCustEvent1();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent2"))
        {
            TalkingDataAdTracking.OnCustEvent2();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent3"))
        {
            TalkingDataAdTracking.OnCustEvent3();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent4"))
        {
            TalkingDataAdTracking.OnCustEvent4();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent5"))
        {
            TalkingDataAdTracking.OnCustEvent5();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent6"))
        {
            TalkingDataAdTracking.OnCustEvent6();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent7"))
        {
            TalkingDataAdTracking.OnCustEvent7();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent8"))
        {
            TalkingDataAdTracking.OnCustEvent8();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent9"))
        {
            TalkingDataAdTracking.OnCustEvent9();
        }

        if (GUI.Button(new Rect(left + i % 2 * (width + spacing), top + step * (i++ / 2), width, height), "OnCustEvent10"))
        {
            TalkingDataAdTracking.OnCustEvent10();
        }
#endif
    }
Example #7
0
        internal void Eval()
        {
            lock (locker)
            {
                /*
                 * 1. On waking up, check if last open orders has been filled on canclled.
                 * 2. if none of order filled or cancelled then sleep again
                 * 3. else cancel all op
                 *
                 * */

                //if(lastSendOrders.Count==0 && this.Qty == this.InitialQty)
                if (lastSendOrders.Count == 0 && GetOpenOrders().Count == 0)
                {
                    try
                    {
                        List <TradeOrder> orders = Algo.Eval(this);
                        lastSendOrders.AddRange(orders);
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message);
                        Log.Error(ex.StackTrace);
                    }
                    return;
                }


                bool changed = false;
                if (lastSendOrders.Count > 0)
                {
                    foreach (var order in lastSendOrders)
                    {
                        if (TradeManager.Instance.Broker == Broker.TD)
                        {
                            TDOrder tdOrder = TradeManager.Instance.GetTDOrderById(order.OrderID);
                            if (tdOrder != null)
                            {
                                //TODO: update tradeOrder status  -- refer handle order status msg
                                UpdateTDOrderStatus(tdOrder);

                                //TODO: check if there is new execution
                                List <TradeExecution> executions    = TradeManager.Instance.GetTDTradeExecution(tdOrder);
                                List <TradeExecution> newExecutions = FindNewExecutions(executions, order);

                                if (newExecutions.Count > 0)
                                {
                                    foreach (var exec in newExecutions)
                                    {
                                        HandleTradeExecution(exec);
                                    }
                                }
                            }
                        }

                        if (order.Status == TradeOrderStatus.Filled || order.Status == TradeOrderStatus.Cancelled)
                        {
                            changed = true;
                            Log.Info("Order status changed, start cancel open orders!");
                            break;
                        }
                    }
                }

                if (changed)
                {
                    try
                    {
                        //cancel all open orders, synchronized call, wait for cancel event back
                        var openOrders = GetOpenOrders();
                        if (openOrders.Count > 0)
                        {
                            TradeManager.Instance.CancelOrders(openOrders);
                            //wait for cancel back
                            Thread.Sleep(1000);

                            if (TradeManager.Instance.Broker == Broker.TD)
                            {
                                //update cancel order status here.
                                foreach (var order in openOrders)
                                {
                                    TDOrder tdOrder = TradeManager.Instance.GetTDOrderById(order.OrderID);
                                    if (tdOrder != null)
                                    {
                                        UpdateTDOrderStatus(tdOrder);
                                    }
                                }
                            }
                        }
                        lastSendOrders.Clear();

                        //place buy and sell order
                        List <TradeOrder> orders = Algo.Eval(this);
                        lastSendOrders.AddRange(orders);
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message);
                        Log.Error(ex.StackTrace);
                    }
                }
            }
        }