StockSharp_4.2.3.7_Sources
- Создаю Ордер и подписываюсь на его событие WhenNewTrades
var order = this.BuyAtLimit(pLevel + this.Security.PriceStep); //открываем лонг
order
.WhenNewTrades()
.Do(ProcessOrder)
.Apply(this);
this.RegisterOrder(order);
далее создаю связанную стоп заявку,
private void ProcessOrder(IEnumerable<MyTrade> trades)
{
var t = trades.FirstOrDefault();
var BuyDir = t.Order.Direction == Sides.Buy;
var orStopOrder = new Order
{
Type = OrderTypes.Conditional,
Volume = t.Trade.Volume,
Price = BuyDir ? (t.Order.Price - 350) : (t.Order.Price + 350), //цена исполнения стопа
Portfolio = Portfolio,
Security = Security,
Direction = BuyDir ? Sides.Sell : Sides.Buy,
Comment = "Placed by TradingTrainer",
ExpiryDate = DateTime.MaxValue,
Condition = new QuikOrderCondition()
{
Type = QuikOrderConditionTypes.LinkedOrder,
LinkedOrderPrice = BuyDir ? (t.Order.Price + 300) : (t.Order.Price - 300), //лимит
LinkedOrderCancel = false,
StopPrice = BuyDir ? (t.Order.Price - 150) : (t.Order.Price + 150), //стоп цена
ActiveTime = null,
},
};
this.RegisterOrder(orStopOrder);
}
Значит, стопы ставятся прекрасно, но при срабатывании стопа Position стратегии не изменяется. Получается что фактически позиции нет, а Position == осталось тем же.
コメント (7)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Position обновляется очень медленно в некоторых случаях, там есть глюк с ощутимой задержкой после срабатывания ордера. Мне с этим было лень разбираться, так как намного проще и надежнее реализовать подсчет позиции внутри стратегии самому.
Я думаю проблема в другом, на финише свечи я пишу значение Position в текстовый файл и смотрю его, типа отладка такая, таймфрейм не меньше минуты, да даже 10 минут я пробовал, все равно по срабатыванию стопа Position не меняется. Т.е через 10 минут после активации стопа все так же остается.
Я в стоп заявку даже такое пытался вкорячить.
orStopOrder .WhenNewTrades() .Do(ProcessPosition) .Apply(this);
и потом ручками отнять
private void ProcessPosition(IEnumerable<MyTrade> trades) { var t = trades.FirstOrDefault(); Position = Position - t.Trade.Volume; }
но отладчик не заходит в ProcessPosition
только что пробовал так,
orStopOrder .WhenMatched() .Do(() => { Position = Position - orStopOrder.Volume; }) .Apply(this);
Position зараза не меняется.
Было недавно про стоп заявки и был фикс. Смотрите в релиз нотес.
Скачал новую сборку поменял все dll в references которые начинаются с StockSharp и Ecng, сделал ребилд проекта , все осталось по прежнему ((
Ребят помогите пож-та, я уже все попробовал, не получается никак. Хоть куда нибудь ткните, чтоб я пошел читать или смотреть.
Сделал так, решил считать вручную позицию, подписался на событие новый трейдов.
итог следующий , WhenNewMyTrades не вызывается при срабатывании стоп заявки, файл не переписывается. Даже если тут есть логические ошибки, в файл должно что то записаться, но время файла остается временем основного ордера, при котором выставляется стоп заявка.
Попробуй что-нибудь из этого:
спасибо, тоже подумал о этом.