#4751 - Thu Apr 22 2010 12:01 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
ЭЭЭЭ. Вы наверное имели ввиду, что хотите чтобы ордер на закрытие оставался и после указанного Вами бара? Ибо после указанного Вами бара он просто отменяется. Проще всего это предусмотреть в коде. то есть выставлять его еще раз. С лимитными есть проблема- с точки зрения позиций их не открыть. Однако NewOrder я бы не стал пользоваться-у Вас получится куча открытых позиций. Если Вы делаете не скальперскую стратегию, то зачем Вам лимитник?
|
Наверх
|
|
|
|
#4757 - Thu Apr 22 2010 12:16 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
...Если Вы делаете не скальперскую стратегию, то зачем Вам лимитник? Для закрытия по тейкпрофиту, например, по фиксированной цене.
|
Наверх
|
|
|
|
#4761 - Thu Apr 22 2010 12:57 PM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Если вам критично именно по указанной цене, то вы можете разбить логику для тестирования и для реальной торговли. При реальной торговле действовать через NewOrder а при тестировании через позиции.
|
Наверх
|
|
|
|
#4762 - Thu Apr 22 2010 12:59 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
ЭЭЭЭ. Вы наверное имели ввиду, что хотите чтобы ордер на закрытие оставался и после указанного Вами бара? Именно так. Ибо после указанного Вами бара он просто отменяется. Проще всего это предусмотреть в коде. то есть выставлять его еще раз. Если бы. Я тоже так думал. Но TSLab думает иначе. Если лимитник не сработал он почему-то выставляет закрытие по рынке, что мне совершенно ни к чему.
|
Наверх
|
|
|
|
#4764 - Thu Apr 22 2010 01:10 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
А я кажется понял: Вы имели ввиду тот случай, когда проскальзывание установлено очень маленьким и сработал стопарь, а ордер не сбился? Да, тут придется юзать NewOrder. Отвратная это вещь... Вам придется вычислять текущую позицию ручками... Могу привести пример того как ее вычислить)))
|
Наверх
|
|
|
|
#4765 - Thu Apr 22 2010 01:19 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Попробую вечером(скорее ночью)( если никто раньше не выложит))) выложить более-менее полноценный пример с разделением логики на случай лаборатории и не и с выставлением лимитника.
|
Наверх
|
|
|
|
#4768 - Thu Apr 22 2010 01:52 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Попробую вечером(скорее ночью)( если никто раньше не выложит))) выложить более-менее полноценный пример с разделением логики на случай лаборатории и не и с выставлением лимитника. anothar, очень просим, если можно поподробней, для "тонких знатоков" С#, наподобие меня.
|
Наверх
|
|
|
|
#4790 - Thu Apr 22 2010 03:47 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
А я кажется понял: Вы имели ввиду тот случай, когда проскальзывание установлено очень маленьким и сработал стопарь Проскальзывание вообще установлено в 0. Вот давайте для понятности опишу пример. В 10:30 я покупаю бумагу по 100 рублей. И выставляю тейк-профит на 110. Моя цель - продать именно по 110. В 10:31 мой скрипт выставляет тейк-профит по 110. Но цена еще пока не дошла до 110. Я думаю, что логика должна быть такая: эта заявка с тейк-профитом висит до тех пор пока цена не дойдет до 110 (хоть до 6 вечера). А у TSLab логика другая - если в 10:31 тейк-профит не сработал, он выставляет в 10:32 заявку на закрытие позиции ПО РЫНКУ.
|
Наверх
|
|
|
|
#4792 - Thu Apr 22 2010 04:03 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
По логике, Лимитная заявка, если не исполнена должна переноситься с бара на бар (т. е. старая снимать и размещаться новая на каждом баре) с проверкой условия исполнения (это для случаев, когда при закрытии бара уровень Лимитного ордера может изменяться).
|
Наверх
|
|
|
|
#4802 - Thu Apr 22 2010 04:45 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Блин у меня лаб что-то сломался. То что он не переносит позиции-это одно и не страшно-можно в коде каждый раз заново ставить. А вот то что закрывает по рынку-это весьма странно и мне не верится... Но проверить сегодня я не могу. Так что если есть время и игровой счет.. Вот код: using System; using System.Collections.Generic; using System.Linq; using System.Text; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Optimization; using TSLab.Script.Helpers;
namespace HourStrategy { public class TestScript : IExternalScript { #region IExternalScript Members
public void Execute(IContext ctx, ISecurity sec) { for (int i = 0; i < sec.Bars.Count; i++) { if (sec.Positions.LastLongPositionActive == null) { sec.Positions.BuyAtMarket(i+1,0, "Buy"); } else { sec.Positions.LastLongPositionActive.CloseAtProfit(i+1, 2 * sec.OpenPrices[i], "Close"); } } }
#endregion } } если закроется хотя бы раз-значит по рынку и надо тут подумать.
|
Наверх
|
|
|
|
#4806 - Thu Apr 22 2010 05:17 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
То что он не переносит позиции-это одно и не страшно-можно в коде каждый раз заново ставить. А вот то что закрывает по рынку-это весьма странно и мне не верится... Да в коде-то у меня ставится.. Только толку нет. И мне сначала не поверилось. Посмотрите http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=2758#Post2758
|
Наверх
|
|
|
|
#4812 - Thu Apr 22 2010 06:01 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Я прочитал. Смысл тот же что я и описал. Цена дотрагивается до указанного Вами значения, после чего( поскольку на самом деле то тейкпрофит в лабе-это стоп-заявка) выставляется лимитник. Если Вы поставили проскальзывание 0, то он выставляется по цене стопаря, но цена только затронула эту цену-и потом пошла вниз. Ваш лимитник на этом баре таким образом не исполнился. На след баре ТСЛаб закрывает по рынку. Ну что поделать-либо извращаться через neworder либо ставить соответствующее проскальзывание.
|
Наверх
|
|
|
|
#4815 - Thu Apr 22 2010 06:18 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
Нет, смысл не тот же. Цена дотрагивается до указанного Вами значения, после чего( поскольку на самом деле то тейкпрофит в лабе-это стоп-заявка) выставляется лимитник. Она еще ни до чего не дотрагивается. Я выставляю тейк-профит, как только вхожу в позицию.
|
Наверх
|
|
|
|
#4817 - Thu Apr 22 2010 06:40 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Хорошо. Я конечно еще посмотрю что в лабе происходит-когда его починю))))Понятно что Вам нужно знать как выставлять заявки с помощью NewOrder и как потом считать позиции.
|
Наверх
|
|
|
|
#4820 - Thu Apr 22 2010 07:29 PM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Хорошо. Я конечно еще посмотрю что в лабе происходит-когда его починю))))Понятно что Вам нужно знать как выставлять заявки с помощью NewOrder и как потом считать позиции. Да, anothar, помоги разобраться, как выставить Лимит и Стоп на открывшийся бар.
|
Наверх
|
|
|
|
#4831 - Thu Apr 22 2010 11:05 PM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Вот небольшой пример. в нем используется стек заявок. До конца в нем не уверен, собственно говоря вот сабж:http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=4829&#Post4829 как получу на него ответ исправлю и дополню пример.
public void Execute(IContext ctx, ISecurity sec) { //проверка на лабораторию-если не реальная торговля-выходим if (!sec.Positions.IsRealtime) return; int i = sec.Bars.Count() - 1; if (i < 0) return; //получаем биржевой стакан IList<IQueueData> buyQueue=sec.GetBuyQueue(i); IList<IQueueData> sellQueue = sec.GetSellQueue(i); ISecurityRt secRt = sec as ISecurityRt; if (secRt == null) return; //текущая позиция. если больше нуля-значит в лонге. мееьше нуля-в шорте double lotsBalance = 0; //пробегаемся по всем исполненным лимитникам-нам необходимо текущее число лотов foreach (IOrder order in secRt.Orders) if (order.OrderType == TSLab.DataSource.OrderType.Limit) { lotsBalance += order.IsBuy ? (order.Quantity-order.RestQuantity) : (-order.Quantity+order.RestQuantity); //для примера-если ордер не исполнился-убиваем if (!order.IsExecuted) secRt.CancelOrder(order); }
//условие-у нас нулевой баланс лотов if (lotsBalance == 0) { //ставим лимитник на бай-хотим выше остальных secRt.NewOrder(TSLab.DataSource.OrderType.Limit, true, buyQueue[0].Price + 0.01, 1, "Long"); //ставим лимитник на продажу-хотим ниже всех secRt.NewOrder(TSLab.DataSource.OrderType.Limit, false, sellQueue[0].Price - 0.01, 1, "Short"); } else if (lotsBalance < 0) { //закрываем отрицательный баланс покупкой secRt.NewOrder(TSLab.DataSource.OrderType.Limit, true, buyQueue[0].Price + 0.01, -lotsBalance, "Long"); } else { //закрываем положительный баланс лотов продажей secRt.NewOrder(TSLab.DataSource.OrderType.Limit, false, sellQueue[0].Price - 0.01, lotsBalance, "Short"); }
}
|
Наверх
|
|
|
|
#4941 - Mon Apr 26 2010 10:50 AM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Вот небольшой пример. в нем используется стек заявок. До конца в нем не уверен, собственно говоря вот сабж:http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=4829&#Post4829 как получу на него ответ исправлю и дополню пример. anothar, доброго здравия, ответ получен, пример остаётся без исправлений/дополнений?
|
Наверх
|
|
|
|
#4943 - Mon Apr 26 2010 10:58 AM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Ага и Вам )))Но все-таки одно маленькое исправление: //закрываем отрицательный баланс покупкой secRt.NewOrder(TSLab.DataSource.OrderType.Limit, true, buyQueue[0].Price + 0.01, -lotsBalance, "Long"); -я тут забыл перенос вставить после комментов. Эх жалко нельзя посты редактировать. Я предлагаю привести какой-нибудь новый пример, могу в нем использовать сжатие. Принимаю идею по поводу алгоритма-только простой, чем проще тем лучше. Пример постараюсь выложить сегодня или завтра вечером/ночью.
|
Наверх
|
|
|
|
#4944 - Mon Apr 26 2010 11:00 AM
Re: Выставление ордеров через API TSLab
[Re: anothar]
|
journeyman
Registered: Thu Jan 07 2010
Записи: 85
|
Эх хорошо бы эти примеры потом еще в какую-нить отдельную тему, чтобы там были только они-без обсуждения и т.д.
|
Наверх
|
|
|
|
|
|