← Zurück

Как получить стакан в числах или строках ???

Добрый день,

Решал попробовать Ваш продукт АПИ подскажите плиз как мне получить стакан в виде строк?

Я так понял что код ниже это получает стакан

TraderOnMarketDepthsChanged(new[] { trader.GetMarketDepth(SecurityPicker.SelectedSecurity) }); trader.MarketDepthsChanged += TraderOnMarketDepthsChanged;

private void TraderOnMarketDepthsChanged(IEnumerable<MarketDepth> depths) { foreach (var depth in depths) { var wnd = _quotesWindows.TryGetValue(depth.Security);

			if (wnd != null)
				wnd.DepthCtrl.UpdateDepth(depth);
		}
}

но как мне, например, записать его в файл ???

War dieses Thema hilfreich?

Thema teilen

Kommentare (12)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

cheh
cheh Autor

спасибо за ссылочку, но как записывать я конечно понимаю....

вот то что я не могу понять это как из

trader.MarketDepthsChanged достать значения price и volume в виде строк или чисел, чтобы после записать их в файл ...

или я где то туплю :) ....


я достал эти данные с помощью следующего кода

            var x = trader.GetMarketDepth(sec);

            IEnumerable<Quote> bids = x.Bids.ToArray();

            IEnumerator<Quote> ee = bids.GetEnumerator();

            decimal price;
            decimal volume;

            if (ee.MoveNext())
            {
                price = ee.Current.Price;
                volume = ee.Current.Volume;
                string price_string = price.ToString();
                string volume_string = volume.ToString();

                System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", "start \r\n "+price_string + " " + volume_string +  "\r\n");

                while (ee.MoveNext())
                {
                    price = ee.Current.Price;
                    volume = ee.Current.Volume;
                    price_string = price.ToString();
                    volume_string = volume.ToString();

                    System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", price_string + " " + volume_string + "\r\n");

                }
                System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", "end\r\n");
            } 

НО к сожалению, тут я получаю только первый стакан ... а как я понимаю остальные обновления пишутся уже в trader.MarketDepthsChanged

Если я ошибаюсь поправьте меня ..

RomSunZ
RomSunZ

Через цикл freach пробегаете каждый квот и считываете цену и ко-во

cheh
cheh
cheh Autor

спасибо, но вот именно как считать цену и количество я и не могу понять )) могли бы вы пример кода написать ...

cheh
cheh Autor

и все равно, написал вот так и он не обновляется ((( MarketDepth x = trader.GetMarketDepth(sec); foreach (Quote depth in x) {

                price = depth.Price;
                volume = depth.Volume;
                slides = depth.OrderDirection;
                price_string = price.ToString();
                volume_string = volume.ToString();

                System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", price_string + " " + volume_string + slides + "\r\n");

               

            }
Mikhail Sukhov
Mikhail Sukhov

cheh: и все равно, написал вот так и он не обновляется (((

А вам с какой целью (если, цель, не заставить себя вспотеть кодом😀)? Если просто нужны стаканы к текстовом виде, то Гидра умеет их выгружать в csv.

cheh
cheh Autor

я хотел в онлайн режиме анализировать стакан и от этого ордера ставить .... т.е. мне в double или decilmal сойдет, пишу в файл просто для того чтобы посмотреть что результаты .... ))) а что это так сложно сделать ?

Mikhail Sukhov
Mikhail Sukhov

cheh: я хотел в онлайн режиме анализировать стакан и от этого ордера ставить .... т.е. мне в double или decilmal сойдет, пишу в файл просто для того чтобы посмотреть что результаты .... ))) а что это так сложно сделать ?

Без знания C# - нереально. А у вас как раз это.

Вы, конечно, через неделю-другую научитесь писать в файл (без понимания самого процесса, просто как калька). Но дальше то все равно упретесь в потолок.

Дело, конечно, ваше. Но, имхо, усилия направлены в утиль.

cheh
cheh Autor

время у меня есть ))) можете кальку дать ?

Иван З.
Иван З.

все есть тут. https://github.com/StockSharp/StockSharp/blob/master/Samples/Quik/Sample/SecuritiesWindow.xaml.cs тут смотрим стаканы


		private void TraderOnMarketDepthsChanged(IEnumerable<MarketDepth> depths)
		{
			foreach (var depth in depths)
			{
				var wnd = _quotesWindows.TryGetValue(depth.Security);

				if (wnd != null)
					wnd.DepthCtrl.UpdateDepth(depth);
			}
		}

cheh
cheh Autor

2 Иван )) да, я этот пример и пытаюсь модифицировать )))

cheh
cheh Autor

в общем-то победа ))) спасибо за подсказку ... я нашел как это делать, хотя не понял почему у меня до этого не работало )) если интересно то код ниже

TraderOnMarketDepthsChanged(new[] ); trader.MarketDepthsChanged += TraderOnMarketDepthsChanged;

----------- а это TraderOnMarketDepthsChanged ----------------

private void TraderOnMarketDepthsChanged(IEnumerable<MarketDepth> depths) { IEnumerable<Quote> bids; decimal price; decimal volume;

foreach (var depth in depths) { var wnd = _quotesWindows.TryGetValue(depth.Security);

if (wnd != null) wnd.DepthCtrl.UpdateDepth(depth);

bids = depth.Bids.ToArray();

IEnumerator<Quote> ee = bids.GetEnumerator();

if (ee.MoveNext()) { price = ee.Current.Price; volume = ee.Current.Volume; string price_string = price.ToString(); string volume_string = volume.ToString();

System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", "start \r\n " + price_string + " " + volume_string + "\r\n");

while (ee.MoveNext()) { price = ee.Current.Price; volume = ee.Current.Volume; price_string = price.ToString(); volume_string = volume.ToString();

System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", price_string + " " + volume_string + "\r\n");

} System.IO.File.AppendAllText(@"C:\BCS_Work\QUIK\lua\data_usd_fut_br\WriteLines.txt", "end\r\n"); }

}

}