Alexander Mukhanchikov:
lshaton:
Alexander Mukhanchikov:
OrderFail поднимается?
Что выдаёт?
Не не поднимается. Я не регистрировал никакого EventHandler на OrderFail. Все проходит молчком. Только по первой заявки на фьючерс проходит сделка как положено. А остальные "как в воду".
Ну тогда естественно не поднимется, если вы на событие не подписались.
Подпишитесь да посмотрите почему заявка не регистрируется. Чего гадать? :)
Подписался и изменил параметр Price, чтоб не происходили сделки. И вышло, что заявки нормально зарегистрировались! А что произошло не пойму.. Но хоть прогресс есть! Может dicSecurities[secKey].CallOpt.MinStepPrice, dicSecurities[secKey].PutOpt.MinStepPrice виноваты?
if ((dicSecurities[secKey].Undelying != null) && (dicSecurities[secKey].CallOpt != null) && (dicSecurities[secKey].PutOpt != null)
&& (dicSecurities[secKey].CallOpt.BestAsk != null) && (dicSecurities[secKey].CallOpt.BestBid != null)
&& (dicSecurities[secKey].PutOpt.BestAsk != null) && (dicSecurities[secKey].PutOpt.BestBid != null)
&& (dicSecurities[secKey].CallOpt.BestAsk.Price > 0) && (dicSecurities[secKey].CallOpt.BestBid.Price > 0)
&& (dicSecurities[secKey].PutOpt.BestAsk.Price > 0) && (dicSecurities[secKey].PutOpt.BestBid.Price > 0)
)
{
if ((dLongProf > Profitgap) && (dLongProf != dLongProfOld))
{
Debug.WriteLine(secKey + "=>" + " dLongProf =" + dLongProf.ToString() + " Time =" + DateTime.Now.ToLongTimeString());
sLS = "Long";
TargetOrder1 = new Order
{
Security = dicSecurities[secKey].Undelying,
Direction = OrderDirections.Buy,
//Price = dicSecurities[secKey].Undelying.MaxPrice,
Price = dicSecurities[secKey].Undelying.MinPrice,
Volume = 1,
Portfolio = _portfolio,
Type = OrderTypes.Limit,
};
TargetOrder2 = new Order
{
Security = dicSecurities[secKey].CallOpt,
Direction = OrderDirections.Sell,
//Price = dicSecurities[secKey].CallOpt.BestAsk.Price - dicSecurities[secKey].CallOpt.MinStepPrice, //-500m,
Price = dicSecurities[secKey].CallOpt.BestAsk.Price +500m,
Volume = 1,
Portfolio = _portfolio,
Type = OrderTypes.Limit,
};
TargetOrder3 = new Order
{
Security = dicSecurities[secKey].PutOpt,
Direction = OrderDirections.Buy,
//Price = dicSecurities[secKey].PutOpt.BestBid.Price + dicSecurities[secKey].PutOpt.MinStepPrice, //+500m,
Price = 5m,
Volume = 1,
Portfolio = _portfolio,
Type = OrderTypes.Limit,
};
};
if ((dShortProf > Profitgap) & (dShortProf != dShortProfOld))
{
Debug.WriteLine(secKey + "=>" + " dShortProf =" + dShortProf.ToString() + " Time =" + DateTime.Now.ToLongTimeString());
sLS = "Short";
TargetOrder1 = new Order
{
Security = dicSecurities[secKey].Undelying,
Direction = OrderDirections.Sell,
//Price = dicSecurities[secKey].Undelying.MinPrice,
Price = dicSecurities[secKey].Undelying.MaxPrice,
Volume = 1,
Portfolio = _portfolio,
Type = OrderTypes.Limit,
};
TargetOrder2 = new Order
{
Security = dicSecurities[secKey].CallOpt,
Direction = OrderDirections.Buy,
//Price = dicSecurities[secKey].CallOpt.BestBid.Price + dicSecurities[secKey].CallOpt.MinStepPrice, // + 500m,
Price = 5m,
Volume = 1,
Portfolio = _portfolio,
Type = OrderTypes.Limit,
};
TargetOrder3 = new Order
{
Security = dicSecurities[secKey].PutOpt,
Direction = OrderDirections.Sell,
//Price = dicSecurities[secKey].PutOpt.BestAsk.Price - dicSecurities[secKey].PutOpt.MinStepPrice, // - 500m,
Price = dicSecurities[secKey].PutOpt.BestAsk.Price + 500m,
Volume = 1,
Portfolio = _portfolio,
Type = OrderTypes.Limit,
};
};
if ((sLS == "Long") || (sLS == "Short"))
{
iTransactionId++;
if ((TargetOrder1 != null) && (TargetOrder2 != null) && (TargetOrder3 != null))
{
if (_strategy != null) _strategy.RegOrd(TargetOrder1);
else _trader.RegisterOrder(TargetOrder1);
if (_strategy != null) _strategy.RegOrd(TargetOrder2);
else _trader.RegisterOrder(TargetOrder2);
if (_strategy != null) _strategy.RegOrd(TargetOrder3);
else _trader.RegisterOrder(TargetOrder3);
dLongProf = dLongProfOld;
dShortProf = dShortProfOld;
};
};