У вас не стоит Flash Player
Page 1 of 3 1 2 3 >
Настройки
#4978 - Mon Apr 26 2010 06:27 PM Практические примеры API
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
В данной теме предлагаю выкладывать коды примеров для API. Обсуждение и предложения по примерам просьба приводить в этой теме: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=4273&page=4, чтобы здесь оставались только примеры!

Наверх
#4979 - Mon Apr 26 2010 06:34 PM Re: Практические примеры API [Re: anothar]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Первый пример: код с NewOrder. В лаборатории код не будет работать.
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.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");
}


Наверх
#4981 - Mon Apr 26 2010 06:48 PM Re: Практические примеры API [Re: anothar]
Nektodron Offline

Carpal Tunnel

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

Наверх
#4992 - Mon Apr 26 2010 09:00 PM Re: Практические примеры API [Re: Nektodron]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
ммм я писал-у меня туго с фантазией. Есть предложения по улучшению?

Наверх
#5103 - Wed Apr 28 2010 07:12 PM Re: Практические примеры API [Re: anothar]
anothar Offline
journeyman

Registered: Thu Jan 07 2010
Записи: 85
Пример на сжатие/расжатие:
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");
                }
                
            }
        }


Наверх
#5304 - Mon May 03 2010 05:50 PM Re: Практические примеры API [Re: anothar]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Nektodron, можно для примера попросить разместить скрипт блока ТрейСтопАбс. на С#?

Наверх
#5618 - Tue May 11 2010 04:00 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Не очень хороший пример, он будет на каждом пересчете снимать старые заявки и выставлять новые, даже если цена та же.
Nektodron, подскажите как учесть/прописать было ли изменение цены?
Как при Интервал пересчёта = Сделка, определить запускался ли скрипт хотя бы раз на текущем баре?

Наверх
#5626 - Tue May 11 2010 06:38 PM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Вероятно никак, хотя правильнее определять закрыт ли уже последний бар, или еще изменяется...
Я думаю, нужно будет вынести серверное время в API. Это не сложно, я сделаю в ближайших билдах

Наверх
#5627 - Tue May 11 2010 06:46 PM Re: Практические примеры API [Re: Nektodron]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Хотя в таком режиме обычно последний бар всегда незакрыт

Наверх
#5629 - Tue May 11 2010 11:58 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Серверное время - гуд!!!
А по первому вопросу:
Originally Posted By: Nektodron
Не очень хороший пример, он будет на каждом пересчете снимать старые заявки и выставлять новые, даже если цена та же.
Nektodron, подскажите как учесть/прописать было ли изменение цены?

Наверх
#5630 - Wed May 12 2010 12:38 AM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
В последней версии появился метод ISecurity.GetTrades(int barNum)
можно смотреть сделки, менялась цена или нет

Наверх
#9726 - Mon Aug 09 2010 05:41 PM Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Уважаемые разработчики, можно попросить представить в качестве примера работающий алгоритм для выставления заявок реал-тайм. Имеющийся выше пример, полученный совместными усилиями форумчан, не отличается умением корректыно выставлять необходимое количество ордеров после перовой сделки (начинают подаваться ордера с "0" количеством).
Без возможности торговать реал-тайм, нет возможности использовать Интервал+сделка.

P. S. Может быть есть возможность переделать source.Positions.BuyIfGreater и source.Positions.SellIfLess с возможностью использования bar. При использовании bar алгоритмы корректно размещают ордера на истории, но при попыткае использовать в реальной торговле при bar ордера не выставляются, только при bar + 1.

Наверх
#9734 - Tue Aug 10 2010 10:26 AM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Да, проблема понятна. Нужно дополнительную проверку вставить. Сейчас, чтобы скрипт работал корректно выставьте параметр автооткрытие и автозакрытие 1 бар.

Наверх
#9750 - Tue Aug 10 2010 01:30 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Да, проблема понятна. Нужно дополнительную проверку вставить...
Nektodron, поможете с этим?

Originally Posted By: Nektodron
...Сейчас, чтобы скрипт работал корректно выставьте параметр автооткрытие и автозакрытие 1 бар.
Вставил, скрипт корректно работал до открытия позиции и последующего переворота по новому сигналу, после переворота опять появилась проблема с "0" кол-вом ордеров, которые пытаются выставляться по сигналам позиции до переворота.

P. S. И ещё один нюанс при выставлении стопов - к имеющимся в торговле добавляются новые и лишь после этого снимаются старые, а не наоборот, т. е. в торговле непродолжительное время присутствует два стопа - новый и старый.

Наверх
#9854 - Wed Aug 11 2010 05:24 PM Re: Практические примеры API [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Можно от разработчиков ждать помощи в вопросе реализации реал-тайма?

Наверх
#9866 - Wed Aug 11 2010 06:03 PM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
На счет стопов как-то странно. Может пришлете лог? т.к. всегда сначала заявка отменяется, потом выставляется новая.

Что такое проблема с нулевым количеством, как проявляется?

Наверх
#9930 - Thu Aug 12 2010 01:49 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Что такое проблема с нулевым количеством, как проявляется?
Nektodron, погоняйте скрипт из второго поста сверху заменив TSLab.DataSource.OrderType.Limit на TSLab.DataSource.OrderType.Growth/TSLab.DataSource.OrderType.Fall. Если логик этого скрипта не оптимальна, подскажите работающую схему, у Вас из опыта работы с программой, наверное, возникали такие задачи и возможно имеются примеры реализации.

Наверх
#10125 - Mon Aug 16 2010 03:10 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
На счет стопов как-то странно. Может пришлете лог? т.к. всегда сначала заявка отменяется, потом выставляется новая.
Что такое проблема с нулевым количеством, как проявляется?

Nektodron, на какой э-мэйл отправить логи?

Наверх
#10126 - Mon Aug 16 2010 03:12 PM Re: Практические примеры API [Re: Craft]
ZSE Offline
TSLab
veteran

Registered: Mon Feb 16 2009
Записи: 1366
contact@tslab.ru
с линком на топик в форуме

Наверх
#10131 - Mon Aug 16 2010 03:26 PM Re: Практические примеры API [Re: ZSE]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Вы не используете позиции, а выставляете заявки сами?

Наверх
#10133 - Mon Aug 16 2010 03:28 PM Re: Практические примеры API [Re: ZSE]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Ок, отправил.
Тема: Реал-тайм.

P. S. Отправил новый э-мэйл с темой: Реал-тайм 2.
В прошлом были более старые логи.


Отредактировано Craft (Mon Aug 16 2010 03:34 PM)

Наверх
#10134 - Mon Aug 16 2010 03:42 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Вы не используете позиции, а выставляете заявки сами?
Отправил нужный лог, предыдущие более старые.

Наверх
#10157 - Tue Aug 17 2010 12:00 AM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
я не про лог спрашивал.
алгоритм на чем основал, использует позиции или сам выставляет заявки с помощью ISecurityRt

Наверх
#10158 - Tue Aug 17 2010 12:55 AM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Концептуально алгоритм работает, так (за основу раздела "//Торговля" взяты примеры приведённые выше в теме):
Code:
using System.Collections.Generic;										
using TSLab.Script;										
using TSLab.Script.Handlers;										
using TSLab.Script.Optimization;										
using TSLab.Script.Helpers;										
using TSLab.Script.Realtime;										
										
namespace TSLab.Samples										
{										
	public class Final : IExternalScript									
	{									
		public …
		public virtual void Execute(IContext ctx, ISecurity sec)								
		{								
			var …						
			IList<double> …
			{			
				int barsCount = sec.Bars.Count;
				for (int i = 50; (i < barsCount); i++)
					
				{							
					if …						
					else …
					{						
						BT = …;					
						ST = …;
					}
	
				}
			}
			// Торговля.
			if (!sec.Positions.IsRealtime) return;
			{
				int i = sec.Bars.Count - 1;							
				if (i < 0) return;
				//текущая позиция. если больше нуля-в лонге. меньше нуля-в шорте					
				double lotsBalance = 0;					
				//пробегаемся по всем исполненным ордерам. необходимо текущее число лотов					
				foreach (IOrder order in secRt.Orders)					
				//Проверка что мы на этом баре не ставили заявки!!!					
				if (order.Date >= sec.Bars[i].Date) return;						
				else						
				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, BT, Contracts, "LE");				
					//ставим стоп-лимит на селл				
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, ST, Contracts, "SE");				
				}					
				else					
				if (lotsBalance < 0)					
				{					
					//закрываем отрицательный баланс покупкой				
					secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, BT, -lotsBalance + Contracts, "SXLE");				
					{				
						//если есть промежуточный профит закрываем nn контрактов			
						if (sec.LowPrices[i] <= sec.Positions.LastPositionActive.EntryPrice - OtskokS)
						secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, sec.Positions.LastPositionActive.EntryPrice - buS, nn, "SXTP");			
					}				
				}					
				else					
				{					
					//закрываем положительный баланс лотов продажей				
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, ST, lotsBalance - Contracts, "LXSE");				
					{				
						//если есть промежуточный профит закрываем nn контрактов			
						if (sec.HighPrices[i] >= sec.Positions.LastPositionActive.EntryPrice + OtskokL)
						secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, sec.Positions.LastPositionActive.EntryPrice + buL, nn, "LXTP");			
					}				
				}
			}							
		}								
	}									
 }
Прошу помощи, как довести алгоритм до робастного состояния. Из-за скудности навыков программирования, буду признателен, если внесёте исправления в раздел "//Торговля", т. к. боюсь не все замечания смогу воспринять правильно.

Наверх
#10169 - Tue Aug 17 2010 09:50 AM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Алгоритм работать не будет. Я уже вам писал, что нельзя смешивать ручное управление заявками и позиции. Либо то, либо другое.
sec.Positions.LastPositionActive - это использовать нельзя.

Наверх
#10196 - Tue Aug 17 2010 12:09 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Алгоритм работать не будет. Я уже вам писал, что нельзя смешивать ручное управление заявками и позиции. Либо то, либо другое.
sec.Positions.LastPositionActive - это использовать нельзя.
Nektodron, подскажите, что нужно использовать вместо sec.Positions.LastPositionActive, чтобы определить цену открытия позиции?
Как оформить раздел "//Торговля", чтобы при достижении определённого уровня профита, часть контрактов открытой позиции могла быть закрыта в безубыток при неблагоприятном движении цены?

Наверх
#10199 - Tue Aug 17 2010 12:40 PM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492

Наверх
#10210 - Tue Aug 17 2010 02:16 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Nektodron, помогите довести скрипт до робастности, надеюсь, пригодится ни одному мне пример использования реал-тайм с возможностью фиксации части прибыли/позиции.
Вот на что хватила интуитивных навыков программирования с включением подсказанного выше Вами кода:
Code:
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;
using TSLab.Script.Realtime;

namespace TSLab.Samples
{
	public class Final : IExternalScript
	{
		public …
		
		public virtual void Execute(IContext ctx, ISecurity sec, ISecurityRt rtSec, out double curQty, out double curPrice)
		{
			var …
			
			IList<double> …
			
			{
				int barsCount = sec.Bars.Count;
				for (int i = 50; (i < barsCount); i++)
				{
					if …
					else …
					{
						BT = …
						ST = …
					}
				}
			}
			// Торговля.
			if (!sec.Positions.IsRealtime) return;
			{
				int i = sec.Bars.Count - 1;
				if (i < 0) return;
				curQty = 0;
				curPrice = 0;
				if (rtSec != null)
				{
					var orders = rtSec.Orders.OrderBy(ord => ord.Date);
					foreach (var order in orders)
					{
						if (order.IsExecuted)
						{
							int bs = (order.IsBuy ? 1 : -1);
							double qty = order.Quantity * bs;
							double price = order.Price;
							double newQty = curQty + qty;
							bool isGrowPos = Math.Abs(newQty) > Math.Abs(curQty);
							if (isGrowPos)
							{
								curPrice = newQty == 0 ? 0 : (curQty*curPrice + qty*price)/newQty;
							}
							curQty = newQty;
						}
					}
				}
				curPrice = curQty == 0 ? 0 : curPrice;
				
				//текущая позиция. если больше нуля-в лонге. меньше нуля-в шорте
				double lotsBalance = 0;
				//пробегаемся по всем исполненным ордерам. необходимо текущее число лотов
				foreach (IOrder order in secRt.Orders)
				//Проверка что мы на этом баре не ставили заявки!!!
				if (order.Date >= sec.Bars[i].Date) return;
				else
				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, BT, Contracts, "LE");
					//ставим стоп-лимит на селл				
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, ST, Contracts, "SE");
				}
				else
				if (lotsBalance < 0)
				{
					//закрываем отрицательный баланс покупкой
					secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, BT, -lotsBalance + Contracts, "SXLE");
					{
						//если есть промежуточный профит закрываем nn контрактов
						if (sec.LowPrices[i] <= price - OtskokS)
						secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, price - buS, nn, "SXTP");
					}
				}
				else
				{
					//закрываем положительный баланс лотов продажей
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, ST, lotsBalance - Contracts, "LXSE");
					{
						//если есть промежуточный профит закрываем nn контрактов
						if (sec.HighPrices[i] >= price + OtskokL)
						secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, price + buL, nn, "LXTP");
					}
				}
			}
		}
	}
}
При компиляции выдаёт ошибку:
'TSLab.Samples.Final' не реализует член интерфейса 'TSLab.Script.Handlers.IExternalScript.Execute(TSLab.Script.Handlers.IContext, TSLab.Script.ISecurity)' (CS0535) - C:\Users\Пользователь\Documents\SharpDevelop Projects\DT+AverRT\DT+AverRT\Properties\AssemblyInfo.cs:10,15

Наверх
#10256 - Tue Aug 17 2010 11:51 PM Re: Практические примеры API [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
2 месяца авансируя являюсь официальным пользователем вашего софта, не имея возможности осуществлять торговлю с желаемой степенью соотношения риск/доходность (промежуточная фиксация прибыли/позы) в надежде на помощь от разработчиков (честно сказать первый раз встречаю такое чуткое отношение к своим пользователям, до этого приходилось перечитывать форумы разработчиков Вэлса, Мульта и ТрейдСтейшн) в доведении алгоритма до разумных соотношений и применения его торговле.

Первоначально обращался за помощью в подветку Forums » Разработка МТС и торговля с ее помощью в системе TSLab » Создание алгоритма при помощи TSLab API » Статьи, примеры
1.
Originally Posted By: Craft
Laber, большое спасибо за проделанную работу, с большим интересом и пользой для себя изучаю этот раздел.
При создании алгоритма с использованием API, есть ещё один очень интересный/важный момент - исполнение ордеров риал-тайм, а не по закрытию бара. Не могли бы Вы для примера переделать алгоритм с использованием: TSLab.DataSource.OrderType.Growth и TSLab.DataSource.OrderType.Fall?
Очень прошу создать один пример с использованием этих команд.

2.
Originally Posted By: Craft
Laber, помогите плиз с риал-таймом, есть наработки, но они корявые, не хочу показывать чтобы не сбить Вас с оптимального пути - уверен у Вас получится практичней и продуманей.

3.
Originally Posted By: Craft
Конечно, Laber, Вы абсолютно правы, поэтому и попросил в ветке сделать одни пример:
http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211
Интересен/важен взгляд специалиста, сделайте пожалуйста один пример.

4.
Quote:
Laber, добрый день.
Уж, две недели прошло, нет новой информации относительно написания примера для реал-тайм?


Получал вежливые ответы:
1.
Originally Posted By: Laber
Интересно попробовать. Хотя я этим не пользовался...
Надо будет разобраться как это реализовать.

2.
Originally Posted By: Laber
В конечном счете для практической работы важен именно режим реального времени (риэл-тайм). Изготовление такого примера есть в планах, и с учетом Ваших пожеланий этот пункт будет иметь более высокий приоритет, можно ожидать его реализации в ближайшее время.

3.
Originally Posted By: Laber
Как только появится - будет опубликовано.

4.
Originally Posted By: Laber
Реал-тайм - это отдельная песня. В примерах показана логика системы, и упор делается на получение доходной стратегии. Техника работы с ТСлабом скорее всего обсуждается где-нибудь на форуме, на какой-нибудь специальной ветке.


Отчаявшись ждать помощи от Laber, по его совету (Техника работы с ТСлабом скорее всего обсуждается где-нибудь на форуме, на какой-нибудь специальной ветке.) прошу помощи в ветке Forums » Разработка МТС и торговля с ее помощью в системе TSLab » Создание алгоритма при помощи TSLab API » Практические примеры API.

Nektodron, можно ожидать помощи от разработчиков по доведению скрипта до робастного состояния???

Для Вас это дело 15 минут чтобы ткнуть носом неразумного, подсказать, помочь и забыть о проблемы, для меня - 2 меся авансовых надежд.

Наверх
#10259 - Wed Aug 18 2010 01:10 AM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Вы задаете вопросы, мы по мере сил стараемся на них ответить.
Писать код за вас у нас нет желания.
Мы не благотворительная организация.
На все ваши вопросы даются ответы, то что у вас не хватает квалификации именно в C# - это другой вопрос, мы это по моему уже обсуждали. Другие-то разбираются.

Какие пути решения ?
1. Разбираться дальше с матчастью.
2. Прислать нам ТЗ на contact@tslab.ru. Мы согласуем сроки и деньги. Реализуем.
Такая форма общения нами практикуется. Есть спрос.
3. Возможны персональные занятия по 1-2 часа в день в течении месяца. Skype. Webex. Шарится десктоп и идет общение.
Цена за обучение договорная. Пишите contact@tslab.ru. Обсудим.

Как видите при желании все решаемо.

Что касаемо Лабера, человек решает поставленные задачи. Как дело дойдет до примера, он будет сделан.

Наверх
#10272 - Wed Aug 18 2010 10:49 AM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
andy, Вы меня заинтриговали, составить ТЗ на пример от разработчиков скрипта с исполнением торговых приказов реал-тайм?
С радостью сейчас отправлю на contact@tslab.ru, мне очень интересно сколько по времени займёт согласования сроков и цена за 15 мин. практического труда специалиста для нужд пользователей.

Наверх
#10274 - Wed Aug 18 2010 11:05 AM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: Craft
andy, Вы меня заинтриговали, составить ТЗ на пример от разработчиков скрипта с исполнением торговых приказов реал-тайм?
С радостью сейчас отправлю на contact@tslab.ru, мне очень интересно сколько по времени займёт согласования сроков и цена за 15 мин. практического труда специалиста для нужд пользователей.


Сформулируйте развернутое ТЗ, какие вопросы вы бы хотели осветить.
Выложите сюда. Мы обсудим. Утвердим.
Далее Лабер сделает, при условии что это пример, а не готовый комбайн на пару дней работы по кодингу :-).
Мы проверим и выложим как пример.

Наверх
#10275 - Wed Aug 18 2010 11:16 AM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Вот текст из отправленного письма на contact@tslab.ru

Добрый день, дорогие разработчики программы автоматической торговли TSLab.

Прошу согласовать сроки и деньги по написанию примера торговли реал-тайм через вашу программу.
В качестве ТЗ прошу использовать Модификацию скрипта Hi-Lo по данному адресу:
http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211

В какие сроки и сколько денег будут стоить - создание примера работы для данного скрипта через реал-тайм?

С уважением,
Юрий

Наверх
#10276 - Wed Aug 18 2010 11:35 AM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: Craft
Вот текст из отправленного письма на contact@tslab.ru

Добрый день, дорогие разработчики программы автоматической торговли TSLab.

Прошу согласовать сроки и деньги по написанию примера торговли реал-тайм через вашу программу.
В качестве ТЗ прошу использовать Модификацию скрипта Hi-Lo по данному адресу:
http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211

В какие сроки и сколько денег будут стоить - создание примера работы для данного скрипта через реал-тайм?

С уважением,
Юрий


Здорово. Четкое ТЗ то где ?

Наверх
#10277 - Wed Aug 18 2010 11:43 AM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Техническое задание, следующее:

1. Создать пример для Модификации скрипта Hi-Lo с исполнением ордеров реал-тайм, т. е. создать пример скрипта с исполнением ордеров в разделе "//Торговля" ни как сейчас i+1, а с использованием ордеров реал-тайм.
2. Частичное закрытие позиции скользящим стопом (очень важно с т. з. учёта цены исполнения открытой позиции и учёта частично закрытых и оставшихся оредров).
3. Пример должен содержать использование стопов (открытие и переворот позиции с переносом стопа в случае не исполнения на следующий бар) и маркетов (частичное закрытие скользящим стопом).

Задача примера скрипта с использованием исполнения ордеров реал-тайм, продемонстрировать клиентам на примере, как можно больше возможностей программы TSLab по реал-тайму.

Наверх
#10279 - Wed Aug 18 2010 12:00 PM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: Craft
Техническое задание, следующее:

1. Создать пример для Модификации скрипта Hi-Lo с исполнением ордеров реал-тайм, т. е. создать пример скрипта с исполнением ордеров в разделе "//Торговля" ни как сейчас i+1, а с использованием ордеров реал-тайм.


Еще раз.
ТЗ где ?

Где четко описано условия входа, условия выхода ( тут возможно придираюсь, т.к. понятно что есть Hi-Lo, но будем последовательны до конца ). Необходима четкая постановка задачи программисту. Что есть в Вашем понимании =а с использованием ордеров реал-тайм=. Как должны вести себя заявки-сделки. Нюансы. Что вам именно необходимо.

Наверх
#10280 - Wed Aug 18 2010 12:09 PM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
andy, дополнил свой пост выше, с сигналами всё понятно, принципы и условия исполнения расписал, если вашими программистом будет что-то не понятно (а я уверен, что им всё понятно), задавайте вопросы распишу более подробно. Могу достать темплейт ТЗ из прошлой жизни и листов на 20 расписать, но суть от этого не изменится - заменить раздел //Торговля с приказов i+1 на реал-тайм.

Наверх
#10281 - Wed Aug 18 2010 12:20 PM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: Craft
Могу достать темплейт ТЗ из прошлой жизни и листов на 20 расписать, но суть от этого не изменится - заменить раздел //Торговля с приказов i+1 на реал-тайм.


Это лишнее.

Далее вопросы. Распишите.
1. Условия входа. Подробнее можно ? =открытие и переворот позиции с переносом стопа в случае не исполнения на следующий бар=
Весь алгоритм четко нужно описать. Как входим, как переворачиваемся. Какими заявками. Какие нюансы.
2. Условия ведения позиции. =Частичное закрытие позиции скользящим стопом= Что есть скользящий стоп ? Какой принцип его работы реализовать ? Частичное закрытие - что имеется ввиду ? Заявка имеет случайный обьем неисполнения ? Что делаем с невошедшим по сигналу остатком ? Убиваем или докупаем ?
3. Условия закрытия позиции.

Ну и тд
Нужен четкий алгоритм действий со всеми нюансами.

ТЗ мне тоже за вас написать ? :-)


Отредактировано andy (Wed Aug 18 2010 12:21 PM)

Наверх
#10283 - Wed Aug 18 2010 12:41 PM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: andy
1. Условия входа. Подробнее можно ? =открытие и переворот позиции с переносом стопа в случае не исполнения на следующий бар= Весь алгоритм четко нужно описать. Как входим, как переворачиваемся.
Условия входа и переворота расписаны в логике скрипта в Теме High-Low (channel breakout) + скользящий стоп (Модификация скрипта Hi-Lo) по адресу: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211
Quote:
Какими заявками. Какие нюансы.
Вход и переворот через стоп ордера, при наступлении условия срабатывания скользящий стоп – маркет ордер с закрытием половины открытой позиции.
Quote:
2. Условия ведения позиции. =Частичное закрытие позиции скользящим стопом= Что есть скользящий стоп ? Какой принцип его работы реализовать ?
За пример берётся скрипт в Теме High-Low (channel breakout) + скользящий стоп (Модификация скрипта Hi-Lo) по адресу: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211
Quote:
Частичное закрытие - что имеется ввиду ? Заявка имеет случайный обьем неисполнения ?
закрытие половины открытой позиции (можно количеством контрактов задаваемых пользователем, как вам будет проще) маркет ордером
Quote:
Что делаем с невошедшим по сигналу остатком ? Убиваем или докупаем ?
Тоже, что и в скрипте из Темы High-Low (channel breakout) + скользящий стоп (Модификация скрипта Hi-Lo) по адресу: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211
Quote:
3. Условия закрытия позиции.
Те же, что и в скрипте из Темы High-Low (channel breakout) + скользящий стоп (Модификация скрипта Hi-Lo) по адресу: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211

Quote:
ТЗ мне тоже за вас написать ? :-)
andy, за основу берётся скрипт из Темы High-Low (channel breakout) + скользящий стоп (Модификация скрипта Hi-Lo) по адресу: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211 90% технических вопросов в нём уже предусмотрено, необходимо переделать скрипт на реал-тайм.

Наверх
#10286 - Wed Aug 18 2010 12:54 PM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Отлично.
Теперь весь этот винегрет из линков в виде четкого ТЗ в ворде можно собрать ?
1. Условия входа.
2. Ведение позиции.
3. Условия выхода.
Нюансы неисполнения заявки, превороты, лесенки и прочии бантики.

При наличии полного и ясного описания программер получит задание на разработку.

ps
Меня не будет до вечера. Думаю стоит это время потратить с пользой.

Наверх
#10288 - Wed Aug 18 2010 01:02 PM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
ТЗ на пример скрипта с использованием реал-тайм.

За основу взят скрипт из Темы High-Low (channel breakout) + скользящий стоп (Модификация скрипта Hi-Lo) по адресу: http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7211#Post7211 90% технических вопросов в нём уже предусмотрены.
Основная задача - переделать скрипт под исполнение ордеров реал-тайм. При составлении ТЗ для упрощения и лучшей наглядности были объеденены high1 и high2 - остался high1, аналогично с low1 и low2 – остаётся только low1, а также изменена для упрощения и наглядности формула вычисления скользящего стопа, который теперь больше соответствует закрытию части позиции по безубытку.

1. Условия входа. Подробнее можно ? =открытие и переворот позиции с переносом стопа в случае не исполнения на следующий бар=Весь алгоритм четко нужно описать. Как входим, как переворачиваемся. Какими заявками. Какие нюансы.
3. Условия закрытия позиции.
Ответ по пп. 1 и 3 объеденены, т. к. они взаимосвязаны и дополняют друг-друга.

Для лонга:
- Если нет активной длинной позиции, выставляем условный ордер на открытее новой длинной позиции на ценовом уровне high1[bar];
- Если есть активная длинная позиция и MaxPrice-Цена открытия позиции >=Otskok, рассчитываем значение LongStopPrice на закрытие выбранного пользователем количества контрактов (пользователь выбирает сам закрыть один, часть, половину или все контракты – это для использования в примере расчёта количества оставшихся контрактов в качестве примера), при котировке равной значению LongStopPrice выставляется рыночный ордер;
- Выставляем условный ордер на закрытие длинной позиции по значению low1[bar], если до это сработал рыночный ордер - закрываются оставшиеся контракты, если рыночный ордер не сработал – закрываются все открытые контракты;

Формулы расчёта значений:
IList<double> high1 = ctx.GetData("Highest", new[] {High1Period.ToString()},
delegate { return Series.Highest(source.HighPrices, High1Period); });
LongStopPrice = Цена открытия позиции + Безубыток;
IList<double> low1 = ctx.GetData("Lowest", new[] {Low1Period.ToString()},
delegate { return Series.Lowest(source.LowPrices, Low1Period); });
Otskok = задаётся пользователем;
Безубыток = задаётся пользователем;


Для шорта:
- Если нет активной короткой позиции, выставляем условный ордер на открытие новой короткой позиции на ценовом уровне low1[bar];
- Если есть активная короткая позиция и Цена открытия позиции - MinPrice >=Otskok, рассчитываем значение ShortStopPrice на закрытие выбранного пользователем количества контрактов (пользователь выбирает сам закрыть один, часть, половину или все контракты – это для использования в примере расчёта количества оставшихся контрактов в качестве примера), при котировке равной значению ShortStopPrice выставляется рыночный ордер;
- Выставляем условный ордер на закрытие короткой позиции по значению high1[bar], если до это сработал рыночный ордер - закрываются оставшиеся контракты, если рыночный ордер не сработал – закрываются все открытые контракты;

Формулы расчёта значений:
IList<double> low1 = ctx.GetData("Lowest", new[] {Low1Period.ToString()},
delegate { return Series.Lowest(source.LowPrices, Low1Period); });
ShortStopPrice = Цена открытия позиции - Безубыток;
IList<double> high1 = ctx.GetData("Highest", new[] {High1Period.ToString()},
delegate { return Series.Highest(source.HighPrices, High1Period); });
Otskok = задаётся пользователем;
Безубыток = задаётся пользователем;


2. Условия ведения позиции.
- Частичное закрытие - что имеется ввиду? Заявка имеет случайный обьем неисполнения? Что делаем с невошедшим по сигналу остатком? Убиваем или докупаем?

Частичное закрытие позиции - пользователь выбирает сам закрыть один, часть, половину или все контракты – это для использования в примере расчёта количества оставшихся контрактов. В качестве примера, очень, полезно последующим поколениям. Исполнение ордера по маркету.

- Что есть скользящий стоп? Какой принцип его работы реализовать?
Для наглядности формула вычисления скользящего стопа была изменена, предлагается закрывать часть позиции по безубытку – это для использования в примере цены открытия позиции, что тоже очень полезно для последующих поколений.

Резюме:
Алгоритм упрощён для наглядности и простоты реализации со стороны разработчиков и в тоже время позволит пользователям увидеть пример, в котором кроме отработки торговых сигналов в реал-тайме с использованием ордеров Стоп и Маркет (пример исполнения маркета один раз при возможном множественном срабатывании условия сигнала, тоже очень важен и необходим в примере), присутствует расчёт количества контрактов/акций и определение цены открытия позиции, что, не сомневаюсь, будет многим полезно при адаптации своих скриптов под реал-тайм.

P. S. В прикреплённом файле ТЗ в ворде.

P. P. S. На написание ТЗ с последующей его практической реализации для пользвоателей разработчиками меня подвигли, Вы - andy. Я был готов удовлетворится скромной помощью в исправлении ошибки из поста http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=10210#Post10210 и доведении этого алгоритма до робастного состояния и использования его в качестве примера другими, идущими тем же тернистым путём познания, что и я сейчас.


Attachments
ТЗ на пример скрипта с использованием реал-тайм.docx (520 downloads)



Отредактировано Craft (Thu Aug 19 2010 01:35 PM)

Наверх
#10309 - Wed Aug 18 2010 10:27 PM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Вечер добрый,

Спасибо за материал.

Завтра проговорим это внутри у себя и я скажу что-то более конкретное по судьбе этого вопроса.

Возможно будут дополнительные вопросы и возможно появятся вопросы во время реализации.

Наверх
#10314 - Wed Aug 18 2010 11:26 PM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
andy, спасибо за готовность идти на встречу пользователям.

Ждём результатов обсуждения внутри коллектива.

Если посчитает возможным сделать один пример реализации использования реал-тайм в торговле для пользователей, буду рад ответить на дополнительные вопросы и надеюсь на участие других форумчан.

Наверх
#10318 - Thu Aug 19 2010 08:20 AM Re: Практические примеры API [Re: Craft]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Originally Posted By: Craft
andy, спасибо за готовность идти на встречу пользователям.

Ждём результатов обсуждения внутри коллектива.

Если посчитает возможным сделать один пример реализации использования реал-тайм в торговле для пользователей, буду рад ответить на дополнительные вопросы и надеюсь на участие других форумчан.

Уважаемые, поясните пожалуйста какой смысл здесь вкладывается в понятие "реал-тайм" ?
Ведь не в "виртуал-тайм" остальные работают? Все здесь и сейчас..

Наверх
#10349 - Thu Aug 19 2010 01:01 PM Re: Практические примеры API [Re: usas]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: usas
Уважаемые, поясните пожалуйста какой смысл здесь вкладывается в понятие "реал-тайм" ?
Выставление заявки реал-тайм по факту исполнения сигналу, а не по закрытию бара.
Originally Posted By: usas
Ведь не в "виртуал-тайм" остальные работают? Все здесь и сейчас..
А у вас заявки исполняются одмоментно с появлением сигнала или по закрытию/открытию бара?

Наверх
#10350 - Thu Aug 19 2010 01:05 PM Re: Практические примеры API [Re: Craft]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
andy, есть результаты относительно обсуждения ТЗ внутри коллектива?

Наверх
#10355 - Thu Aug 19 2010 01:48 PM Re: Практические примеры API [Re: Craft]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Originally Posted By: Craft Выставление заявки реал-тайм по факту исполнения сигналу, а не по закрытию бара.
[quote=usas
Ведь не в "виртуал-тайм" остальные работают? Все здесь и сейчас..
А у вас заявки исполняются одмоментно с появлением сигнала или по закрытию/открытию бара? [/quote]
Если "по рынку", то выставление/исполнение можно считать одним понятием и тогда по объяснению Н-дрона где-то здесь раньше происходит это одномоментно на закрытии предыдущего бара и открытии следующего..
Я так понял..

Наверх
#10365 - Thu Aug 19 2010 03:24 PM Re: Практические примеры API [Re: usas]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: usas
Если "по рынку", то выставление/исполнение можно считать одним понятием и тогда по объяснению Н-дрона где-то здесь раньше происходит это одномоментно на закрытии предыдущего бара и открытии следующего..
Я так понял..
Вот, на закрытии бара, а при торговле реал-тайм, заявка исполняется по факту появления сигнала внутри бара.

Наверх
#10366 - Thu Aug 19 2010 03:58 PM Re: Практические примеры API [Re: Craft]
profit Offline
Pooh-Bah

Registered: Wed Jan 13 2010
Записи: 1835
Давно хочется такой вариант выставления заявки практически с первых шагов это пытались реализовать.
_________________________
Делаю простые вещи.

Наверх
#10371 - Thu Aug 19 2010 04:57 PM Re: Практические примеры API [Re: Craft]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: Craft
andy, есть результаты относительно обсуждения ТЗ внутри коллектива?


Craft приветствую !

Будет реализован пример, демонстрирующий те элементы, о которых было упомянуто в обсуждении, а именно:

1. работа в режиме реальных торгов (реал-тайм)
2. отработка условных и рыночных заявок
3. контроль текущей позиции
4. механика работы с дробными позициями, то есть не «на все», а заданными частями
5. реализация стоп-лосс
В качестве базового алгоритма будет использован Hi-Low (пробой канала).

Наверх
#10375 - Thu Aug 19 2010 05:18 PM Re: Практические примеры API [Re: andy]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Спасибо вам, други - это именно то с чем хотелось бы научиться работать (пожалуйста, включите в пример возможность работы с ценой открытия позиции, к примеру при реализации стоп-лосс (или как вам удобно) - если цена открытия +/- предусмотренный убыток, тогда стоп-лосс).
Когда можно будет ожидать пример?

Наверх
#10389 - Thu Aug 19 2010 07:19 PM Re: Практические примеры API [Re: Craft]
uprav Offline
addict

Registered: Thu Jan 14 2010
Записи: 594
Originally Posted By: Craft
Originally Posted By: usas
Уважаемые, поясните пожалуйста какой смысл здесь вкладывается в понятие "реал-тайм" ?
Выставление заявки реал-тайм по факту исполнения сигналу, а не по закрытию бара.
Originally Posted By: usas
Ведь не в "виртуал-тайм" остальные работают? Все здесь и сейчас..
А у вас заявки исполняются одмоментно с появлением сигнала или по закрытию/открытию бара?

Я наверно что то не понимаю, но если выставить интервал пересчёта "сделка" (на достаточно ликвидном рынке), разве заявка не выставится внутри бара, если кол-во сделок и пересчётов внутри бара будет много?
_________________________


Наверх
#10394 - Thu Aug 19 2010 08:22 PM Re: Практические примеры API [Re: uprav]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: uprav
Я наверно что то не понимаю, но если выставить интервал пересчёта "сделка" (на достаточно ликвидном рынке), разве заявка не выставится внутри бара, если кол-во сделок и пересчётов внутри бара будет много?
uprav, а Вы пробовали выставить условный ордер в режиме Интервал пересчета "Сделка"?
Есть ещё ньансы с исполнение ордеров на i-том баре, либо как через визуальный редактор на i+1.

Наверх
#11358 - Tue Aug 31 2010 04:20 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Алгоритм работать не будет. Я уже вам писал, что нельзя смешивать ручное управление заявками и позиции. Либо то, либо другое.
sec.Positions.LastPositionActive - это использовать нельзя.
Nektodron, вернёмся к нашим баранам. Дело не в sec.Positions.LastPositionActive, встроил предложенный Вами метод определения значения/цены открытой позиции и кол-ва контрактов (пробовал подставлять значения lotsBalance и curQty(вариант ниже)), но всё-равно после открытия позиции, на каждом баре вместо ордера на переворот (или частичное закрытие) в ТСлаб проходит сообщение: 11:15:30.00:Скрипт: RT2. Не могу создать заявку с нулевым количеством!

Прошу попробовать, как это работает:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;
using TSLab.Script.Realtime;

namespace TSLab.Samples
{
	public class Final : IExternalScript
	{
		public OptimProperty Contracts = new OptimProperty(2, 1, 1, 1);
		public OptimProperty OtskokL = new OptimProperty(5, 1, 1, 1);
		public OptimProperty buL = new OptimProperty(2, 1, 1, 1);
		public OptimProperty OtskokS = new OptimProperty(5, 1, 1, 1);
		public OptimProperty buS = new OptimProperty(2, 1, 1, 1);
		
		private double CalcCurrentPrice(ISecurityRt rtSec, out double curQty, out double curPrice)
		{
			curQty = 0;
			curPrice = 0;
			if (rtSec != null)
			{
				var orders = rtSec.Orders.OrderBy(ord => ord.Date);
				foreach (var order in orders)
				{
					if (order.IsExecuted)
					{
						int bs = (order.IsBuy ? 1 : -1);
						double qty = order.Quantity * bs;
						double price = order.Price;
						double newQty = curQty + qty;
						bool isGrowPos = Math.Abs(newQty) > Math.Abs(curQty);
						if (isGrowPos)
						{
							curPrice = newQty == 0 ? 0 : (curQty*curPrice + qty*price)/newQty;
						}
						curQty = newQty;
					}
				}
			}
			curPrice = curQty == 0 ? 0 : curPrice;
			return curPrice;
		}
		
		public virtual 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 curQty; // объявляем переменные
				double curPrice;
				CalcCurrentPrice(secRt, out curQty, out curPrice); // и вызываем метод				
				
				//текущая позиция. если больше нуля-в лонге. меньше нуля-в шорте
				double lotsBalance = 0;
				//пробегаемся по всем исполненным ордерам. необходимо текущее число лотов
				foreach (IOrder order in secRt.Orders)
				//Проверка что мы на этом баре не ставили заявки!!!
				if (order.Date >= sec.Bars[i].Date) return;
				else
				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, Contracts, "LE");
					//ставим стоп-лимит на селл
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, sellQueue[0].Price, Contracts, "SE");
				}
				else
				if (lotsBalance < 0)
				{
					//закрываем отрицательный баланс покупкой
					secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, buyQueue[0].Price+10, -curQty + Contracts, "SXLE");
					{
					
						//если есть промежуточный профит закрываем один контракт
						if (sec.LowPrices[i] <= curPrice - OtskokS)
						secRt.NewOrder(TSLab.DataSource.OrderType.Growth, true, curPrice - buS, 1, "SXTP");
					}
				}
				else
				{
					//закрываем положительный баланс лотов продажей
					secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, sellQueue[0].Price-10, curQty - Contracts, "LXSE");
					{
						//если есть промежуточный профит закрываем один контракт
						if (sec.HighPrices[i] >= curPrice + OtskokL)
						secRt.NewOrder(TSLab.DataSource.OrderType.Fall, false, curPrice + buL, 1, "LXTP");
					}
				}
			}
		}
	}
}

Какие ещё есть идеи?

P. S. Ещё момент, сначала выставляются новые ордера, потом отменяются старые.

Наверх
#11360 - Tue Aug 31 2010 04:56 PM Re: Практические примеры API [Re: Craft]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492

Наверх
#11374 - Tue Aug 31 2010 06:39 PM Re: Практические примеры API [Re: Nektodron]
Craft Offline
enthusiast

Registered: Thu Jan 21 2010
Записи: 319
Originally Posted By: Nektodron
Премного благодарен после, почти, месячного ожидания (http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=9726#Post9726), а как на счёт - P. S.

Наверх
#25691 - Thu Apr 14 2011 03:12 AM Re: Практические примеры API [Re: Craft]
VDV Offline
newbie

Registered: Wed Apr 13 2011
Записи: 32
Originally Posted By: Craft
Originally Posted By: Nektodron
Алгоритм работать не будет. Я уже вам писал, что нельзя смешивать ручное управление заявками и позиции. Либо то, либо другое.
sec.Positions.LastPositionActive - это использовать нельзя.
Nektodron, вернёмся к нашим баранам. Дело не в sec.Positions.LastPositionActive, встроил предложенный Вами метод определения значения/цены открытой позиции и кол-ва контрактов (пробовал подставлять значения lotsBalance и curQty(вариант ниже)), но всё-равно после открытия позиции, на каждом баре вместо ордера на переворот (или частичное закрытие) в ТСлаб проходит сообщение: 11:15:30.00:Скрипт: RT2. Не могу создать заявку с нулевым количеством!

Прошу попробовать, как это работает:
Code:
...
		
		private double CalcCurrentPrice(ISecurityRt rtSec, out double curQty, out double curPrice)
		{
			curQty = 0;
			curPrice = 0;
			if (rtSec != null)
			{
				var orders = rtSec.Orders.OrderBy(ord => ord.Date);
				foreach (var order in orders)
				{
					if (order.IsExecuted)
					{
						int bs = (order.IsBuy ? 1 : -1);
						double qty = order.Quantity * bs;
						double price = order.Price;
						double newQty = curQty + qty;
						bool isGrowPos = Math.Abs(newQty) > Math.Abs(curQty);
						if (isGrowPos)
						{
							curPrice = newQty == 0 ? 0 : (curQty*curPrice + qty*price)/newQty;
						}
						curQty = newQty;
					}
				}
			}
			curPrice = curQty == 0 ? 0 : curPrice;
			return curPrice;
		}
		

...
				CalcCurrentPrice(secRt, out curQty, out curPrice); // и вызываем метод				
				
...


Какие ещё есть идеи?

P. S. Ещё момент, сначала выставляются новые ордера, потом отменяются старые.


Может сообщение "не могу выставить заявку с нулевым значением появляется потому что в методе CalcCurrentPrice () после строки
return curPrice; //возвращаем значение текущей цены
забыли добавить строку
return curQty //возвращаем значение текущего количества

и как результат когда вызываем метод, то получаем правильное значение цены и всегда нулевое значение количества???

Или причина в чем-то другом?
_________________________
Телеграм - канал для алготрейдеров: t-do.ru/TradingLaboratory

Наверх
#25692 - Thu Apr 14 2011 03:17 AM Re: Практические примеры API [Re: Nektodron]
VDV Offline
newbie

Registered: Wed Apr 13 2011
Записи: 32
Originally Posted By: Nektodron
Вероятно никак, хотя правильнее определять закрыт ли уже последний бар, или еще изменяется...
Я думаю, нужно будет вынести серверное время в API. Это не сложно, я сделаю в ближайших билдах


Скажите, а серверное время в API уже внесено? Дайте, плз., ссылочку где об этом можно почитать.
_________________________
Телеграм - канал для алготрейдеров: t-do.ru/TradingLaboratory

Наверх
#25693 - Thu Apr 14 2011 03:31 AM Re: Практические примеры API [Re: andy]
VDV Offline
newbie

Registered: Wed Apr 13 2011
Записи: 32
Originally Posted By: andy
Originally Posted By: Craft
andy, есть результаты относительно обсуждения ТЗ внутри коллектива?


Craft приветствую !

Будет реализован пример, демонстрирующий те элементы, о которых было упомянуто в обсуждении, а именно:

1. работа в режиме реальных торгов (реал-тайм)
2. отработка условных и рыночных заявок
3. контроль текущей позиции
4. механика работы с дробными позициями, то есть не «на все», а заданными частями
5. реализация стоп-лосс
В качестве базового алгоритма будет использован Hi-Low (пробой канала).


Дайте, плз., ссылку на этот пример - очень хочется посмотреть... Или ещё не был реализован?
_________________________
Телеграм - канал для алготрейдеров: t-do.ru/TradingLaboratory

Наверх
#25703 - Thu Apr 14 2011 10:30 AM Re: Практические примеры API [Re: VDV]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8136

Наверх
Page 1 of 3 1 2 3 >


Moderator:  ViL, sar