SmartQuant Discussion

Automated Quantitative Strategy Development, SmartQuant Product Discussion and Technical Support Forums
It is currently Mon Oct 26, 2020 3:34 am

All times are UTC + 3 hours




Post new topic Reply to topic  [ 435 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6 ... 29  Next
Author Message
PostPosted: Mon Jan 24, 2011 7:53 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Вопрос по сохранению параметров Portfolio проекта в Live режиме.
Тестируя проект я периодически запускал его и останавливал, при этом Account проекта при каждом запуске увеличивался на Deposit (Initial Cash Allocation) = Cash солюшена.
При этом в Portfolio солюшена Account не увеличивался, а каждый раз брался из Cash солюшена, и получилось так, что денег в проекте стало на несколько порядков больше чем во всём солюшене.
Также и в проекте и в солюшене сохранялись позиции по инструментам, которых уже не было в проекте, оценка которых добавлялась к Account.
Вопроса три:
1. Как очистить Portfolio проекта и списки транзакций проекта/солюшена? ResetOnStart = true в сценарии обнулил только Initial Account солюшена.
2. Как подкорректировать (удалить) позиции в Portfolio без отправки новых заявок? Самый простой случай, когда это нужно - запуск проекта "с нуля", с новыми инструментами, или просто хочется обнулить статистику.
3. Будет ли реализовано выставление Cash каждому из проектов, как об этом просили в соседней ветке? Будет ли при этом арифметический контроль кэшей проектов и всего солюшена?


Top
 Profile  
 
PostPosted: Wed Jan 26, 2011 10:57 am 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Антон, ответите?


Top
 Profile  
 
PostPosted: Wed Jan 26, 2011 5:45 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
Здравствуйте,

1) Пока для этого нужно поставить свойство Persistent мода в false и запустить/остановить солюшн. Мы подумаем, что нужно добавить, чтобы того же можно было добиться более простыми манипуляциями.

2) Для запуска проекта "с нуля" совет тот же, что и в пункте 1). Что касается коррекции позиций - этого можно достичь путём добавления соответствующих транзакций в портфель проекта прямо из кода стратегии (Portfolio.Add(...)) , портфель солюшена и мода обновятся автоматически.

3) Надо подумать :)

Я попробовал воспроизвести ситуацию, когда аккаунт проектов растёт, а аккаунт портфеля нет. Для этого стартовал и останавливал солюшн в Live моде. Ничего криминального с аккаунтами не заметил. Вы не могли бы подробней рассказать, что именно нужно сделать, чтобы воспроизвести ошибку? Обязательно ли нужно, чтобы стратегия хотя бы раз купила/продала перед перезапуском?

Сергей.


Top
 Profile  
 
PostPosted: Wed Jan 26, 2011 6:28 pm 
Offline

Joined: Thu Jun 03, 2010 5:15 pm
Posts: 159
Location: Russia
Спасибо за ответы )
1. Понял назначение свойства Persistent мода. Но тогда не понял свойства ResetOnStart сценария. Написано "Resets strategies and portfolios state on solution start". Из чего состоят эти state?
2. Да, метод Add это то что нужно. Теперь подумаю, как проще для трейдера его вызывать.
3. Эффект происходит при Persistent Live моде, когда Опенквант перезапускается. После каждого перезапуска в Portfolio проекта добавляется Initial Cash. Это выглядит как на скриншоте: слева счёт проекта, справа - солюшена. Никаких заявок не выставлялось, просто запуск.


Attachments:
oq_portfolio.jpg
oq_portfolio.jpg [ 82.95 KiB | Viewed 5744 times ]
Top
 Profile  
 
PostPosted: Thu Jan 27, 2011 8:35 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
1) Вообще идея была в том, что вы оптимизируете свою стратегию на истории и затем запускаете её в Live моде. При этом, если ResetOnStart установлен в false - не только все портфели, ордер манеджер не будут чиститься, но и сами объекты стратегий останутся прежними. Т.е. если состояние стратегии будет точно тем же, что и в конце предыдущей симуляции. Это удобно, если вы хотите сохранить все индикаторы, параметры, свойства стратегии и запустить стратегию в Live моде не с нуля, а начиная с некоторого состояния.

3) спасибо, у меня получилось воспроизвести, будем исправлять


Top
 Profile  
 
PostPosted: Sun Jan 30, 2011 12:56 pm 
Offline

Joined: Tue Jan 25, 2011 2:57 pm
Posts: 134
Добрый день.

Вопрос как правильно ставить стопы.

Как я понял можно их ставить

1. используя методы выставления заявок (BuyLimit ,BuyStop ,BuyStopLimit ). Но в случае если позиция закрывается не по стопу то ордер нужно снимать или изменять.
2. Используя метод SetStop() и обработчик стопа в событие OnStopExecuted. В этом случае как я понимаю в случае закрытия позиции в штатном режиме не чего снимать не нужно. Нужно только обновить уровень SetStop().

Не могу понять

1. Есть длинная позиция цена входа 100. При установки SetStop (1, StopType.Trailing, StopMode.Percent) на каком ценовом уровне произойдет вызом OnStopExecuted? На 1% меньше цены входа т.е. на 99? или я что то не понимаю?

2. Событие OnStopExecuted вызывается только при установки SetStop или в случае исполнения BuyStop ,BuyStopLimit оно также будет вызываться?


Top
 Profile  
 
PostPosted: Sun Jan 30, 2011 2:12 pm 
Offline

Joined: Tue Aug 05, 2003 3:43 pm
Posts: 6817
Сергей вам завтра ответит на ваши вопросы, но мне кажется, что вы путаете стоповые заявки и объект стоп. Стоповые заявки это обычные заявки, которые послаются брокеру и исполняются на стороне брокера. Объект стоп это объект, которые создается внутри опенкванта, подписывается на маркетные данные и следит, когда выполнятся условия срабатывания стопа. Тогда он посылает брокеру маркетную заявку и говорит вам, что он Executed. То есть две принципиально разные вещи.


Top
 Profile  
 
PostPosted: Mon Jan 31, 2011 11:18 am 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
1) Стоп будет исполнен как только цена упадёт на 1% от максимального уровня. Например, если цена возросла до 140, то стоп будет исполнен как только она упадёт до 138.6. Или цена вообще не выросла после входа в позицию на уровне 100, тогда стоп будет исполнен на уровне 99.

2) Только в случае установки SetStop. Антон как раз описал разницу между стопом-заявкой и стопом-объектом в предыдущем сообщении.


Top
 Profile  
 
PostPosted: Mon Jan 31, 2011 2:26 pm 
Offline

Joined: Tue Jan 25, 2011 2:57 pm
Posts: 134
вот пример моего кода вроде все просто а не работает.

в ОрдерМанаджер смотрю что стратегией 28.04.1999 была открыта длинная позиция по 53,06 (по цене закрытия)
Согласно кода ниже должен быть выставлен стоп на уровне 53,06-(53,06 * 1%)=52,5294

Но по факту так не получается, в частности правлю руками данные за 29.04.1999 ставлю цену закрытия 52,50 при этом стоп не срабатывает. Хотя по моим расчетам должен.

В чем может быть причина?

Вот код
[Parameter("Stop Level", "Stop")]
double StopLevel = 1;

[Parameter("Stop Type", "Stop")]
StopType StopType = StopType.Fixed;

[Parameter("StopMode", "Stop")]
StopMode StopMode = StopMode.Percent;


public override void OnPositionOpened()
{
SetStop (StopLevel, StopType.Trailing, StopMode.Percent) ;
}
public override void OnStopExecuted(Stop stop)
{
pos=Position;
file.WriteLine("STOPPP");
if (pos.Side==PositionSide.Short){
marketO = MarketOrder(OrderSide.Buy, Qty, "Стоп ордер");
marketO.Send();
}
if (pos.Side==PositionSide.Long){
marketO = MarketOrder(OrderSide.Sell, Qty, "Стоп ордер");
marketO.Send();
}


Top
 Profile  
 
PostPosted: Wed Feb 02, 2011 2:17 pm 
Offline

Joined: Tue Jan 25, 2011 2:57 pm
Posts: 134
Исходя из того что на мой последний пост ответа нет можно сделать вывод что я спрашиваю что то не то.

Или просто нет времени ответить?


Top
 Profile  
 
PostPosted: Wed Feb 02, 2011 3:10 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
Судя по этой строчке
Code:
SetStop (StopLevel, StopType.Trailing, StopMode.Percent) ;
вы ставите трэйлинг стоп, соответственно уровень стопа будет выше, если цена поднимется. Возможно вы имелли в виду
Code:
SetStop (StopLevel, StopType, StopMode) ;
?


Top
 Profile  
 
PostPosted: Wed Feb 02, 2011 3:46 pm 
Offline

Joined: Tue Jan 25, 2011 2:57 pm
Posts: 134
да я ставлю трейлинг стоп. Дневные данные


28.04.1999 отрывается длинная позиция по 53,06

Логично что сразу будет установлен стоп относительно центы открытия 53,06-(53,06 * 1%)=52,5294

По моей логике если на следующем баре т.е. 29.04.1999 цена закрытия будет ниже то стоп должен сработать.

Правлю руками данные за 29.04.1999 ставлю цену закрытия 52,50 при этом стоп не срабатывает.


Top
 Profile  
 
PostPosted: Thu Feb 03, 2011 5:54 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
Quote:
По моей логике если на следующем баре т.е. 29.04.1999 цена закрытия будет ниже то стоп должен сработать.


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


Top
 Profile  
 
PostPosted: Wed Feb 09, 2011 3:23 pm 
Offline

Joined: Fri Dec 03, 2010 12:43 am
Posts: 9
1. Для чего параметр "Latency" и в каких он единицах?
Provider\Execution\Simulator\Fill Data\Latency

2. И там же "Partial Fills". Не очень понятно как это работает.

Разъясните пожалуйста.


Top
 Profile  
 
PostPosted: Wed Feb 09, 2011 5:22 pm 
Offline

Joined: Wed Oct 08, 2003 1:06 pm
Posts: 833
1) Latency измеряется в миллисекундах. Он нужен для того, чтобы симулировать задержку при передаче ордера реальному провайдеру. Т.е., если ордер послан в 10:00:00, а Latency = 2000 (2 секунды), то до Simulation (Execution) provider заявка дойдёт только в 10:00:02.

2) ParialFills нужен для симуляции частичного исполнения заявок. Если Qty заявки равно 1M, а сайзы квот находятся на уровне 500K, то заявка будет исполнена в два приёма - половина на текущую квоту, половина на следующую.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 435 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6 ... 29  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group