pft_man
|
Дата: 04.06.2013
Добрый день. В каком-то одном из уроков (к сожалению не помню, в каком) вы говорили о том, что последнюю сделку можно брать из стакана. Можно об этом подробней с парой строков кода? Я правильно понимаю, что если эту сделку брать из стакана, то она быстрее придёт, чем по событию всех сделок, поскольку все сделки отправляются пакетами и соответственно есть задержка на формирование этого пакета?
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 04.06.2013
pft_man Добрый день. В каком-то одном из уроков (к сожалению не помню, в каком) вы говорили о том, что последнюю сделку можно брать из стакана. Можно об этом подробней с парой строков кода? Я правильно понимаю, что если эту сделку брать из стакана, то она быстрее придёт, чем по событию всех сделок, поскольку все сделки отправляются пакетами и соответственно есть задержка на формирование этого пакета? Стакан, это структура на основе заявок, по стакану нельзя получить информацию по сделкам. Из стакана можно получить лучшую цену продажи/покупки на данный момент.
|
|
Спасибо:
|
|
|
|
|
albion8
|
Дата: 04.06.2013
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 05.06.2013
|
|
Спасибо:
|
|
|
|
|
albion8
|
Дата: 10.06.2013
Подтверждаю, видео появилось. Спасибо!
|
|
Спасибо:
|
|
|
|
|
Николай
|
Дата: 29.11.2013
|
|
|
|
Добрый день. Попробовал сделать третий урок первую часть - Стратегия. После того как все сделал и запустил программу (на фьючерсах SIZ3), программа отказывалась выполнять сделки по купли и продаже. Я решил скачать оригинал и попробовать запустить его. Оказалось скаченный оригинал отличается от урока (немного правда), но видимо что-то в нем было докручено под фьючерсы. Код
//========================= Для получения корректного значения рыночной цены с Quik ===============================
var baseTrader = Trader as QuikTrader;
if (baseTrader != null)
{
// Пробуем "научить" Квик-Трейдер правильно выставлять маркет-ордера при работе с фьючерсами
baseTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
baseTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);
}
//=================================================================================================================
В результате стратегия стала покупать, однако отказывается выходить из сделки. Операция просто не выполняется: Код
15:33:30 TimeFrameCandle_SIZ3@FORTS_00-00-10 (O:33266, H:33266, L:33266, C:33266, V:9): {0}
15:33:40 TimeFrameCandle_SIZ3@FORTS_00-00-10 (O:33267, H:33267, L:33266, C:33266, V:10): {0}
signalStopBuy
15:33:50 TimeFrameCandle_SIZ3@FORTS_00-00-10 (O:33267, H:33267, L:33266, C:33266, V:70): {0}
signalStopBuy
И позиция с купленным фьючерсом продолжает висеть. Подскажите пожалуйста: В чем могут быть проблемы с Код
RegisterOrder(this.SellAtMarket());
? И почему первоначальный вариант отказывался делать операции по фьючерсам в принципе?
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 01.12.2013
|
|
|
|
Николай Добрый день.
Попробовал сделать третий урок первую часть - Стратегия.
После того как все сделал и запустил программу (на фьючерсах SIZ3), программа отказывалась выполнять сделки по купли и продаже.
Я решил скачать оригинал и попробовать запустить его. Оказалось скаченный оригинал отличается от урока (немного правда), но видимо что-то в нем было докручено под фьючерсы. ... Дело в том, что методы SellAtMarket и BuyAtMarket для фьючерсов используют цены, из столбцов МасимальнаяЦена и МинимальнаяЦена, для этого мы добавляем код: Код
//========================= Для получения корректного значения рыночной цены с Quik ===============================
var baseTrader = Trader as QuikTrader;
if (baseTrader != null)
{
// Пробуем "научить" Квик-Трейдер правильно выставлять маркет-ордера при работе с фьючерсами
baseTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MaxPrice);
baseTrader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MinPrice);
}
//=================================================================================================================
И соответственно нужно добавить эти столбцы в Quik, что Вы не сделали, я предполагаю. Еще есть вариант для получения маркет заявок - использовать расширенные методы SellAtMarketEx и BuyAtMarketEx, реализицию которых можно найти в проекте по пути (tfs): $/StockSharp Lessons/StockSharp.Edu/Additional/Algo/CommonStrategy
|
|
Спасибо:
|
|
|
|
|
Николай
|
Дата: 02.12.2013
Иван,
Действительно замена BuyAtMarket на BuyAtLimit с ценой выставления превышающую BestAsk на несколько пунктов, изменило ситуацию. (аналогично с Sell)
Спасибо.
|
|
Спасибо:
|
|
|
|
|
Николай
|
Дата: 03.12.2013
Возник еще один вопрос.
Правильно ли я понимаю что для фьючерсов не работает ClosePosition (закрытие открытых позиций)?
Есть ли аналог для фьючерсов или надо самому писать ? (Возможно просто перегрузить данный метод?)
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 03.12.2013
|
|
|
|
Николай Возник еще один вопрос.
Правильно ли я понимаю что для фьючерсов не работает ClosePosition (закрытие открытых позиций)? Причина таже - метод использует маркет заявки, а для них надо добавлять в ручную столбцы в Quik и соответственно регистрировать в трейдере. Николай Есть ли аналог для фьючерсов или надо самому писать ? (Возможно просто перегрузить данный метод?)
Можно перегрузить метод, за основу взять реализацию метода, но переписать на SellAtMarketEx и BuyAtMarketEx. Код
/// <summary>
/// Закрыть открытую позицию по рынку (выставить заявку типа <see cref="OrderTypes.Market"/>).
/// </summary>
/// <remarks>
/// Рыночная заявка не работает на всех биржах.
/// </remarks>
/// <param name="strategy">Стратегия.</param>
/// <param name="slippage">Уровень проскальзывания, допустимый при регистрации заявки. Используется, если заявка регистрируется лимиткой.</param>
public static void ClosePosition(this Strategy strategy, decimal slippage = 0)
{
if (strategy == null)
throw new ArgumentNullException("strategy");
var position = strategy.Position;
if (position != 0)
{
var volume = position.Abs();
var order = position > 0 ? strategy.SellAtMarket(volume) : strategy.BuyAtMarket(volume);
if (order.Type != OrderTypes.Market)
{
order.Price += (order.Direction == OrderDirections.Buy ? slippage : -slippage);
}
strategy.RegisterOrder(order);
}
}
https://stocksharp.codeplex.com/...tegies/StrategyHelper.cs
|
|
Спасибо:
|
|
|
|