/// <summary> /// order_System2 version 2.0 /// spring 주문을 굳이 나눠서 하지 않고 한번에 넣어야 좋을듯함... /// 이것도 나쁘지 않음... /// 초 급등에 대한 대응이 없음... 초 급등 할때도 소폭의 이익만 챙기게됨... /// spring의 적게주고 margin을 적게줌 : 안전하게 자주 먹는 시스템임... 아무리 그래도 step가 올라가면 어쩔수 없음.. /// 급등을 먹을려고 하면 spring의 값을 넓게 주고 margin 값을 높이 줌 => 이것도 괜츦을듯 만들어보자.. /// </summary> public void order_System2(double limit_trad_price, List <bitmex_bucketed> bitemex_Bucketeds, bitemex_position bitemex_position) { //[1-1] setting #region setting int step1_Qty; double step1_spring; double _margin1; // 7025.0 ( 35,125,000) int step2_Qty; double step2_spring; double _margin2; // 7037.5 ( 70,375,000) int step3_Qty; double step3_spring; double _margin3; // 7068.75 (141,375,000) int step4_Qty; double step4_spring; double _margin4; int step5_Qty; double step5_spring; double _margin5; int step6_Qty; double step6_spring; double _margin6; int step7_Qty; double step7_spring; double _margin7; int step8_Qty; double step8_spring; double _margin8; int step9_Qty; double step9_spring; double _margin9; if (true)//limit_trad_price < 1000 { step1_Qty = 2500; step1_spring = 5.0; _margin1 = 15.0; step2_Qty = 3500; step2_spring = 8.0; _margin2 = 15.0; step3_Qty = 3500; step3_spring = 15.0; _margin3 = 23.0; step4_Qty = 3500; step4_spring = 30.0; _margin4 = 40.0; step5_Qty = 5500; step5_spring = 55.0; _margin5 = 60.0; step6_Qty = 400; step6_spring = 80.0; _margin6 = 100.0; step7_Qty = 50; step7_spring = 140.0; _margin7 = 160.0; step8_Qty = 50; step8_spring = 180.0; _margin8 = 210.0; step9_Qty = 50; step9_spring = 250.0; _margin9 = 250.0; } //else if (limit_trad_price < 2000) //{ // step1_Qty = 110; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 110; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 110; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 220; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 220; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 220; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 220; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 220; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 220; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 4000) //{ // step1_Qty = 120; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 120; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 120; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 240; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 240; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 240; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 240; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 240; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 240; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 8000) //{ // step1_Qty = 150; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 150; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 150; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 300; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 300; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 300; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 300; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 300; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 300; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 16000) //{ // step1_Qty = 220; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 220; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 220; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 440; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 440; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 440; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 440; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 440; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 440; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 32000) // 이정도 안정권에서는 운영해야할듯함... //{ // step1_Qty = 230; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 230; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 230; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 460; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 460; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 460; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 460; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 460; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 460; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 64000) //{ // step1_Qty = 600; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 600; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 600; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 1200; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 1200; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 1200; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 1200; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 1200; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 1200; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 128000) //{ // step1_Qty = 800; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 800; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 800; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 1600; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 1600; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 1600; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 1600; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 1600; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 1600; step9_spring = 250.0; _margin9 = 250.0; //} //else if (limit_trad_price < 256000) //{ // step1_Qty = 1500; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 1500; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 1500; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 3000; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 3000; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 3000; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 3000; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 3000; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 3000; step9_spring = 250.0; _margin9 = 250.0; //} //else //{ // //limit_trad_price < 512000 // step1_Qty = 3000; step1_spring = 5.0; _margin1 = 15.0; // step2_Qty = 3000; step2_spring = 8.0; _margin2 = 15.0; // step3_Qty = 3000; step3_spring = 15.0; _margin3 = 23.0; // step4_Qty = 6000; step4_spring = 30.0; _margin4 = 40.0; // step5_Qty = 6000; step5_spring = 55.0; _margin5 = 60.0; // step6_Qty = 6000; step6_spring = 80.0; _margin6 = 100.0; // step7_Qty = 6000; step7_spring = 140.0; _margin7 = 160.0; // step8_Qty = 6000; step8_spring = 180.0; _margin8 = 210.0; // step9_Qty = 6000; step9_spring = 250.0; _margin9 = 250.0; //} #endregion //[1-2] setting iniinitial_value = bitemex_Bucketeds[0].open; //[2] #region 주문 넣기 //[2-1] 기존 주문 삭제 bitemex.DeleteAllOrders("{\"clOrdID\":\"" + (no - 1) + "\"}"); //[2-2] 주문 넣기 List <bitmex_order> list_bitmex_order = new List <bitmex_order>(); bitmex_order _bitmex_order; double price = 0.0; #region step1 price = bitemex_Bucketeds[0].close <= iniinitial_value - step1_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step1_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step1_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step1_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step1_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step1_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step2 price = bitemex_Bucketeds[0].close <= iniinitial_value - step2_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step2_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step2_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step2_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step2_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step2_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step3 price = bitemex_Bucketeds[0].close <= iniinitial_value - step3_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step3_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step3_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step3_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step3_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step3_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step4 price = bitemex_Bucketeds[0].close <= iniinitial_value - step4_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step4_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step4_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step4_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step4_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step4_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step5 price = bitemex_Bucketeds[0].close <= iniinitial_value - step5_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step5_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step5_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step5_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step5_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step5_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step6 price = bitemex_Bucketeds[0].close <= iniinitial_value - step6_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step6_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step6_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step6_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step6_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step6_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step7 price = bitemex_Bucketeds[0].close <= iniinitial_value - step7_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step7_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step7_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step7_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step7_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step7_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step8 price = bitemex_Bucketeds[0].close <= iniinitial_value - step8_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step8_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step8_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step8_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step8_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step8_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion #region step9 price = bitemex_Bucketeds[0].close <= iniinitial_value - step9_spring ? bitemex_Bucketeds[0].close - 1.5 : iniinitial_value - step9_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price && bitemex_position.avgCostPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step9_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } price = bitemex_Bucketeds[0].close >= iniinitial_value + step9_spring ? bitemex_Bucketeds[0].close + 1.5 : iniinitial_value + step9_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price && bitemex_position.avgCostPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = no.ToString(); _bitmex_order.orderQty = step9_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = no.ToString(); list_bitmex_order.Add(_bitmex_order); } #endregion string _result = bitemex.PostOrders_bulk(list_bitmex_order); #endregion //[3] 청산 if (no > 1) { List <bitmex_order> recent_orders = new List <bitmex_order>(); string clOrdID = (no - 1).ToString(); var json_result = bitemex.GetOrders("XBTUSD", "", 100, true, ""); recent_orders = JsonConvert.DeserializeObject <List <bitmex_order> >(json_result); list_bitmex_order = new List <bitmex_order>(); foreach (var item in recent_orders.Where(p => p.clOrdID == (clOrdID) && p.cumQty > 0)) { _bitmex_order = new bitmex_order(); string side = ""; if (item.side == "Buy") { side = "Sell"; if (item.cumQty <= step1_Qty) { price = item.price + _margin1; } else if (item.cumQty <= step2_Qty) { price = item.price + _margin2; } else if (item.cumQty <= step3_Qty) { price = item.price + _margin3; } else if (item.cumQty <= step4_Qty) { price = item.price + _margin4; } else if (item.cumQty <= step5_Qty) { price = item.price + _margin5; } else if (item.cumQty <= step6_Qty) { price = item.price + _margin6; } else if (item.cumQty <= step7_Qty) { price = item.price + _margin7; } else if (item.cumQty <= step8_Qty) { price = item.price + _margin8; } else { price = item.price + _margin9; } } else { side = "Buy"; if (item.cumQty <= step1_Qty) { price = item.price - _margin1; } else if (item.cumQty <= step2_Qty) { price = item.price - _margin2; } else if (item.cumQty <= step3_Qty) { price = item.price - _margin3; } else if (item.cumQty <= step4_Qty) { price = item.price - _margin4; } else if (item.cumQty <= step5_Qty) { price = item.price - _margin5; } else if (item.cumQty <= step6_Qty) { price = item.price - _margin6; } else if (item.cumQty <= step7_Qty) { price = item.price - _margin7; } else if (item.cumQty <= step8_Qty) { price = item.price - _margin8; } else { price = item.price - _margin9; } } if (recent_orders.Where(p => p.side == side && p.price == price && p.ordStatus == "new" && p.text == "end").Count() != 0) { string orderID = recent_orders.Where(p => p.side == side && p.price == price && p.ordStatus == "new" && p.text == "end").FirstOrDefault().orderID; int orderQty = recent_orders.Where(p => p.side == side && p.price == price && p.ordStatus == "new" && p.text == "end").FirstOrDefault().orderQty + item.cumQty; bitemex.PostOrders_PUT(orderID, price, orderQty); } else { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = side; _bitmex_order.orderQty = item.cumQty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = "end"; list_bitmex_order.Add(_bitmex_order); } } bitemex.PostOrders_bulk(list_bitmex_order); } // [ end ] pre_timestamp = bitemex_Bucketeds[0].timestamp; no++; }
public void order_System3(bitemex_position bitemex_position, double iniinitial_value, int mody_Qty1, int mody_Qty2) { //[1-1] setting #region setting int step1_Qty; double step1_spring; double _margin1; // 7025.0 ( 35,125,000) int step2_Qty; double step2_spring; double _margin2; // 7037.5 ( 70,375,000) int step3_Qty; double step3_spring; double _margin3; // 7068.75 (141,375,000) int step4_Qty; double step4_spring; double _margin4; int step5_Qty; double step5_spring; double _margin5; int step6_Qty; double step6_spring; double _margin6; int step7_Qty; double step7_spring; double _margin7; int step8_Qty; double step8_spring; double _margin8; int step9_Qty; double step9_spring; double _margin9; int step10_Qty; double step10_spring; double _margin10; step1_Qty = 200; step1_spring = 10.0; _margin1 = 6.0; step2_Qty = 205; step2_spring = 15.0; _margin2 = 11.0; step3_Qty = 207; step3_spring = 25.0; _margin3 = 21.0; step4_Qty = 209; step4_spring = 50.0; _margin4 = 46.0; step5_Qty = 210; step5_spring = 70.0; _margin5 = 66.0; step6_Qty = 212; step6_spring = 77.0; _margin6 = 73.0; step7_Qty = 214; step7_spring = 100.0; _margin7 = 73.0; step8_Qty = 216; step8_spring = 110.0; _margin8 = 73.0; step9_Qty = 217; step9_spring = 120.0; _margin9 = 73.0; step10_Qty = 220; step10_spring = 130.0; _margin10 = 73.0; //step1_Qty = 5000; step1_spring = 50.0; _margin1 = 50.0; //step2_Qty = 5000; step2_spring = 100.0; _margin2 = 80.0; //step3_Qty = 5000; step3_spring = 180.0; _margin3 = 130.0; //step4_Qty = 5000; step4_spring = 220.0; _margin4 = 180.0; //step5_Qty = 5000; step5_spring = 300.0; _margin5 = 250.0; //step6_Qty = 5000; step6_spring = 380.0; _margin6 = 300.0; //step7_Qty = 5000; step7_spring = 460.0; _margin7 = 460.0; //step8_Qty = 5000; step8_spring = 530.0; _margin8 = 530.0; //step9_Qty = 5000; step9_spring = 600.0; _margin9 = 600.0; //step10_Qty = 5000; step10_spring = 800.0; _margin10 = 800.0; #endregion //[1-2] setting //[2] if (bitemex_position.currentQty + mody_Qty1 == mody_Qty2) //mody_Qty2은 프로그램 최초 실행시 한번 설정되어 바뀌지 않음... { //[2-1] 주문 삭제. bitemex.DeleteAllOrders("{\"clOrdID\":\"Buy_" + (no - 1) + "\"}"); bitemex.DeleteAllOrders("{\"clOrdID\":\"Sell_" + (no - 1) + "\"}"); double price = 0; //[2-2] 주문 넣기 List <bitmex_order> list_bitmex_order = new List <bitmex_order>(); bitmex_order _bitmex_order; #region step1 price = iniinitial_value - step1_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step1_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step1_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step1_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step2 price = iniinitial_value - step2_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step2_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step2_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step2_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step3 price = iniinitial_value - step3_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step3_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step3_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step3_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step4 price = iniinitial_value - step4_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step4_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step4_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step4_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step5 price = iniinitial_value - step5_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step5_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step5_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step5_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step6 price = iniinitial_value - step6_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step6_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step6_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step6_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step7 price = iniinitial_value - step7_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step7_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step7_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step7_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step8 price = iniinitial_value - step8_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step8_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step8_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step8_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step9 price = iniinitial_value - step9_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step9_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step9_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step9_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion #region step10 price = iniinitial_value - step10_spring; if (bitemex_position.currentQty <= 0 || (bitemex_position.currentQty > 0 && bitemex_position.marginCallPrice < price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Buy"; _bitmex_order.clOrdID = "Buy_" + no.ToString(); _bitmex_order.orderQty = step10_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } price = iniinitial_value + step10_spring; if (bitemex_position.currentQty >= 0 || (bitemex_position.currentQty < 0 && bitemex_position.marginCallPrice > price)) { _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = "Sell"; _bitmex_order.clOrdID = "Sell_" + no.ToString(); _bitmex_order.orderQty = step10_Qty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; list_bitmex_order.Add(_bitmex_order); } #endregion string _result = bitemex.PostOrders_bulk(list_bitmex_order); no++; } else { string search_recent_clOrdID = ""; //string search_recent_side = ""; //이거는 활용 안했음=> 초급등후 초급락하면 position이 buy여도 sell도 같이 체결이 된 상태 일수도 있어서... int _chk = (bitemex_position.currentQty + mody_Qty1) - mody_Qty2; if (_chk > 0) { bitemex.DeleteAllOrders("{\"clOrdID\":\"Sell_" + (no - 1) + "\"}"); search_recent_clOrdID = "Buy_" + (no - 1); } else { //chk_currentQty < 0 bitemex.DeleteAllOrders("{\"clOrdID\":\"Buy_" + (no - 1) + "\"}"); search_recent_clOrdID = "Sell_" + (no - 1); } var json_result = bitemex.GetOrders("XBTUSD", "", 60, true, ""); List <bitmex_order> recent_orders = JsonConvert.DeserializeObject <List <bitmex_order> >(json_result); List <bitmex_order> list_bitmex_order = new List <bitmex_order>(); foreach (var item in recent_orders) { if (item.cumQty > 0 && item.clOrdID == search_recent_clOrdID) { double price = 0; if (item.cumQty == step1_Qty) { price = item.side == "Buy" ? item.price + _margin1 : item.price - _margin1; } else if (item.cumQty == step2_Qty) { price = item.side == "Buy" ? item.price + _margin2 : item.price - _margin2; } else if (item.cumQty == step3_Qty) { price = item.side == "Buy" ? item.price + _margin3 : item.price - _margin3; } else if (item.cumQty == step4_Qty) { price = item.side == "Buy" ? item.price + _margin4 : item.price - _margin4; } else if (item.cumQty == step5_Qty) { price = item.side == "Buy" ? item.price + _margin5 : item.price - _margin5; } else if (item.cumQty == step6_Qty) { price = item.side == "Buy" ? item.price + _margin6 : item.price - _margin6; } else if (item.cumQty == step7_Qty) { price = item.side == "Buy" ? item.price + _margin7 : item.price - _margin7; } else if (item.cumQty == step8_Qty) { price = item.side == "Buy" ? item.price + _margin8 : item.price - _margin8; } else if (item.cumQty == step9_Qty) { price = item.side == "Buy" ? item.price + _margin9 : item.price - _margin9; } else if (item.cumQty == step10_Qty) { price = item.side == "Buy" ? item.price + _margin10 : item.price - _margin10; } else { price = item.side == "Buy" ? item.price + _margin3 : item.price - _margin3; } string newOrder_Side = item.side == "Buy" ? "Sell" : "Buy"; if (recent_orders.Where(p => p.ordStatus == "New" && p.side == newOrder_Side && p.orderQty == item.cumQty && p.price == price).Count() == 0) { bitmex_order _bitmex_order = new bitmex_order(); _bitmex_order.symbol = "XBTUSD"; _bitmex_order.side = newOrder_Side; //_bitmex_order.clOrdID = item.clOrdID + "end"; _bitmex_order.orderQty = item.cumQty; _bitmex_order.price = price; _bitmex_order.ordType = "Limit"; _bitmex_order.text = "end"; list_bitmex_order.Add(_bitmex_order); } } } if (list_bitmex_order.Count() > 0) { string _result = bitemex.PostOrders_bulk(list_bitmex_order); } } }