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