Добрый день ребята. Кто нибудь может помочь прописать событие. Чтобы на мою заявку как только она исполнена выставлялась профит и стоп заявка.
private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
{
// для каждой сделки добавляем защитную пару стратегии
var protectiveStrategies = trades.Select(t =>
{
// выставляет тейк-профит в 40 пунктов
var takeProfit = new TakeProfitStrategy(t, 40);
// выставляет стоп-лосс в 20 пунктов
var stopLoss = new StopLossStrategy(t, 20);
return new TakeProfitStopLossStrategy(trade, takeProfit, stopLoss);
});
ChildStrategies.AddRange(protectiveStrategies);
}
Код я взял с примера а куда событие прописать и как не могу додумать.
// создаем шлюз к Quik-у var trader = new QuikTrader(@"Ваш путь к Квик директории"); // подписываемся на событие успешного подключения // все действия необходимо производить только после подключения trader.Connected += () => { Console.WriteLine("Подключение было произведено успешно.");
// извещаем об успешном соединении
waitHandle.Set();
};
Console.WriteLine("Производим подключение...");
trader.Connect();
// дожидаемся события об успешном соединении waitHandle.WaitOne(); trader.NewPortfolios += portfolios => { if (_portfolio == null) { // находим нужный портфель и присваиваем его переменной _portfolio _portfolio = portfolios.FirstOrDefault(p => p.Name == account);
if (_portfolio != null)
{
Console.WriteLine("Портфель {0} появился.", account);
// если инструмент и стакан уже появились,
// то извещаем об этом основной поток для выставления заявки
if (_lkoh != null && _depth != null)
waitHandle.Set();
}
}
}; // подписываемся на событие появление инструментов trader.NewSecurities += securities => { if (_riz2 == null) { // находим Лукойл и присваиваем ее переменной ртс _riz2 = securities.FirstOrDefault(sec => sec.Code == secCode);
if (_riz != null)
{
Console.WriteLine("Инструмент ртс появился.");
// запускаем экспорт стакана
trader.RegisterQuotes(_riz2);
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);
}
};
// подписываемся на событие обновления стакана trader.MarketDepthsChanged += depths => { if (_depth == null && _riz2 != null) { _depth = depths.FirstOrDefault(d => d.Security == _riz2);
if (_depth != null)
{
Console.WriteLine("Стакан ртс появился.");
// если портфель уже появился, то извещаем об этом основной поток для выставления заявки
if (_portfolio != null)
waitHandle.Set();
}
}
}; Console.WriteLine("Дожидаемся появления в программе инструмента ртс и портфеля {0}...".Put(account));
// запускаем экспорт по DDE trader.StartExport(new[]{ trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable, trader.EquityPortfoliosTable, trader.OrdersTable });
Comentarios (9)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Пожалуйста, в сообщении оформляйте код с подсветкой C#...
В примере SampleConsoleесть такой кусок кода:
Если посмотреть в документаци Тейк-профит и Стоп-лосс
То видно, что для вновь созданной заявки используется правило WhenNewTrades при срабатывании которого выполняется метод OnNewOrderTrades
Делаем по аналогии, только вместо именованного метода будет использоватся лямбда выражение.
Теперь "наполним" его логикой.🙂
В примере, который в документации, protectiveStrategiesдобавляется в качестве дочерней. Поэтому каждую отдельную стратегию не надо инициализировать(передавать шлюз, портфель, инструмент, и т.д.) - все берется из родительской. И запускать через метод Start().
В нашем случае, родительской нет(protectiveStrategiesсама ей является). Поэтому инициализируем и запускаем.
Как то так. Вроде должно работать.😀
На это выражение
<mark>> .Do(trades =>
Ругаеться
Ошибка 1 Делегат "System.Action" не принимает "1" аргументов C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs 174 41 SampleConsole
Ошибка 2 "StockSharp.Algo.MarketRule<StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>" не содержит определения для "Select" и не был найден метод расширения "Select", принимающий тип "StockSharp.Algo.MarketRule<StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs 177 72 SampleConsole
И на это выражение
Ошибка 3 "System.Linq.IQueryable<TResult>" не содержит определения для "ForEach" и не был найден метод расширения "ForEach", принимающий тип "System.Linq.IQueryable<TResult>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs 189 66 SampleConsole
Вот весь код программы
На это выражение
<mark>> .Do(trades =>
Ругаеться
Ошибка 1 Делегат "System.Action" не принимает "1" аргументов C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs 174 41 SampleConsole
Ошибка 2 "StockSharp.Algo.MarketRule<StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>" не содержит определения для "Select" и не был найден метод расширения "Select", принимающий тип "StockSharp.Algo.MarketRule<StockSharp.BusinessEntities.Order,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs 177 72 SampleConsole
И на это выражение
Ошибка 3 "System.Linq.IQueryable<TResult>" не содержит определения для "ForEach" и не был найден метод расширения "ForEach", принимающий тип "System.Linq.IQueryable<TResult>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\admin\Desktop\Новая папка\Samples\Quik\SampleConsole\Program.cs 189 66 SampleConsole
Проверил, все компилится и запускается.
Ошибка 1: Не понятно почему ругается. Ошибка 2: Не находит метод расширение Select, но вроде как у вас System.Linq подключен.
Ошибка 3: Не находит метод расширение ForEach, надо добавить пространство имен
Предварительно подключив к проекту ecng.collections.dll, если не подключена.
Обращайтесь в нашу техническую поддержку, там вам компетентно помогут.
Так я обучение не проходил у вас. Мне не помогут наверно.
Я про это. Помогут всем.
Вот код
Вроде прописал чтобы на мою сделку открывались зашитные заявки а они не появляються. Пробую в Квик-юниор. Что делать не знаю.
Ответ давал выше. Обратиться в техническую поддержку.