private static void CloseUnpairedOandaOrders(OAOrders oaOrders, List <PairedOrder> pairedOrders /*, int sierraPosition*/) { List <Task> tasks = new List <Task>(); foreach (OAOrder oaOrder in oaOrders) { if ((pairedOrders.Find(x => x.oandaOrder.Id == oaOrder.Id) == null)) { Task task = Task.Run(() => SvpOandaV20.Instance.CloseOrder(InstrumentConversion.SierraChartAccountId, oaOrder.Id)); tasks.Add(task); } } Task.WaitAll(tasks.ToArray()); }
public OAOrders GetMarketOrders(string accountId, string instrument) { Task <List <Trade> > callTask = Task.Run(() => Rest20.GetOpenTradeListAsync(accountId)); callTask.Wait(); OAOrders oaOrders = new OAOrders(); foreach (Trade trade in callTask.Result.FindAll(x => x.instrument == instrument)) { OAOrder oaOrder = new OAOrder(); oaOrder.Id = trade.id; oaOrder.Units = trade.currentUnits; oaOrder.Instrument = trade.instrument; oaOrder.Price = trade.price; oaOrders.Add(oaOrder); } return(oaOrders); }
private static List <PairedOrder> DoPairOrders(InstrumentConversion instrumentConversion, OAOrders OAOrders, List <SierraOrder> sierraOrders) { List <PairedOrder> pairedOrders = new List <PairedOrder>(); SierraOrderFacade sierraChartOrderFacade = new SierraOrderFacade(); List <SierraOrderEntity> sierraChartOrderEntities = sierraChartOrderFacade.LoadMultipleByColumn( SierraOrderFacade.GetPropertyName <SierraOrderEntity>(x => x.SierraInstrumentName), instrumentConversion.SierraInstrumentName); foreach (SierraOrderEntity sierraChartOrderEntity in sierraChartOrderEntities) { PairedOrder pairedOrder = new PairedOrder(); pairedOrder.sierraOrder = sierraOrders.Find(x => x.InternalOrderID == sierraChartOrderEntity.SierraOrderId); pairedOrder.oandaOrder = OAOrders.Find(x => x.Id == sierraChartOrderEntity.OandaOrderId); if (pairedOrder.sierraOrder != null) { pairedOrder.sierraOrderSL = sierraOrders.Find(x => x.ParentInternalOrderID == pairedOrder.sierraOrder.InternalOrderID && x.OrderTypeAsInt == SCT_ORDERTYPE_STOP); pairedOrder.sierraOrderPT = sierraOrders.Find(x => x.ParentInternalOrderID == pairedOrder.sierraOrder.InternalOrderID && x.OrderTypeAsInt == SCT_ORDERTYPE_LIMIT); } if (pairedOrder.oandaOrder != null && pairedOrder.sierraOrder != null && pairedOrder.sierraOrderSL != null) { pairedOrders.Add(pairedOrder); } } return(pairedOrders); }
/// <summary> /// Lze zrusit PT a nasledne lze uzavrit pozici uzavrenim SL. /// Vhodne napriklad pri rychlem pohybu. /// </summary> public static void MakePosition(string sierraInstrumentName, int sierraPosition, List <SierraOrder> sierraOrders) { try { if (runned) { return; } if (counter++ < 2) { return; } counter = 0; runned = true; if (string.IsNullOrWhiteSpace(sierraInstrumentName)) { Log.WriteMessage("sierraInstrumentNamed = " + sierraInstrumentName); return; } if (SierraChartWrongPosition(sierraPosition, sierraOrders)) { Log.WriteMessage("SierraChartWrongPosition"); return; } if (sierraInstrumentName.IndexOf("[Sim]", StringComparison.InvariantCultureIgnoreCase) == 0) { sierraInstrumentName = sierraInstrumentName.Substring("[Sim]".Length); } sierraInstrumentName = sierraInstrumentName.Substring(0, 2); InstrumentConversion instrumentConversion = InstrumentConversion.InstrumentConversions.Find(x => x.SierraInstrumentName == sierraInstrumentName); if (instrumentConversion == null) { Log.WriteMessage("sierraInstrumentName" + sierraInstrumentName); return; } OAOrders oaOrders = SvpOandaV20.Instance.GetMarketOrders(InstrumentConversion.SierraChartAccountId, instrumentConversion.OandaInstrumentName); List <PairedOrder> pairedOrders = DoPairOrders(instrumentConversion, oaOrders, sierraOrders); CloseUnpairedOandaOrders(oaOrders, pairedOrders); MarketUnpairedSierraOrders(instrumentConversion, sierraOrders, pairedOrders, oaOrders); pairedOrders = DoPairOrders(instrumentConversion, oaOrders, sierraOrders); ModifyPairedSierraOrders(instrumentConversion, pairedOrders); if (sierraPosition == 0 && (int)oaOrders.Sum(x => x.Units) == 0) { SierraOrderFacade.DeleteAllS(instrumentConversion.SierraInstrumentName); } } catch (AggregateException aggregateException) { foreach (Exception ex in aggregateException.InnerExceptions) { Log.WriteException(ex); } throw aggregateException; } catch (Exception ex) { Log.WriteException(ex); throw ex; } finally { runned = false; } }
private static void MarketUnpairedSierraOrders(InstrumentConversion instrumentConversion, List <SierraOrder> sierraOrders, List <PairedOrder> pairedOrders, OAOrders oaOrders) { SierraOrderFacade sierraChartOrderFacade = new SierraOrderFacade(); List <Task> tasks = new List <Task>(); foreach (SierraOrder sierraOrder in sierraOrders) { SierraOrderEntity sierraOrderEntity = sierraChartOrderFacade.LoadByColumn(SierraOrderFacade.GetPropertyName <SierraOrderEntity>(x => x.SierraOrderId), sierraOrder.InternalOrderID); if (sierraOrderEntity == null && // objednavka nebyla nikdy pouzita sierraOrder.IsOrder && // Neni to SL ani PT pairedOrders.Find(x => x.sierraOrder.InternalOrderID == sierraOrder.InternalOrderID) == null) // neni to sparovana objednavka { OAOrder oaOrder = new OAOrder(); oaOrders.Add(oaOrder); Task task = Task.Run(() => { MarketUnpairedSierraOrder(instrumentConversion, sierraOrder, oaOrder); }); tasks.Add(task); } } Task.WaitAll(tasks.ToArray()); }