Сработавшая стоп заявка не изменяет, Position стратегии.
Atom Ответить
27.06.2014


StockSharp_4.2.3.7_Sources


1. Создаю Ордер и подписываюсь на его событие 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 Ответов
devruss

Фотография
Курсы
Дата: 27.06.2014
Ответить


Position обновляется очень медленно в некоторых случаях, там есть глюк с ощутимой задержкой после срабатывания ордера. Мне с этим было лень разбираться, так как намного проще и надежнее реализовать подсчет позиции внутри стратегии самому.
Спасибо: chulman

chulman

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


devruss Перейти
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 зараза не меняется.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.06.2014
Ответить


Было недавно про стоп заявки и был фикс. Смотрите в релиз нотес.
Спасибо: chulman

chulman

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


Михаил Сухов Перейти
Было недавно про стоп заявки и был фикс. Смотрите в релиз нотес.


Скачал новую сборку поменял все dll в references которые начинаются с StockSharp и Ecng, сделал ребилд проекта
, все осталось по прежнему ((

Ребят помогите пож-та, я уже все попробовал, не получается никак. Хоть куда нибудь ткните, чтоб я пошел читать или смотреть.
Автор топика
Спасибо:

chulman

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


Сделал так, решил считать вручную позицию, подписался на событие новый трейдов.

Код

protected override void OnStarted()
{

_series = this.GetCandleManager().GetSeries<CandleFoot>(this.Security, 10);
_series
.WhenCandlesFinished()
.Do(ProcessCandle)
.Apply(this);

this.WhenNewMyTrades()
.Do(ProcessPosition)
.Apply(this);

Pos = 0;
base.OnStarted();
}


private void ProcessPosition(IEnumerable<MyTrade> trades)
{

var t = trades.FirstOrDefault();
var buyDir = t.Order.Direction == Sides.Buy;
if (buyDir)
{
Pos = Pos + t.Trade.Volume;
}
else
{
Pos = Pos - t.Trade.Volume;
}
string text = "";
text = text + "позиция " + Pos.ToString();
System.IO.File.WriteAllText(@"f:\footText.txt", text);
}


итог следующий , WhenNewMyTrades не вызывается при срабатывании стоп заявки, файл не переписывается. Даже если тут есть логические ошибки, в файл должно что то записаться, но время файла остается временем основного ордера, при котором выставляется стоп заявка.
Автор топика
Спасибо:

Валентин Лебедев

Фотография
Программист
Дата: 27.06.2014
Ответить


Попробуй что-нибудь из этого:
1. Order.WhenActivated - правило на событие активации стоп-заявки.
2. Использовать StopLossStrategy.
3. Организовать стоп-лосс собственноручно с помощью Security.WhenNewTrades и маркет ордеров.
Спасибо: chulman

chulman

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


viosee Перейти
Попробуй что-нибудь из этого:
1. Order.WhenActivated - правило на событие активации стоп-заявки.
2. Использовать StopLossStrategy.
3. Организовать стоп-лосс собственноручно с помощью Security.WhenNewTrades и маркет ордеров.


спасибо, тоже подумал о этом.
Автор топика
Спасибо:


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

loading
clippy