общий объем по бидам
Atom Ответить
05.01.2012


tmt

Фотография
Объясните пожалуйста, как получить общий объем из стакана.
1) нужно создать стакан? - как правильно его создать?
Цитата:
_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);
var stakan = MarketDepth(_lkoh);

так ошибка, пробовал по разному..
2) в консольном примере для смарт добавьте ввод ip'а, тк из-за этого я долго думал, почему он не коннектится..
Цитата:

Console.Write("Введите ip адрес торгового сервера: ");
var ipv = Console.ReadLine();

IPAddress ipadress = IPAddress.Parse(ipv);
IPEndPoint ip = new IPEndPoint(ipadress, 8090);

using (var waitHandle = new AutoResetEvent(false))
{
// создаем шлюз к Smart-у
using (var trader = new SmartTrader(login, password, ip))

Теги:


Спасибо:




10 Ответов
tmt

Фотография
Дата: 09.01.2012
Ответить


насколько я понял из примера для смарт, то стакан мы вызываем вот так
Цитата:
_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

затем мы берем лучшую пару котировок
Цитата:
var firstMid = _lkoh.BestPair.SpreadPrice / 2;


судя по всему чтобы показать общий объем бид.. надо как то вот так..
Цитата:
var firstMid = _lkoh.TotalBidsVolume;

ведь надо же еще что то передавать (public decimal TotalBidsVolume { get; }) но вот мне пишет

Ошибка 1 "StockSharp.BusinessEntities.Security" не содержит определения для "TotalBidsVolume" и не был найден метод расширения "TotalBidsVolume", принимающий тип "StockSharp.BusinessEntities.Security" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\user\Desktop\StockSharp_4.0.14\Samples\Smart\SampleSmartConsole\Program.cs 138 46 SampleSmartConsole


подскажите пожалуйста
Автор топика
Спасибо:

BigBen

Фотография
Дата: 09.01.2012
Ответить


Для работы со стаканом в S# есть класс MarketDepth. У него есть свойства TotalBidsVolume (Получить общий объем по бидам) и TotalAsksVolume (Получить общий объем по офферам) - вот здесь и нужно копать.
Спасибо:

tmt

Фотография
Дата: 09.01.2012
Ответить


ну это понятно, но как? ведь если рассуждать отсюда https://www.stocksharp.co...ntities_MarketDepth.htm , то BestPair тоже имеет класс MarketDepth (и я имею пример с этим BestPair, а как от него сделать TotalBidsVolume)
Автор топика
Спасибо:

BigBen

Фотография
Дата: 09.01.2012
Ответить


Примером, как я понимаю, является SampleSmartConsole.
var firstMid = _lkoh.BestPair.SpreadPrice / 2; - здесь BestPair является свойством класса Security, экземпляр которого _lkoh имеет код = "LKOH".
В данном примере класс MarketDepth не используется.
Спасибо:

tmt

Фотография
Дата: 09.01.2012
Ответить


а не мог бы подсказать пример где используется этот класс?
Автор топика
Спасибо:

fau

Фотография
Дата: 09.01.2012
Ответить


tmt Перейти
а не мог бы подсказать пример где используется этот класс?

поиск по форуму?
Спасибо:

BigBen

Фотография
Дата: 09.01.2012
Ответить


Для SmartCOM стакан используется в примере SampleSmart.
Спасибо:

BigBen

Фотография
Дата: 09.01.2012
Ответить


Посмотри в примере для Quik https://stocksharp.ru/do...b7-ab63-ad3031d748a5.htm
Спасибо:

tmt

Фотография
Дата: 09.01.2012
Ответить


вобщем ошибок у меня больше не вылазиет. но вот программа не работает.. вся загвоздка с тем же..
добавил
Цитата:
private static MarketDepth _depth;

и
Цитата:
// подписываемся на событие обновления стакана
trader.QuotesChanged += depths =>
{
if (_depth == null && _instrument != null)
{
_depth = depths.FirstOrDefault(d => d.Security == _instrument);

if (_depth != null)
{
Console.WriteLine("Стакан появился.");

if (_portfolio != null)
waitHandle.Set();
}
}
};

ну и программа не идет дальше, тк depth у меня равное null остается


Цитата:
namespace SampleSmartConsole
{
using System;
using System.Net;
using System.Linq;
using System.Threading;

using Ecng.Collections;
using Ecng.Common;

using StockSharp.BusinessEntities;
using StockSharp.Smart;
using StockSharp.Algo;

class Program
{
private static Security _instrument;
private static Portfolio _portfolio;
private static MarketDepth _depth;

static void Main()
{
try
{
// для теста выбираем бумагу
const string secCode = "RIH2";

//Console.Write("Введите логин: ");
//var login = Console.ReadLine();
var login = "ST12858";

//Console.Write("Введите пароль: ");
//var password = Console.ReadLine();
var password = "8YDJ7E";

//Console.Write("Введите номер счета, через который будет выставлена заявка: ");
//var account = Console.ReadLine();
var account = "ST12858-RF-01";

IPAddress ipadress = IPAddress.Parse("95.131.26.246");
IPEndPoint ip = new IPEndPoint(ipadress, 8090);

using (var waitHandle = new AutoResetEvent(false))
{
// создаем шлюз к Smart-у
using (var trader = new SmartTrader(login, password, ip))
{
// подписываемся на событие успешного подключения
// все действия необходимо производить только после подключения
trader.Connected += () =>
{
Console.WriteLine("Подключение было произведено успешно.");

// извещаем об успешном соединени
waitHandle.Set();
};

Console.WriteLine("Производим подключение...");

trader.Connect();

// дожидаемся события об успешном соединении
waitHandle.WaitOne();

// подписываемся на все портфели-счета
trader.NewPortfolios += portfolios =>
{
// необходимое условие работы в SmartCOM
portfolios.ForEach(trader.RegisterPortfolio);

if (_portfolio == null)
{
_portfolio = portfolios.FirstOrDefault(p => p.Name == account);

if (_portfolio != null)
{
Console.WriteLine("Портфель {0} появился.", account);

if (_instrument != null && _depth != null)
waitHandle.Set();
}
}
};

// подписываемся на событие появление инструментов
trader.NewSecurities += securities =>
{
if (_instrument == null)
{
// находим инструмент и присваиваем ее переменной _instrument
_instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

if (_instrument != null)
{
Console.WriteLine("Инструмент появился.");

if (_portfolio != null && _depth != null)
waitHandle.Set();
}
}
};

// подписываемся на событие обновления стакана
trader.QuotesChanged += depths =>
{
if (_depth == null && _instrument != null)
{
_depth = depths.FirstOrDefault(d => d.Security == _instrument);

if (_depth != null)
{
Console.WriteLine("Стакан появился.");

if (_portfolio != null)
waitHandle.Set();
}
}
};

// подписываемся на событие появления моих новых сделок
trader.NewMyTrades += myTrades =>
{
foreach (var myTrade in myTrades)
{
var trade = myTrade.Trade;
Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
}
};

Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));

// запускаем экспорт по инструментам и портфелям
trader.StartExport();

// дожидаемся появления портфеля и инструмента
waitHandle.WaitOne();

trader.SecuritiesChanged += securities =>
{
// если инструмент хоть раз изменился (по нему пришли актуальные данные)
if (securities.Contains(_instrument))
waitHandle.Set();
};

Console.WriteLine("Дожидаемся обновления данных по инструменту...");

// запускаем обновление по инструменту
trader.RegisterSecurity(_instrument);
waitHandle.WaitOne();

// запоминаем первоначальное значение середины спреда
var totb = _depth.TotalBidsVolume;
var tota = _depth.TotalBidsVolume;
if (_instrument.BestBid == null)
throw new Exception("Нет лучшего бида для котировки.");

Console.WriteLine("общий объем bid", totb);
Console.WriteLine("общий объем ask", tota);

while (true)
{
var mid = _instrument.BestPair.SpreadPrice / 2;

// если спред вышел за пределы нашего диапазона
if (totb > tota)
{
var order = new Order
{
Portfolio = _portfolio,
Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
Security = _instrument,
Volume = 1,
Direction = OrderDirections.Sell,
};
trader.RegisterOrder(order);
Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
break;
}
else
{
var order = new Order
{
Portfolio = _portfolio,
Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
Security = _instrument,
Volume = 1,
Direction = OrderDirections.Buy,
};
trader.RegisterOrder(order);
Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
break;
}
//Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);

// ждем 60 секунду
//Thread.Sleep(60000);
}

// останавливаем экспорт
trader.StopExport();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
Автор топика
Спасибо:

BigBen

Фотография
Дата: 09.01.2012
Ответить


Ты подписался на событие обновления стакана, но не вижу, где запустил экспорт стакана.
Можно сделать так:

...
// подписываемся на событие появление инструментов
trader.NewSecurities += securities =>
{
if (_instrument == null)
{
// находим инструмент и присваиваем ее переменной _instrument
_instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

if (_instrument != null)
{
Console.WriteLine("Инструмент появился.");

trader.RegisterQuotes(_instrument); // запускаем экспорт стакана

if (_portfolio != null && _depth != null)
waitHandle.Set();
}
}
};
...
Спасибо: tmt


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy