Exemplo n.º 1
0
        /// <summary>
        /// Usunięcie z subskrypcji wskazanych instrumentów (po ich symbolach).
        /// </summary>
        /// <param name="symbols"></param>
        public void MarketDataSubscriptionRemove(params string[] symbols)
        {
            IEnumerable <FixmlInstrument> instruments = symbols.Select(sym => FixmlInstrument.FindBySym(sym));

            MarketDataSubscriptionChange(mdEntryTypes, mdInstruments.Except(instruments));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Przykład wysyłki zleceń, korzystając bezpośrednio z klas NewOrderSingleMsg i spółki...
        /// Test ten wrzuca na giełdę zlecenie kupna 1 x FW20 po 1000zł (*raczej* nie ma szans się zrealizować :)),
        /// następnie je modyfikuje ustawiając limit ceny oczko wyżej... aż ostatecznie całe zlecenie anuluje.
        /// </summary>
        public void Execute()
        {
            var accountNumber = "00-22-...";              // <- wpisz tu swój numer, żeby program nie musiał o niego pytać

            if (accountNumber.EndsWith("..."))
            {
                Console.Write("Podaj numer rachunku (końcówkę z " + accountNumber + "): ");
                var str = Console.ReadLine();
                accountNumber = accountNumber.Replace("...", str);
                Trace.WriteLine("Wybrany rachunek: " + accountNumber);
            }

            // nawiązanie połączenia z NOL3 i zalogowanie użytkownika
            using (var nol = new NolClient())
            {
                Thread.Sleep(2000);
                var tmp = FixmlMsg.DebugFormattedXml.Enabled;
                try
                {
                    ExecutionReportMsg execReport;

                    // --- wysyłka nowego zlecenia ---
                    Console.WriteLine("\nPress any key... to send NEW order request    [Esc - exit]\n");
                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }

                    var newRequest = new NewOrderSingleMsg();
                    newRequest.Account    = accountNumber;
                    newRequest.Side       = OrderSide.Buy;
                    newRequest.Instrument = FixmlInstrument.FindBySym("FW20H12");
                    newRequest.Quantity   = 1;
                    newRequest.Price      = 1000;
                    using (var socket = NolClient.GetSyncSocket())
                    {
                        FixmlMsg.DebugFormattedXml.Enabled = true;                          // <- wyświetli nam dokładną treść komunikatów
                        newRequest.Send(socket);
                        execReport = new ExecutionReportMsg(socket);
                        FixmlMsg.DebugFormattedXml.Enabled = tmp;
                    }
                    Thread.Sleep(3000);

                    // --- modyfikacja tego zlecenia ---
                    Console.WriteLine("\nPress any key... to MODIFY this order request    [Esc - exit]\n");
                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }

                    var replaceRequest = new OrderReplaceRequestMsg();
                    replaceRequest.BrokerOrderId2 = execReport.BrokerOrderId2;
                    replaceRequest.Account        = accountNumber;
                    replaceRequest.Side           = OrderSide.Buy;
                    replaceRequest.Instrument     = newRequest.Instrument;
                    replaceRequest.Quantity       = 1;
                    replaceRequest.Price          = 1001;
                    using (var socket = NolClient.GetSyncSocket())
                    {
                        FixmlMsg.DebugFormattedXml.Enabled = true;
                        replaceRequest.Send(socket);
                        execReport = new ExecutionReportMsg(socket);
                        FixmlMsg.DebugFormattedXml.Enabled = tmp;
                    }
                    Thread.Sleep(3000);

                    // --- anulowanie tego zlecenia ---
                    Console.WriteLine("\nPress any key... to CANCEL this order request    [Esc - exit]\n");
                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }

                    var cancelRequest = new OrderCancelRequestMsg();
                    cancelRequest.BrokerOrderId2 = replaceRequest.BrokerOrderId2;
                    cancelRequest.Account        = accountNumber;
                    cancelRequest.Side           = newRequest.Side;
                    cancelRequest.Instrument     = newRequest.Instrument;
                    cancelRequest.Quantity       = newRequest.Quantity;
                    using (var socket = NolClient.GetSyncSocket())
                    {
                        FixmlMsg.DebugFormattedXml.Enabled = true;
                        cancelRequest.Send(socket);
                        execReport = new ExecutionReportMsg(socket);
                        FixmlMsg.DebugFormattedXml.Enabled = false;
                    }
                    Thread.Sleep(3000);

                    Console.WriteLine("\nPress any key... to exit\n");
                    Console.ReadKey(true);
                    Console.WriteLine("\n\nThank you :)\n");
                }
                catch (Exception e)
                {
                    MyUtil.PrintError(e);
                }
                FixmlMsg.DebugFormattedXml.Enabled = tmp;
            }              // tu następuje wylogowanie
        }
Exemplo n.º 3
0
 /// <summary>
 /// Odczyt zebranych informacji o bieżących notowaniach wskazanego instrumentu (po symbolu).
 /// </summary>
 /// <param name="symbol"></param>
 /// <returns></returns>
 public MDResults MarketDataResults(string symbol)
 {
     return(MarketDataResults(FixmlInstrument.FindBySym(symbol)));
 }
        /// <summary>
        /// Wykorzystanie klasy NolClient do subskrypcji bieżących notowań wybranych papierów wartościowych.
        /// </summary>
        public void Execute()
        {
            // nawiązanie połączenia z NOL3 i zalogowanie użytkownika
            using (var nol = new NolClient())
            {
                try
                {
                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }

                    Trace.WriteLine("\n--- market data subscription start ---");

                    // definiujemy filtr subskrybowanych danych
                    nol.MarketDataSubscriptionAdd(MDEntryTypes.BasicBook);
                    nol.MarketDataSubscriptionAdd(MDEntryTypes.BasicTrade);
                    FixmlInstrument fw20 = FixmlInstrument.FindBySym("FW20H13");
                    nol.MarketDataSubscriptionAdd(fw20);

                    // tutaj rozpoczynamy odbieranie notowań
                    nol.MarketDataStart();

                    // subskrypcja informacji o statusie sesji
                    nol.TradingSessionStatusStart();

                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }


                    Trace.WriteLine("\n--- market data subscription change ---");

                    // modyfikujemy filtr, wyłączając na ten czas notowania
                    // (inaczej resetowałby je po każdej kolejnej zmianie, w tym przykładzie 2-krotnie)
                    nol.MarketDataStop();
                    nol.MarketDataSubscriptionClear();
                    nol.MarketDataSubscriptionAdd(MDEntryTypes.All);
                    nol.MarketDataSubscriptionAdd("WIG20", "FW20M12", "FW20H13");
                    nol.MarketDataStart();

                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }


                    Trace.WriteLine("\n--- market data subscription stop ---");

                    // zerujemy filtr (wyłączamy sybskrypcję notowań)
                    nol.MarketDataSubscriptionClear();

                    // wydruk wszystkich zgromadzonych notowań
                    foreach (var x in nol.MarketDataResults())
                    {
                        Debug.WriteLine(string.Format("{0,-9}  {1}\n", x.Key, x.Value));
                    }

                    // wydruk wybranych danych konkretnego instrumentu
                    var fw20data = nol.MarketDataResults(fw20);
                    Debug.WriteLine(string.Format("{0} = {1,7}   LOP = {2}", fw20, fw20data.CurrentPrice, fw20data.Lop));

                    if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                    {
                        return;
                    }

                    // wyłączamy informacje o statusie sesji
                    nol.TradingSessionStatusStop();

                    // wciąż aktywny kanał asynchroniczny...
                    Console.ReadKey(true);

                    Trace.WriteLine("\n--- done ---");
                }
                catch (Exception e)
                {
                    MyUtil.PrintError(e);
                }
            }              // tu następuje wylogowanie
        }