Moadip
|
Date: 3/27/2013
Для кода вместо BB тегов надо использовать Для текста логов
|
|
Thanks:
|
|
|
|
|
Lipot
|
Date: 3/27/2013
Подправил. Так намного лучше. Буду впредь оформлять таким образом.
|
|
Thanks:
|
|
|
|
|
Lipot
|
Date: 3/28/2013
Не могу заснуть :) Ну помогите кто-нибудь!
|
|
Thanks:
|
|
|
|
|
esper
|
Date: 3/28/2013
Lipot а) должен сразу ставиться стоп на уровень _stopLoss от цены закрытия и я его должен видеть в Квике? Тейк-профит и стоп-лосс
|
|
Thanks:
|
|
|
|
|
Lipot
|
Date: 3/28/2013
|
|
|
|
В очередной раз прочитал в документации про тейк-профит и стоплосс. Но такое впечатление, что "смотрю в книгу - вижу фигу" или я чего-то не понимаю. Так как работаю через Quik - добавил в таблицу "Инструменты" - максимальную и минимальную цены сделки. Делаю, вроде как, также но после исполнения заявки ничего не происходит. Никаких стоп-заявок не появляется. И из сделки по TakeProfitTimeOut не выходит. Стратегия: Code
/// <summary>
/// Событие обработки свечей (как новых свечей так и пришедших с начала торгового дня)
/// Свечи поступают согласно заданному таймфрейму
/// </summary>
/// <param name="candle">последняя сформированная полностью свеча</param>
private void ProcessCandle(Candle candle)
{
// если наша стратегия в процессе остановки
if (ProcessState == ProcessStates.Stopping)
{
CancelActiveOrders(); //отменяем активные заявки
return;
}
//Если время 23,30 - то закрываем все сделки, останавливаем стратегию, выключаем робота
if (candle.CloseTime.Hour == 23 && candle.CloseTime.Minute >= 40)
{
if (GetCurrentPosition() != 0)
closeAllPosition();
StopRobot();
return;
}
//Разрешаем открывать позиции только в определенное время
if (canTradeByTime(candle.CloseTime.Hour, candle.CloseTime.Minute))
{
//Проверяем, есть ли открытые позиции по нашему инструменту
if (GetCurrentPosition() != 0)
{
//MessageBox.Show("Имеется позиция");
}
//Определяем время последней сформированной свечи
DateTime currentCandleTime = (candle.OpenTime + _timeFrame);
//Если пришедшая свеча - последняя полностью сформированная (актуальная к текущему времени)
if (currentCandleTime.Hour == _candleManager.CurrentTime.Hour &&
currentCandleTime.Minute ==
_candleManager.CurrentTime.Minute / (int)_timeFrame.TotalMinutes * (int)_timeFrame.TotalMinutes)
{
//Вычисляем дельту от цены закрытия
_delta = Math.Round(candle.ClosePrice * _deltaPercent / 100, 0);
if (Orders!=null)
{
if(!Orders.Any())
{
RegisterOrder(this.CreateOrder(OrderDirections.Sell, candle.ClosePrice + _delta, Volume));
}
}
Trader
.WhenNewMyTrades()
.Do(OnNewMyTrades)
.Apply(this);
}
}
}
/// <summary>
/// Событие прихода новой свечи во время нахождения в позиции
/// </summary>
/// <param name="trades"></param>
protected override void OnNewMyTrades(IEnumerable<MyTrade> trades)
{
//Для каждой сделки добавляем защитную стоп-лосс стратегию
var myTrades = trades as List<MyTrade> ?? trades.ToList();
var protectiveStrategies = myTrades.Select(t =>
{
_stopLoss = t.Trade.Price * _stopLossPercent / 100;
//Выставляем стоп-лосс 2% от цены входа
var stopLossStrategy = new AutoProtectiveStrategy
{
StopLossLevel = _stopLoss,
TakeProfitTimeOut = TimeSpan.FromMinutes(_timeFrame.Minutes * 2)
};
return stopLossStrategy;
});
ChildStrategies.AddRange(protectiveStrategies);
base.OnNewMyTrades(myTrades);
}
DebugLog с момента исполнения заявки: Code
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.835 | | Новая позиция: SPBFUT007r0-SRM3@RTS=-1.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.839 | | Правило 'Отмена заявки 47769953/10218367678 (0x1B1098F) OR Полное исполнение 47769953/10218367678 (0x1DE93AF) OR Ошибка регистрации заявки 47769953/10218367678 (0x3D23B6F)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.840 | | Заявка 47769953 больше не активна.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.841 | | Правило 'Отмена заявки 47769953/10218367678 (0x1B1098F) OR Полное исполнение 47769953/10218367678 (0x1DE93AF) OR Ошибка регистрации заявки 47769953/10218367678 (0x3D23B6F)'. Удаляется.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.844 | | Правило 'Отмена заявки 47769953/10218367678 (0x1B1098F)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.845 | | Правило 'Полное исполнение 47769953/10218367678 (0x1DE93AF)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.845 | | Правило 'Ошибка регистрации заявки 47769953/10218367678 (0x3D23B6F)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.845 | | Правило 'Отмена заявки 47769953/10218367678 (0x1B1098F) OR Полное исполнение 47769953/10218367678 (0x1DE93AF) OR Ошибка регистрации заявки 47769953/10218367678 (0x3D23B6F)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:48.845 | | Правило 'Отмена заявки 47769953/10218367678 (0x1B1098F) OR Полное исполнение 47769953/10218367678 (0x1DE93AF) OR Ошибка регистрации заявки 47769953/10218367678 (0x3D23B6F)'. Удаление.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.002 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.002 | | Стратегия запущена. [0,1]. Позиция при старте 0.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.010 | | Новая Sell сделка 714686430 по цене 9612 на 1 заявки 47769953.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.024 | | Правило 'Новые сделки (0xF4B390)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.182 | | Правило 'Новые сделки (0x36E1331)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.453 | | Правило 'Новые сделки (0x19DE06)'. Активация.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.182 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.182 | | Стратегия запущена. [0,2]. Позиция при старте 0.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.453 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.453 | | Стратегия запущена. [0,3]. Позиция при старте 0.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.655 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.655 | | Стратегия запущена. [0,4]. Позиция при старте 0.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.655 | | Правило 'Новые сделки (0x2F34230)'. Активация.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.896 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:19:49.896 | | Стратегия запущена. [0,5]. Позиция при старте 0.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:20:01.802 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x2B88FBE)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:21:02.302 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x2B88FBE)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 13:22:03.422 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x2B88FBE)'. Активация.
Помогите, пожалуйста.
|
|
Thanks:
|
|
|
|
|
hroft
|
Date: 3/28/2013
Вроде так: Code
var stop_price=t.Trade.Price * _stopLossPercent / 100;
var _stopLoss = new Unit(stop_price, UnitTypes.Limit);
var stopLossStrategy = new AutoProtectiveStrategy
{
StopLossLevel = _stopLoss,
TakeProfitTimeOut = TimeSpan.FromMinutes(_timeFrame.Minutes * 2)
};
Если stop_price конкретное значение цены то нужно как наверху, если разница в пунктах от цены по которой прошла сделка то можно просто var _stopLoss=new Unit(stop_price). Это вообще не надо: Code
var myTrades = trades as List<MyTrade> ?? trades.ToList();
Update: В вашем случае var _stopLoss=new Unit(stop_price)
|
|
Thanks:
|
|
|
|
|
Lipot
|
Date: 3/28/2013
|
|
|
|
Сделал, как вы показали. К сожалению не помогло [crying] После входа в сделку, ни стоп-заявки, ни выхода по TakeProfitTimeOut. Code
protected override void OnNewMyTrades(IEnumerable<MyTrade> trades)
{
//Для каждой сделки добавляем защитную стоп-лосс стратегию
var protectiveStrategy = trades.Select(trade =>
{
var stopPrice = trade.Trade.Price * _stopLossPercent / 100;
var stopLoss = new Unit(stopPrice);
var stopLossStrategy = new AutoProtectiveStrategy
{
StopLossLevel = stopLoss,
TakeProfitTimeOut = TimeSpan.FromMinutes(_timeFrame.Minutes * 2)
};
return stopLossStrategy;
});
ChildStrategies.AddRange(protectiveStrategy);
base.OnNewMyTrades(trades);
}
DebugLog: Code
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:26:01.386 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x2223F6A)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.278 | | Новая позиция: SPBFUT007r0-SRM3@RTS=-1.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.282 | | Правило 'Отмена заявки 62583271/10222349252 (0x2D27045) OR Полное исполнение 62583271/10222349252 (0x1F6DBDE) OR Ошибка регистрации заявки 62583271/10222349252 (0x3290837)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.283 | | Заявка 62583271 больше не активна.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.284 | | Правило 'Отмена заявки 62583271/10222349252 (0x2D27045) OR Полное исполнение 62583271/10222349252 (0x1F6DBDE) OR Ошибка регистрации заявки 62583271/10222349252 (0x3290837)'. Удаляется.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.285 | | Правило 'Отмена заявки 62583271/10222349252 (0x2D27045)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.285 | | Правило 'Полное исполнение 62583271/10222349252 (0x1F6DBDE)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.286 | | Правило 'Ошибка регистрации заявки 62583271/10222349252 (0x3290837)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.286 | | Правило 'Отмена заявки 62583271/10222349252 (0x2D27045) OR Полное исполнение 62583271/10222349252 (0x1F6DBDE) OR Ошибка регистрации заявки 62583271/10222349252 (0x3290837)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.286 | | Правило 'Отмена заявки 62583271/10222349252 (0x2D27045) OR Полное исполнение 62583271/10222349252 (0x1F6DBDE) OR Ошибка регистрации заявки 62583271/10222349252 (0x3290837)'. Удаление.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.485 | | Новая Sell сделка 714976123 по цене 9690 на 1 заявки 62583271.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.499 | | Правило 'Новые сделки (0x348F60C)'. Активация.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.474 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.474 | | Стратегия запущена. [0,1]. Позиция при старте 0.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.829 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:23:30.830 | | Стратегия запущена. [0,2]. Позиция при старте 0.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:24:03.959 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x2223F6A)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 17:25:04.374 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x2223F6A)'. Активация.
|
|
Thanks:
|
|
|
|
|
hroft
|
Date: 3/28/2013
Так: Code
protected override void OnNewMyTrades(IEnumerable<MyTrade> trades)
{
//Для каждой сделки добавляем защитную стоп-лосс стратегию
var protectiveStrategy = trades.Select(trade =>
{
var stopPrice = trade.Trade.Price * _stopLossPercent / 100;
var stopLoss = new Unit(stopPrice);
var stopLossStrategy = new AutoProtectiveStrategy
{
StopLossLevel = stopLoss,
TakeProfitTimeOut = TimeSpan.FromMinutes(_timeFrame.Minutes * 2)
};
stopLossStrategy.ProcessNewMyTrades(trades);
return stopLossStrategy;
});
ChildStrategies.AddRange(protectiveStrategy);
}
|
|
Thanks:
|
|
|
|
|
Lipot
|
Date: 3/28/2013
|
|
|
|
Подставил ваш код. Судя по логам что-то поменялось. Но на деле ничего опять же не произошло. Ни стоп заявки в Quik'e, ни выхода по TakeProfitTimeOut. Выкладываю DebugLog с момента входа в сделку. Видно что какое-то котирование запустилось, но мне трудно разобрать, что значат некоторые строки. Может вы сможете что сказать? Code
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.093 | | Новая позиция: SPBFUT007r0-SRM3@RTS=-1.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.097 | | Правило 'Отмена заявки 65566124/10223573111 (0xCF239D) OR Полное исполнение 65566124/10223573111 (0x2239303) OR Ошибка регистрации заявки 65566124/10223573111 (0x3A5D131)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.098 | | Заявка 65566124 больше не активна.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.099 | | Правило 'Отмена заявки 65566124/10223573111 (0xCF239D) OR Полное исполнение 65566124/10223573111 (0x2239303) OR Ошибка регистрации заявки 65566124/10223573111 (0x3A5D131)'. Удаляется.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.101 | | Правило 'Отмена заявки 65566124/10223573111 (0xCF239D)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.102 | | Правило 'Полное исполнение 65566124/10223573111 (0x2239303)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.103 | | Правило 'Ошибка регистрации заявки 65566124/10223573111 (0x3A5D131)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.103 | | Правило 'Отмена заявки 65566124/10223573111 (0xCF239D) OR Полное исполнение 65566124/10223573111 (0x2239303) OR Ошибка регистрации заявки 65566124/10223573111 (0x3A5D131)'. Освободило ресурсы.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.103 | | Правило 'Отмена заявки 65566124/10223573111 (0xCF239D) OR Полное исполнение 65566124/10223573111 (0x2239303) OR Ошибка регистрации заявки 65566124/10223573111 (0x3A5D131)'. Удаление.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.294 | | Новая Sell сделка 715063480 по цене 9710 на 1 заявки 65566124.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.308 | | Правило 'Новые сделки (0x36429A3)'. Активация.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.262 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.294 | | Стратегия запущена. [1,1]. Позиция при старте 0.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.262 | | Переход из состояния Stopped в Started.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.262 | | Стратегия запущена. [0,1]. Позиция при старте 0.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.262 | | Защита сделки 715063480 заявки 65566124.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.263 | | Котирование на Buy объема 1.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.263 | | Приостановка правил. _rulesSuspendCount 1.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.274 | | Возобновление правил. _rulesSuspendCount 0.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Стратегия запущена. [1,2]. Позиция при старте 0.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Переход из состояния Stopped в Started.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Стратегия запущена. [0,1]. Позиция при старте 0.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Защита сделки 715063480 заявки 65566124.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Котирование на Buy объема 1.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Приостановка правил. _rulesSuspendCount 1.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Возобновление правил. _rulesSuspendCount 0.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.466 | | Правило 'Новые сделки (0x20F3157)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Правило 'Новые сделки (0x36429A3)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Правило 'Новые сделки (0x20F3157)'. Активация.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Переход из состояния Stopped в Started.
APS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Стратегия запущена. [1,3]. Позиция при старте 0.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Переход из состояния Stopped в Started.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Стратегия запущена. [0,1]. Позиция при старте 0.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Защита сделки 715063480 заявки 65566124.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Котирование на Buy объема 1.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Приостановка правил. _rulesSuspendCount 1.
SLS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:14:12.697 | | Возобновление правил. _rulesSuspendCount 0.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:15:00.837 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x3241F53)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:16:04.407 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x3241F53)'. Активация.
RS_SRM3@RTS_SPBFUT007r0 | 28.03.2013 18:17:05.532 | | Правило 'Законченные свечки TimeFrameCandle_SRM3@RTS_00-01-00 (0x3241F53)'. Активация.
Спасибо.
|
|
Thanks:
|
|
|
|
|
hroft
|
Date: 3/29/2013
Стоп-заявки в quik и не будут выкидываться. Защитные стратегии используют алгоритм котирования для защиты сделок. Когда цена отойдет на расстояние которое вы указали в StopLossLevel тогда защитная стратегия начнет по Volume (в вашем случае по 1 ) контракту выкидывать заявки, постепенно закрывая позицию. Сам я AutoProtectiveStrategy не использую. Update: Блин сам же сказал что защитные стратегии используют алгоритм котирования. У вас стаканы запущены??? Если нет то впихните например в OnStarted стратегии: Code
_trader.RegisterMarketDepth(security);
|
|
|
|