У вас не стоит Flash Player
Настройки
#7706 - Fri Jul 02 2010 05:43 PM Стратегия Supertrend
Laber Offline
journeyman

Registered: Mon Jun 28 2010
Записи: 59
По просьбе одного из участников форума была реализована стратегия Супертренд (в том незамысловатом варианте, как можно было понять из скрипта на MQL). Суть ее проста как три копейки. Граница канала подтягивается за ценой (по аналлогии со скользящим стопом) на расстоянии, вычисляемом через ATR. При движении цены в обратную сторону граница остается на месте, и при ее пересечении происходит переворот позиции (типа Stop And Reverse).



Вот так эта система выглядит в коде:

Ссылка на файл: http://www.tslab.ru/ubb/ubbthreads.php?u...trend_script.cs

Code:
/*================================================================================
 * Стратегия: Supertrend
 * Платформа: TSLab версия 1.1.7.0
 * Дата создания: 02.07.2010
 * Реализовано: Laber
 *================================================================================*/
 using System; 
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;

namespace TSLab.Supertrend
{

	//================================================================================
	public class Supertrend : IExternalScript
	{
		// используем переменные-флаги для сигналов
		public bool bBuy; // флаг сигнала открытия длинной позиции
		public bool bSell;
		public bool bShort;
		public bool bCover;
		public IPosition LongPos, ShortPos;
		 
		//================================================================================
		// функция вычисления ATR (последовательность значений)
		// Period -  период скользящей средней для расчета ATR
		public IList<double> GenATR(ISecurity source, int Period)
		{
			double TrueRange; // значение "истинного диапазона"
			double vATR; // значение ATR для текущего бара

			// серия значений ATR
			IList<double> nATR = new List<double>(source.Bars.Count);

			TrueRange = source.HighPrices[0] - source.LowPrices[0];
			vATR = TrueRange;

			for (int bar = 0; bar < source.Bars.Count; bar++)
			{

				TrueRange = source.HighPrices[bar] - source.LowPrices[bar];
				if (bar > 0) 
				{
					if (source.LowPrices[bar] > source.ClosePrices[bar-1])
						TrueRange	= TrueRange + (source.LowPrices[bar] - source.ClosePrices[bar-1]);
					if (source.HighPrices[bar] < source.ClosePrices[bar-1])
						TrueRange	= TrueRange + (source.ClosePrices[bar-1] - source.HighPrices[bar]);
				}
				vATR = vATR + (TrueRange - vATR) / Period;
				//--------------------------------------------------------------------------------
				// добавление нового значения в последовательность
				nATR.Add(vATR);
			}
			return nATR;
		}
		
		//================================================================================
		// Параметры оптимизации
		public OptimProperty PeriodParam = new OptimProperty(20, 2, 20, 2);
		public OptimProperty MultiplierParam = new OptimProperty(9, 1, 10, 0.5);

		//================================================================================
		public virtual void Execute(IContext ctx, ISecurity source)
		{
			#region Variables
			int Period; // период расчета ATR
			double vATR; // значение ATR для текущего бара
			int Dir; // направление тренда (+1 вверх, -1 вниз)
			int PrevDir; // предыдущее направление тренда
			double Up; // значение верхней границы для текущего бара
			double Down; // значение нижней границы для текущего бара
			double Multiplier; // множитель
			
			double vTrend;
			double PrevUp, PrevDown;
			double Price; // цена закрытия текущего бара
			double AvgPrice; // средняя цена дл ятекущего бара
			
			// серия значений верхней границы
			IList<double> nHighRange = new List<double>(source.Bars.Count);
			// серия значений нижней границы
			IList<double> nLowRange = new List<double>(source.Bars.Count);
			// серия значений для фильтра тренда
			IList<double> nDir = new List<double>(source.Bars.Count);
			// серия значений индикатора тренда
			IList<double> nTrend = new List<double>(source.Bars.Count);
			#endregion
			//--------------------------------------------------------------------------------
			#region Init vars
			Dir = 0;
			Up = 0;
			Down = 0;
			 
			#endregion
			//--------------------------------------------------------------------------------
			#region Obtain parameters
			Period = PeriodParam;
			Multiplier = MultiplierParam;

			// серия значений ATR
			// кэширование с учетом параметра Period
			IList<double> nATR = ctx.GetData("ATR", new[] {Period.ToString()},
			delegate { return GenATR(source, Period); });

			#endregion
			//================================================================================
			#region основной цикл - проход по барам
			int barsCount = source.Bars.Count;
			vATR = source.ClosePrices[0];
			for (int bar = 0; bar < barsCount-1; bar++)
			{
				//--------------------------------------------------------------------------------
				#region calculate values
				Price = source.ClosePrices[bar];
				vATR = nATR[bar];
				vTrend = 0;

				PrevUp = Up;
				PrevDown = Down;
				PrevDir = Dir;

				AvgPrice = (source.HighPrices[bar] + source.LowPrices[bar]) / 2;
				Up = AvgPrice + Multiplier * vATR;
				Down = AvgPrice - Multiplier * vATR;
				
				if (Price > PrevUp) Dir = 1;
				if (Price < PrevDown) Dir = -1;
				
				if (Dir > 0 && Down < PrevDown) Down = PrevDown;
				if (Dir < 0 && Up > PrevUp) Up = PrevUp;

				if (Dir > 0 && PrevDir < 0) Down = AvgPrice - Multiplier * vATR;
				if (Dir < 0 && PrevDir > 0) Up = AvgPrice + Multiplier * vATR;
					
				if (Dir == 1) vTrend = Down;
				if (Dir == -1) vTrend = Up;
				

				#endregion
				//--------------------------------------------------------------------------------
				#region data series
				nHighRange.Add(Up);
				nLowRange.Add(Down);
				nATR.Add(vATR);
				nDir.Add(Dir);
				nTrend.Add(vTrend);
				
				#endregion
				//--------------------------------------------------------------------------------
				#region generate signals
				// сброс значений сигналов
				bBuy = false;
				bSell = false;
				bShort = false;
				bCover = false;
				
				// установка сигналов по условиям
				if (Dir > 0 && PrevDir <= 0)
				{
					bBuy = true;
					bCover = true;
				}
				if (Dir < 0 && PrevDir >= 0) 
				{
					bShort = true;
					bSell = true;
				}
				#endregion	
				//================================================================================
				#region execute signals
				//--------------------------------------------------------------------------------
				// выполнение сигналов для длинной позиции
				IPosition LongPos = source.Positions.GetLastActiveForSignal("LN");
				if (LongPos == null)
				{
					// Если нет активной длинной позиции
					if (bBuy)
					{
						// Если есть сигнал Buy, 
						// выдаем ордер на открыте новой длинной позиции.
						source.Positions.BuyAtMarket(bar+1, 1, "LN");
					}
				}
				else
				{
					// Если есть активная длинная позиция 
					if (bSell)
					{
						// Если есть сигнал Sell, 
						// выдаем ордер на закрыте длинной позиции.
						LongPos.CloseAtMarket(bar+1, "LX");
					}
				}
				//--------------------------------------------------------------------------------
				// выполнение сигналов для короткой позиции
				IPosition ShortPos = source.Positions.GetLastActiveForSignal("SN");
				if (ShortPos == null)
				{
					// Если нет активной короткой позиции
					if (bShort)
					{
						// Если есть сигнал Short
						// выдаем ордер на открыте новой короткой позиции.
						source.Positions.SellAtMarket(bar+1, 1, "SN");
			
					}
				}
				else
				{
					// Если есть активная короткая позиция, 
					if (bCover)
					{
						// Если есть сигнал Cover
						// выдаем ордер на закрыте короткой позиции.
						ShortPos.CloseAtMarket(bar+1, "SX");
					}
				}
				#endregion
			} 
			#endregion
			//================================================================================
			#region прорисовка графиков
			// Берем основную панель (Pane)
			IPane mainPane = ctx.First;
 
			// Отрисовка верхней и нижней границы условных прямоугольников 
			//mainPane.AddList("HighRange", nHighRange, ListStyles.LINE, 0x0000a0, LineStyles.DOT, PaneSides.RIGHT);
			//mainPane.AddList("LowRange", nLowRange, ListStyles.LINE, 0xa00000, LineStyles.DOT, PaneSides.RIGHT);

			mainPane.AddList("Trend Indicator", nTrend, ListStyles.LINE, 0xa000a0, LineStyles.DOT, PaneSides.RIGHT);
			
			// Создаем дополнительную панель для ATR.
			IPane ATRPane = ctx.CreatePane("ATR", 10, false, false);

			// Отрисовка графика ATR
			ATRPane.AddList(string.Format("ATR"), nATR, ListStyles.LINE,
			0x5050a0, LineStyles.SOLID, PaneSides.RIGHT);
			
			// Создаем дополнительную панель для филтра тренда.
			IPane FilterPane = ctx.CreatePane("Filtr", 10, false, false);

			// Отрисовка графика фильтра тренда
			FilterPane.AddList(string.Format("TREND"), nDir, ListStyles.HISTOHRAM_FILL,
			0x00ff00, LineStyles.SOLID, PaneSides.RIGHT);

			#endregion
			//--------------------------------------------------------------------------------
		}
	}
}




На графике отображены границы ценовых каналов:





Результаты тестирования стратегии.


Кривая капитала:




Отчет с результатами тестирования:





В прикрепленных файлах можно найти всю необходимую информацию по этой стратегии.


Attachments
chart.png (6395 downloads)
Description: сриншот графика с границами ценовых каналов

equity.png (5943 downloads)
Description: скриншот кривой капитала (доходности стратегии)

report.png (5865 downloads)
Description: скриншот отчета по результатам тестирования

supertrend_scheme.xml (782 downloads)
Description: блок-схема в xml-формате

supertrend_script.cs (1560 downloads)
Description: скрипт на C#




Отредактировано Laber (Fri Jul 02 2010 05:45 PM)

Наверх
#7708 - Fri Jul 02 2010 05:57 PM Re: Стратегия Supertrend [Re: Laber]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Все хорошо, работает..
Вопрос один - когда мы эти индикаторы будем иметь не в виде стратегии, а кубиком в библиотеке?..

Наверх
#7709 - Fri Jul 02 2010 06:02 PM Re: Стратегия Supertrend [Re: usas]
Laber Offline
journeyman

Registered: Mon Jun 28 2010
Записи: 59
Для этого мне бы надо разобраться как эти самые кубики делать.
А поскольку кубики внутри, то и вопрос к разработчикам.
Кстати, Энди уже давал ответ, типа со временем все будет.
Могу только отослать к тому же ответу.
По правде говоря, если уже скрипт на C# работает, зачем кубики?...

Наверх
#7713 - Fri Jul 02 2010 06:29 PM Re: Стратегия Supertrend [Re: Laber]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Originally Posted By: Laber


У Вас что-то проблемка с ATR/



Attachments
Отступ2.JPG (5443 downloads)



Отредактировано 777 (Fri Jul 02 2010 06:30 PM)
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#7714 - Fri Jul 02 2010 06:33 PM Re: Стратегия Supertrend [Re: Laber]
profit Offline
Pooh-Bah

Registered: Wed Jan 13 2010
Записи: 1835
Поддерживаю юса.Так трудно подправлять по своему усмотрению параметры.А к кубикам мы уже привыкли.Опять же хочется что то своё привинтить.У многих трейдеров физически нет времени изучать языки правописания потому как нужно торговать ,а это отнимает массу времени и сил.Очень благодарны многим людям на этом проекте которые улучшают работу трейдера своими знаниями и трудом.
_________________________
Делаю простые вещи.

Наверх
#7715 - Fri Jul 02 2010 06:35 PM Re: Стратегия Supertrend [Re: Laber]
777 Offline
Carpal Tunnel

Registered: Thu Apr 01 2010
Записи: 2564
Loc: г. Дзержинский
Originally Posted By: Laber
Для этого мне бы надо разобраться как эти самые кубики делать

Что-бы разобраться, в документации есть хороший пример, только он с ошибкой. Заодно может и документацию разработчикам поправите?
_________________________
«Существует 3 типа лжи: ложь, наглая ложь и статистика»
Дизраэли.

Наверх
#7716 - Fri Jul 02 2010 06:42 PM Re: Стратегия Supertrend [Re: profit]
profit Offline
Pooh-Bah

Registered: Wed Jan 13 2010
Записи: 1835
Я уже как то писал что профессия трейдер начинает расслаиваться,в частности по моему убеждению нужен трейдер который торгует и умеет это делать быстро и уверенно прежде всего сам,он должен управлять терминалом.Следующий сотрудник тоже трейдер должен заниматься оптимизацией систем и моделированием поставляя отточенные скрипты первому.Ну и наконец трейдер конструктор который в свою очередь должен как раз таки знать языки програмеров и разрабатывать,конструировать свежие идеи которые может моделировать и оптимизировать трейдер-аналитик назовём его.У нас пока три в одном,хотя движения на форуме есть в эту сторону,это радует.
_________________________
Делаю простые вещи.

Наверх
#7739 - Sat Jul 03 2010 07:58 AM Re: Стратегия Supertrend [Re: Laber]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Originally Posted By: Laber
Для этого мне бы надо разобраться как эти самые кубики делать.
А поскольку кубики внутри, то и вопрос к разработчикам.
Кстати, Энди уже давал ответ, типа со временем все будет.
Могу только отослать к тому же ответу.
По правде говоря, если уже скрипт на C# работает, зачем кубики?...

Так в конечном итоге нужен-то не скрипт, а индикатор в библиотеке визуального редактора ТС-лаб, который каждый использует по своему усмотрению.
Лабер, не посылайте нас к Энди или еще куда подальше, научитесь делать кубики, народ это оценит..

Наверх
#7744 - Sat Jul 03 2010 10:15 AM Re: Стратегия Supertrend [Re: usas]
profit Offline
Pooh-Bah

Registered: Wed Jan 13 2010
Записи: 1835
Мы любим играть с кубиками. grin
_________________________
Делаю простые вещи.

Наверх
#7759 - Sat Jul 03 2010 03:47 PM Re: Стратегия Supertrend [Re: usas]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: usas
Так в конечном итоге нужен-то не скрипт, а индикатор в библиотеке визуального редактора ТС-лаб, который каждый использует по своему усмотрению.
Лабер, не посылайте нас к Энди или еще куда подальше, научитесь делать кубики, народ это оценит..


Какие проблемы делать эти кубики самостоятельно ?
Все для этого есть.

Как это делать описано
http://www.tslab.ru/docs/online/index.html?connectapi.htm
http://www.tslab.ru/docs/online/index.html?newapiindicator.htm

Берете из готовых стратегий на C# код индикатора, делаете кубик.
Все.
Далее крутите в Визуальном редакторе как хотите.

Наверх
#7762 - Sat Jul 03 2010 04:34 PM Re: Стратегия Supertrend [Re: andy]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Открыл, посмотрел, ни хрена не понял..
Энди, программист и не программист по-разному смотрят на эти букавки-символы.
Не будьте снобом, дайте три файла, которые нужно положить в папку Handlers, чтобы получить три кубика-индикатора - NRTR,NRMA,Supertrend и благодарность наша будет безгранична в границах разумного...:-))
777-й, возможно для Вас это семечки, проявите солидарность.
Я мысленно уже вписал эти индикаторы в гениальный скрипт..:-))
Без шуток...

Наверх
#7765 - Sat Jul 03 2010 05:18 PM Re: Стратегия Supertrend [Re: usas]
Stanley Offline
enthusiast

Registered: Mon Jun 21 2010
Записи: 283
Простите за наивный вопрос.А как запускать такие скрипты?(не кубиками))

Наверх
#7766 - Sat Jul 03 2010 05:26 PM Re: Стратегия Supertrend [Re: usas]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: usas
Открыл, посмотрел, ни хрена не понял..
Энди, программист и не программист по-разному смотрят на эти букавки-символы.
Не будьте снобом, дайте три файла, которые нужно положить в папку Handlers, чтобы получить три кубика-индикатора - NRTR,NRMA,Supertrend и благодарность наша будет безгранична в границах разумного...:-))
777-й, возможно для Вас это семечки, проявите солидарность.
Я мысленно уже вписал эти индикаторы в гениальный скрипт..:-))
Без шуток...


Программист, что написал стратегию на C#, уже свою работу сделал.
Предлагаю вместо футбола уделить час времени и разобраться в материале.
Все описание для этого есть.
Для этого не надо быть программистом.

Повторюсь.
Когда будет много материала на C#, наиболее востребованные страгеии преведем на кубики.
Кому нужны кубики сию минуту, берет и делает это сам.
И давайте закроем на этом этот вопрос.

Наверх
#7767 - Sat Jul 03 2010 05:37 PM Re: Стратегия Supertrend [Re: Stanley]
uprav Offline
addict

Registered: Thu Jan 14 2010
Записи: 594
Originally Posted By: Stanley
Простите за наивный вопрос.А как запускать такие скрипты?(не кубиками))

1.С помощью блока "внешний скрипт".
2.Изменения в файл .cs, можно внести например в SharpDevelop. Ссылка и настройка его есть в справке.
_________________________


Наверх
#7768 - Sat Jul 03 2010 05:38 PM Re: Стратегия Supertrend [Re: Stanley]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: Stanley
Простите за наивный вопрос.А как запускать такие скрипты?(не кубиками))


Если долго, то читаем документацию :-)

Если быстро, то так
1. Качаете supertrend_scheme.xml и вставляете в TSLab.
2. Качаете supertrend_script.cs и в лабератории в блоке внешний скрипт указываете место где он находится.

Это уже было тут
http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7262#Post7262

Наверх
#7769 - Sat Jul 03 2010 06:39 PM Re: Стратегия Supertrend [Re: andy]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Originally Posted By: andy
Originally Posted By: usas
Открыл, посмотрел, ни хрена не понял..
Энди, программист и не программист по-разному смотрят на эти букавки-символы.
Не будьте снобом, дайте три файла, которые нужно положить в папку Handlers, чтобы получить три кубика-индикатора - NRTR,NRMA,Supertrend и благодарность наша будет безгранична в границах разумного...:-))
777-й, возможно для Вас это семечки, проявите солидарность.
Я мысленно уже вписал эти индикаторы в гениальный скрипт..:-))
Без шуток...


Программист, что написал стратегию на C#, уже свою работу сделал.
Предлагаю вместо футбола уделить час времени и разобраться в материале.
Все описание для этого есть.
Для этого не надо быть программистом.

Повторюсь.
Когда будет много материала на C#, наиболее востребованные страгеии преведем на кубики.
Кому нужны кубики сию минуту, берет и делает это сам.
И давайте закроем на этом этот вопрос.


Качественно к пользователям относитесь, со вниманием..

Наверх
#7815 - Mon Jul 05 2010 05:08 PM Re: Стратегия Supertrend [Re: usas]
andy Offline

Pooh-Bah

Registered: Mon Feb 16 2009
Записи: 2130
Originally Posted By: usas
Качественно к пользователям относитесь, со вниманием..


http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7811


Отредактировано andy (Mon Jul 05 2010 05:08 PM)

Наверх
#7816 - Mon Jul 05 2010 05:10 PM Re: Стратегия Supertrend [Re: andy]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Originally Posted By: andy
Originally Posted By: usas
Качественно к пользователям относитесь, со вниманием..


http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7811


Уже был..:-))

Наверх
#27914 - Wed May 25 2011 11:42 AM Re: Стратегия Supertrend [Re: Laber]
Popai Offline
newbie

Registered: Tue May 24 2011
Записи: 32
Подскажите пожайлуста, в данном скрипте вход, выход с позиции происходит по рынку? Или лимитированными заявками?

Наверх


Moderator:  ViL, sar