Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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;
            }
        }
Beispiel #5
0
        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());
        }