У вас не стоит Flash Player
Page 5 of 7 < 1 2 3 4 5 6 7 >
Настройки
#4948 - Mon Apr 26 2010 11:18 AM Re: Выставление ордеров через API TSLab [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
anothar, да не вопрос, создай тему, что-нибудь: Практические примеры использования API.

Спасибо за пример, будем мучить и ждём сжатие/разжатие.

Наверх
#4949 - Mon Apr 26 2010 11:25 AM Re: Выставление ордеров через API TSLab [Re: anothar]
ast Offline
addict

Registered: Tue Mar 23 2010
Записи: 415
Originally Posted By: anothar
Эх жалко нельзя посты редактировать.


Почему нельзя? можно. Кнопка "Edit".

И еще можно код записывать между тегами [ code ] и [ / code ] - без пробелов, тогда он будет лучше отображаться!

Наверх
#4980 - Mon Apr 26 2010 06:38 PM Re: Выставление ордеров через API TSLab [Re: ast]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Спасибо, ast. Я только заметил кнопочку edit-она оказывается у старых постов не появляется только у относительно новых( что в общем то логично). Craft, можно не только ждать но и предлагать, какую стратегию написать (желательно с четким описанием)- а то у меня иногда с фантазией сложно, а совсем уж белиберду писать не хочется.

Наверх
#4982 - Mon Apr 26 2010 07:16 PM Re: Выставление ордеров через API TSLab [Re: anothar]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: anothar
Спасибо, ast. Я только заметил кнопочку edit-она оказывается у старых постов не появляется только у относительно новых( что в общем то логично). Craft, можно не только ждать но и предлагать, какую стратегию написать (желательно с четким описанием)- а то у меня иногда с фантазией сложно, а совсем уж белиберду писать не хочется.


http://www.wealth-lab.com/Charting/Strategies/Default.aspx?id=vFcanP5D6YwLLKGFY5FyfA==
http://wl4.wealth-lab.com/cgi-bin/WealthLab.DLL/browsechartscripts
http://www2.wealth-lab.com/activetrader/ActiveTrader.htm

По этим линкам много идей, комбинируя которые можно получать вполне робастные стратегии.

Заказать вам одну можно ? :-)

Наверх
#4995 - Mon Apr 26 2010 10:04 PM Re: Выставление ордеров через API TSLab [Re: anothar]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: anothar
Craft, можно не только ждать но и предлагать, какую стратегию написать (желательно с четким описанием)- а то у меня иногда с фантазией сложно, а совсем уж белиберду писать не хочется.
anothar, сделай пожалуйста пример скрипта сжатия таймфрейма на основе имеющегося алгоритма Hi_Low, он хорошо всеми изучен и понятен, как используя сжатие (с 1 мин. на 15 мин.) получить максимум за желаемый период?

Наверх
#4997 - Mon Apr 26 2010 10:40 PM Re: Выставление ордеров через API TSLab [Re: anothar]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Originally Posted By: anothar
Спасибо, ast. Я только заметил кнопочку edit-она оказывается у старых постов не появляется только у относительно новых( что в общем то логично). Craft, можно не только ждать но и предлагать, какую стратегию написать (желательно с четким описанием)- а то у меня иногда с фантазией сложно, а совсем уж белиберду писать не хочется.

Доброго времени суток!
Вдруг будет интересно, идея трендовой стратегии:
1. Осцилятор TRIX(b)-TRIX(b)[i-1]. Период b настраивается один раз(в год, в два) для одного эммитента
2. Амплитуда колебаний первого осцилятора T(b) за период времени может макс и минимум
3.Покупка, продажа:
TRIX(n)-TRIX(n)[i-1] пересечение с его средней построенной по принципу (EMA1+EMA2+EMA3)/3(3 средних - для более тонкой настройки, что бы например поймать значение EMA 3,33, настраивается один раз для одного эмитента)
4. Период (n)=K*F(T(b)max/min). K - множитель константа для определенных эмитентов. Не знаю, понятно ли мысль излагаю? Суть в том, что замечена закономерность между амплитудами колебаний некоторых осциляторов и их "лучшими периодами", с точки зрения рынка.
5. Вход в позицию путем выставления заявки по цене, которая была в момент пересечения. Настраиваемое время ожидания, если не исполняется, по рынку. Переворот. Стопов по идее никаких не надо.
трудности - Отрицательные значения TRIX.
мысли - Возможно необходимо в множители добавить скоростные осциляторы.

Если кому-то интересно пишите мысли.


Отредактировано 777 (Mon Apr 26 2010 10:46 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#5000 - Mon Apr 26 2010 11:56 PM Re: Выставление ордеров через API TSLab [Re: 777]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Господа, давайте сначала с ордерами разберёмся.
anothar, почему при попытке запустить предложенный скрипт с Лимитными ордерами, выскакивает такая ошибка?

Элемент 'ВнешниСкрипт' содержит ошибку:
c:\Users\Пользователь\Documents\SharpDevelop Projects\Limit.cs(16,21) : error CS1955: Невызываемый член "System.Collections.Generic.ICollection<TSLab.Script.Bar>.Count" не может использоваться в качестве метода.

Наверх
#5010 - Tue Apr 27 2010 12:45 PM Re: Выставление ордеров через API TSLab [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Разобрался убрал () в int i = sec.Bars.Count() - 1; - заработало.
Заменил + на - и наоборот в условиях сделки (buyQueue[0].Price + 0.01) и увеличил отступ, чтобы ордера не исполнялись по лучшему условию, а разносились подальше от лучших бидов и асков.
anothar - респект и уважуха (жаль на этом форуме нельзя звёзды для рейтинга раздавать, от меня 5 была бы точно smile ), Лимитники выставляются на каждом баре предварительно отменяя прошлые, ast будет в восторге.

anothar, объясни мне тёмному, как такую штуку сделать для Стоп/Стоп-Лимит ордеров???

Наверх
#5011 - Tue Apr 27 2010 02:07 PM Re: Выставление ордеров через API TSLab [Re: Craft]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Craft, всегда пож.))) ТО есть нужен еще пример на Стоп/Стоп-Лимит? Ок. Будет, но не сразу)))

Наверх
#5021 - Tue Apr 27 2010 02:23 PM Re: Выставление ордеров через API TSLab [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Получилось увидеть в терминале при открытии бара Условную заявку (Стоп-Лимит):

Code:
		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.Growth, true, buyQueue[0].Price + 500, 1, "Long");
				//ставим лимитник на продажу-хотим ниже всех
				secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, buyQueue[0].Price - 500, 1, "Short");
			}
			else
			if (lotsBalance < 0)
			{
				//закрываем отрицательный баланс покупкой
				secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, buyQueue[0].Price + 500, -lotsBalance, "Long");
			}
			else
			{
				//закрываем положительный баланс лотов продажей
				secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, buyQueue[0].Price - 500, lotsBalance, "Short");
			}
		}
anothar, подскажи, что сделать чтобы сначала отменялись старые выставленные ордера (с Лимитниками, всё в порядке - отменились/выставились, а с Условными получается - +выставились новые/отменились старые)?

Появились вопросы к разработчикам, Nektodron, как сделать чтобы:
1. Выставляемые ордера были действительно условными, т. е. цена и стоп были не равны - проскальзывание в свойствах скрипта не реагирует?
2. Выставляемые ордера были чистыми Стоп-ами (поле Цена - пустым; поле Стоп - необходимое значение)?
3. Выставляемые ордера были не DAY, а GTC, чтобы ордеры можно было переносить через ночь?

Наверх
#5028 - Tue Apr 27 2010 05:03 PM Re: Выставление ордеров через API TSLab [Re: Craft]
ast Offline
addict

Registered: Tue Mar 23 2010
Записи: 415
Originally Posted By: Craft
Лимитники выставляются на каждом баре предварительно отменяя прошлые, ast будет в восторге.


Я еще не пробовал, некогда пока, но от таких слов - я уже в восторге!
Прибавляю свои 5 звездочек smile

Наверх
#5034 - Tue Apr 27 2010 05:53 PM Re: Выставление ордеров через API TSLab [Re: ast]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Мерси, ast. Craft со стопарями конечно есть еще один вопрос: как потом отлавливать лимитник, который выставится. Я в этом вопросе пока не разбирался-в идеале по полю Comment, но я совершенно не представляю, что в нем будет...
Пример с Hi-Low наверное будет нелучшим в плане иллюстрации-я не знаю зачем там сжатие, если можно просто выбрать другой фрейм?

Наверх
#5035 - Tue Apr 27 2010 06:03 PM Re: Выставление ордеров через API TSLab [Re: anothar]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
В поле Comment будет, что вы задали при выставлении заявки. В принципе, там можно хранить любую информацию.

Наверх
#5036 - Tue Apr 27 2010 06:05 PM Re: Выставление ордеров через API TSLab [Re: Nektodron]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Nektodron, а есть ли ограничения по полю Comment?

Наверх
#5039 - Tue Apr 27 2010 06:24 PM Re: Выставление ордеров через API TSLab [Re: anothar]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
нет, но они хранятся на клиенте, не на сервере.

Наверх
#5054 - Wed Apr 28 2010 12:48 AM Re: Выставление ордеров через API TSLab [Re: anothar]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: anothar
Пример с Hi-Low наверное будет нелучшим в плане иллюстрации-я не знаю зачем там сжатие, если можно просто выбрать другой фрейм?
anothar, за последнее время кое-что изменилось wink главный козырь в использовании сжатия был из-за непонимания механизма выставления Лимита и Стопа при открытии бара... Теперь всё становится яснее и нет необходимости в сжатии для получения необходимой оперативности - исполнения по факту. Но для развития кругозора, сжатие интересно, и для пользователя, вроде меня (с интуитивным, но безнавыковым пониманием языка С#), важен пример оформления строки целиком с использованием служебных слов (как образец) - СЖАТИЕ, ФУНКЦИЯ/МАКС/МИН/ИНДИКАТОР/ФОРМУЛА, ОЖИДАЕМЫЙ РЕЗУЛЬТАТ.

P. S., но не маловажное - как сделать чтобы в первую очередь отменялись старые выставленные ордеры (с Лимитниками, всё в порядке: отменились/выставились, а с Условными получается: + выставились новые/отменились старые)?

Наверх
#5055 - Wed Apr 28 2010 12:57 AM Re: Выставление ордеров через API TSLab [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Уважаемые разработчики, вопросы остаются открытыми:
1. Как сделать, чтобы выставляемые ордеры были действительно условными, т. е. цена и стоп были не равны - проскальзывание в свойствах скрипта не реагирует?
2. Как сделать, чтобы выставляемые ордеры были чистыми Стоп-ами (поле Цена - пустым; поле Стоп - необходимое значение)? Возможно этот вопрос вытекает из первого.
3. Как сделать, чтобы выставляемые ордеры были не DAY, а GTC - чтобы ордеры можно было переносить через ночь? Внесу подсказку - практичней, чтобы выставляемые ордеры по умолчанию были - GTC, т. к. интрадейщики внутри дня пятьдесят раз отменят Стопы и выставят поновой вне зависимости DAY это или GTC (уловите суть)!!! А для желающих перенести через ночь, GTC - единственный верный вариант.

Наверх
#5068 - Wed Apr 28 2010 11:02 AM Re: Выставление ордеров через API TSLab [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
1. Если не реагирует на проскальзывание в свойствах - это ошибка, я проверю.
2. Чистый стоп - это купить по рынку, когда сработает условие? Пока никак. Но я планирую на следующей неделе расширить API на предмет работы с заявками.
3. GTC - делать не будем, изначально заявки были сделаны GTC. Но смартком имеет одну неприятную особенность, если заявка с флагом GTC не смогла выставится (например денег не хватило), то на эта заявка будет выставляться на следующий день, если не смогла то еще на следующий. В Транзаке условные заявки переносятся нормально, лимитные теряются.

Наверх
#5071 - Wed Apr 28 2010 11:14 AM Re: Выставление ордеров через API TSLab [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Nektodron:
1. Ок, проверьте.
2. Спасибо.
3. Понимаю - логично, но это печально не иметь возможность переносить позу через ночь со Стопом...

Наверх
#5085 - Wed Apr 28 2010 12:47 PM Re: Выставление ордеров через API TSLab [Re: Craft]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Ну вот и пример, правда(как всегда) при его написании возник вопрос по сжатию - для определения конца дня. Вот сабж:http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=5084#Post5084. А вот код, применяющий сжатие:
Code:
public void Execute(IContext ctx, ISecurity sec)
        {
            //"сжимаем" до дневок-то есть получаем дневные данные
            ISecurity dailySec = sec.CompressTo(1440);
            //если мало баров-выходим, чтобы не было ошибки
            if (dailySec.Bars.Count < 1) return;
            //номер бара предыдущего дня
            int prevDateBarNum = 0;
            double dailyHigh;
            double dailyLow;
            DateTime curDate;
            for (int i = 0; i < sec.Bars.Count; i++)
            {
                //дата текущего бара
                curDate=sec.Bars[i].Date.Date;
                //получаем номер дневного бара текущего дня
                while (prevDateBarNum<dailySec.Bars.Count&&
                    dailySec.Bars[prevDateBarNum].Date.Date < curDate)
                    prevDateBarNum++;
                //тут возникает проблема: поскольку мы выставляем ордера на закрытии,
                //то на последнем баре дня нужно выставить заявку уже с 
                //учетом хая текущего дневного бара.
                if (((i + 1) < sec.Bars.Count && sec.Bars[i + 1].Date.Date == curDate)
                    || prevDateBarNum == dailySec.Bars.Count)
                {
                    //все нормально-у нас не последний бар текущего дня
                    prevDateBarNum--;
                }
                if (prevDateBarNum < 0)
                {
                    prevDateBarNum = 0;
                    continue;
                }
                //номер дневного бара предыдущего дня
                dailyHigh = dailySec.HighPrices[prevDateBarNum];
                dailyLow = dailySec.LowPrices[prevDateBarNum];
                //условие того, что сегодня открывалось не более одной позиции
                if (sec.Positions.LastPositionActive == null ||
                    sec.Positions.LastPositionActive.EntryBar.Date.Date != curDate ||
                    sec.Positions.LastPositionClosed == null
                    || sec.Positions.LastPositionClosed.EntryBar.Date.Date != curDate)
                {
                    bool sell;
                    bool buy;
                    if(sec.Positions.LastPositionActive==null)
                    {
                        //если мы еще ни разу не делали сделок, то ставим двойную.
                        //предполагаем, что обе заявки в течение одного бара
                        //выполниться не смогут!
                        buy=true;
                        sell=true;
                    }
                    else
                    {
                        buy=sec.Positions.LastPositionActive.IsShort;
                        sell=sec.Positions.LastPositionActive.IsLong;
                    }
                    if (buy)
                        sec.Positions.BuyIfGreater(i + 1, 1, dailyHigh, "Long");
                    if(sell)
                        sec.Positions.SellIfLess(i+1,1,dailyLow,"Short");
                }
                
            }
        }

Наверх
Page 5 of 7 < 1 2 3 4 5 6 7 >


Moderator:  ViL, sar