Дневник робота
Atom Ответить
03.10.2011


Всем привет! В нашем блоге поместил два поста о результатах работы одного нашего торгового робота. Идея для стратегии моя, реализация - Муханчиков Александр. Первый пост "как бы" двухмесячной давности. Еще тогда хотел поместить его, но ждал, когда на сайте появится раздел Статьи. В итоге решил, что так все интересное пройдет и запостил в блог. Второй пост со свежими данными, только что из печки. Присоединяйтесь к обсуждению и пишите о своих успехах!

Вот выдержка из статьи

Итак, мы имеем систему с очень привлекательными показателями доходности, и нам не хотелось бы отказываться от неё. Что же делать? Давайте вернемся с устойчивости самой системы. График оптимизации значений параметра, как мы помним, имеет плохую картинку, которая предостерегает нас о возможности переоптимизации – подгонки под определенный цикл рынка. Эту подгонку под определенный период рынка мы можем увидеть, посмотрев на распределение прибыли по месяцам. ( В WLD – это вкладка By Period, выбираем период по месяцам). Если стратегия подогнана под определенный рыночный цикл, следует ожидать, что будут сильно выделяться несколько месяцев по прибыли, также будут месяцы по прибыли близкие к 0 или же вовсе убыточные.

торговые роботы

Еще хочу предложить создать клуб алготрейдеров. Будем делиться идеями и работать командой. Я уверен, что так будет эффективнее. Я сам готов показать пример и поделиться одними своими разработками из которых может выйти славный робот.

Вы хотите работать командой и делиться идеями?



Спасибо:




36 Ответов
1 2  >
Evgeny_K

Фотография
Дата: 06.10.2011
Ответить


Идея клуба алготрейдеров мне нравится. Я хотел бы участвовать в таком клубе.
Спасибо:

StockSharp

Фотография
Дата: 06.10.2011
Ответить


Evgeny_K Перейти
Идея клуба алготрейдеров мне нравится. Я хотел бы участвовать в таком клубе.


Вы в каком городе проживаете?
Автор топика
Спасибо:

Church

Фотография
Дата: 06.10.2011
Ответить


Идея отличная. Я не в Москве, но бываю раз-два в месяц.
Спасибо:

Evgeny_K

Фотография
Дата: 07.10.2011
Ответить


Alen Перейти
Evgeny_K Перейти
Идея клуба алготрейдеров мне нравится. Я хотел бы участвовать в таком клубе.


Вы в каком городе проживаете?


Люберцы. В Москве бываю не менее раза в неделю. Можно еще в Скайпе встречаться, кстати.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.10.2011
Ответить


Evgeny_K Перейти
Alen Перейти
Evgeny_K Перейти
Идея клуба алготрейдеров мне нравится. Я хотел бы участвовать в таком клубе.


Вы в каком городе проживаете?


Люберцы. В Москве бываю не менее раза в неделю. Можно еще в Скайпе встречаться, кстати.


Скайп само собой. Это больше для ежечасной переписки и мозгового штурма. Но чтобы мозг не засох от постоянного умственного напряжение, нужно регулярно его разгружать. Выездные сейшены, сходных сейшены.
Спасибо:

Alexander

Фотография
Дата: 07.10.2011
Ответить


Предлагаю сегодня как обычно в бар да по бабам.
Спасибо:

StockSharp

Фотография
Дата: 07.10.2011
Ответить


ПИШЕМ СКАЙП, ДОБАВЛЯЮ В ГРУППУ!
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.10.2011
Ответить


Alexander Mukhanchikov Перейти
Предлагаю сегодня как обычно в бар да по бабам.


Наберем в скайпе человек 200-300 и будем тусы устраивать на Манежке.Laugh
Спасибо:

Evgeny_K

Фотография
Дата: 07.10.2011
Ответить


Alen Перейти
ПИШЕМ СКАЙП, ДОБАВЛЯЮ В ГРУППУ!


Мой Скайп: valinn.
Спасибо:

Лидия

Фотография
Дата: 07.10.2011
Ответить


lg_lidia
Только я совсем начинающий.... Но завтра, надеюсь, все начнет меняться в лучшую сторону :))))
Кстати, а интересно, много ли среди алготрейдеров девушек :) ?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.10.2011
Ответить


Лидия Перейти
Но завтра, надеюсь, все начнет меняться в лучшую сторону :))))


А что будет завтра?
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.10.2011
Ответить


Alen Перейти
ПИШЕМ СКАЙП, ДОБАВЛЯЮ В ГРУППУ!


Заполняйте еще и в профайле на сайте.
Спасибо:

Лидия

Фотография
Дата: 07.10.2011
Ответить


Mikhail Sukhov Перейти
Лидия Перейти
Но завтра, надеюсь, все начнет меняться в лучшую сторону :))))


А что будет завтра?


Курсы стартуют :)
Спасибо:

Church

Фотография
Дата: 07.10.2011
Ответить


Скайп ematvey
Спасибо:

StockSharp

Фотография
Дата: 13.10.2011
Ответить


Простите за грамм ошибки,очень спешил )
спешел фо кружок алготрейдинга.

Идея, на которой можно построить торгового робота.

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

Существует несколько способов нахождений закономерностей 1) Мы исследуем рынок, и пытаемся найти некую закономерность.
2) мы смотрим на рынок, ищем те движения, которые мы хотели бы научиться брать, и пытаемся найти закономерность, которая привела к этому движению.

В первом случае мы ищем паттерн, из которого происходит следствие. Во втором случае мы ищем следствие, и пытаемся понять, какой паттерн ей предшествовал.
Не буду размышлять, про плюсы и минусы этих подходов, просто Вам на заметку. Использую второй подход, мне удалось найти закономерность, о которой я Вам расскажу.

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

Итак – я определил те участки графика, которые я бы хотел научиться брать. Это конечно идеализированная картинка, но ясно передает суть того, на что я обратил внимание. По сути, я хотел научиться брать развороты.

http://pics.livejournal.com/apollon_alen/pic/0001wb4s/

Я стал исследовать рынок на предмет того, после чего возникают таким мощные движения. Мне показалось, что большинство движений начинается с пробоя некоторого уровня, после чего идет разворот и движение.

http://pics.livejournal.com/apollon_alen/pic/0001xbta/
Надо сказать, что до этого я занимался объёмами, направление в трейдинге, которое старается определить направление рынка с помощью объемов. Большие объемы = большие игроки, и надо понять, куда они намылились. Поэтому под закономерность о пробитии некоторых, часто явных уровней, я придумал следующую теорию, связанную с логикой крупных игроков:
в некоторые моменты, на рынке возникает определенность, в какую сторону мы пойдем. Мелкие игроки вполне могут просчитать это направление, крупный игрок так же понимает, что сейчас мы пойдем вверх/вниз. Но, крупному игроку надо набрать позу. Как это сделать, не двинув рынок? Тем более что входить придется рыночными заявками в тот момент, когда рынок и так настроен в определенную сторону такой вход будет на большом проскальзывании. Выход следующий – подтолкнуть рынок в сторону, противоположную текущему настроению, собрать стопы, что позволит войти хорошими объемами без проскальзывания. Я не хочу поднимать тему кукловодства, т.к. считаю, что это отговорки безответственных трейдеров, но такое поведение крупного игрока вполне логично. Ничего личного, надо набрать позицию и это делается за счет спекулянтов.
Посмотрите на график с этой точки зрения, увидите, как часто рынок разворачивается после пробоя некого уровня (часто это пики внутри дня). К сожалению такой подход оказалось трудно запрограммировать, определить четкие критерии для описания уровня, после пробития которого надо входить в позицию, я не смог. Одна попытка привела к созданию среднесрочного робота, код которого я выложу в другом посте. Но интрадей робота на этом наблюдении создать не получилось. Я решил зайти с другой стороны и провести исследование, которое мне должно было подсказать, как все-таки брать эти движения.

Был написан код для исследования. Цель исследования заключалась в следующем – найти статистические точки входа, после которых цена минимально идет не в нашу сторону и максимально в нашу.

http://pics.livejournal.com/apollon_alen/pic/0001y7a1/

Для этого мы написали такой код. Если в точке 2 (точка выхода), цена находилась выше точки 1 (точки входа), то в точке 1 задним числом совершалась покупка. И наоборот. Точки 1 и 2 представляли собой точки во времени. Т.е. вход осуществлялся в 10.05, выход в 10.10-10.15-10.20, таким образом, перебираем все временные точки на выход и все временные точки на вход.
Конечно это подсматривание, но у нас была цель провести исследование. Его мы и проводим. После результатов теста, нужно было смотреть на показатели Recovery Factor (RF) – он показывает отношение прибыли к максимальной просадке. Соответственно максимальный показатель будет в тех точках, где движение против нас было минимальным, а в нашу сторону максимальным.
[img]http://pics.livejournal.com/apollon_alen/pic/0001z0wd/[/url]

Вот иллюстрация, какие точки нам должен был показывать RF и как он должен был подсказать нам точки, после которых идет мощный тренд.
Исследование дало интересные результаты.
РЕЗУЛЬТАТЫ ДЛЯ ЛОНГОВ
Вот распределение RF по всем протестированным комбинациям (из выборки были удалены комбинации с средним профитом меньше 0.5%)
http://pics.livejournal.com/apollon_alen/pic/00020edd/

Мы видим, что существую точки, где RF существенно отличается от обычного. Особенно сильно идет падение параметра в самом начале. Такой график показывает, что те параметры с хорошим RF, это действительно редкость.
Результаты для шортов выкладывать не буду.

В итоге у меня вышло, что точки входа с максимальным RF, между 10.40 и 11.40 и выход в 16.30 – 17.30 (для лонгов, для шортов позже допишу). И вторая хорошая точка, с 17.30-40 до 21 часа.
issled.png 13,3KB (0) issled2.png 21,1KB (0) moving.png 47,3KB (0) moving2.png 36,9KB (0)
Автор топика
Спасибо:

StockSharp

Фотография
Дата: 13.10.2011
Ответить


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

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

Что бы мне хотелось - напишите код самостоятельно и проведите свои исследования, может увидите то, что я не заметил. Код исследования я выкладывать не буду! Но позже выложу код одной стратегии, которую сделал когда пытался ложные пробои запрограммировать.
Автор топика
Спасибо: nabuke

FinDirector

Фотография
Автор статей
Дата: 14.10.2011
Ответить


Для утренних лонгов можно использовать фильтр. Не входить, если есть бар, который закрылся ниже, чем на X пунктов (например, 800) по сравнению с закрытием первой пятиминутки. Возможны варианты, например, не входить, если есть 2 или более таких баров.
Спасибо:

gambler_max

Фотография
Дата: 16.10.2011
Ответить


В добавление к опубликованной статье хотел бы поделиться рядом своих наблюдений. Данное исследование я провел весной этого года вкопавшись слегка в тему рыночных профилей. Отбросив (а точнее отложив в сторону тот факт, что профиль штука весьма и весьма полезная и продуктивная) заглянем в книжки и рекламные проспекты. В бОльшей части из них указывается на высокую значимость периода открытия рынка (дневной сессии) и дается утверждение, что в более чем 60% случаев на амерофучах как минимуму и на стоках как максимум в течении первого часа формируется хай и лоу рынка. На основе этого факта (точнее утверждения) строится множество систем (привет Киевлянину), рисуются ацццки красивые графики и барыжатся граали. Принимая во внимание тот факт, что Профиль Рынка это круто (и как не странно логичнообоснованно) и, что мы тут не там и у нас свой РТС я решил кой-чего покопать. (я на одном форумевыкладывал уже резалт - на тематическом, но там его как-то странно восприняли - скорее как наезд на классиков)
Исследование проводилось на полугодовых данных (взятых у финама)
И я пытался выяснить:
1.можно ли по Диапазону Открытия "предположить" развитие торговли внутри дня.
2.действительно ли в течении первого часа торгов формируется экстремум у 60 дней из 100.
Все дни разбил по 2м группам:
№1
Дни, у которых диапазон открытия >50% от среднедневного диапазона за последние 10 дней. В случае, если мы имеем такое открытие, то с вероятностью 76% один из экстремумов будет на открытии. Всего дней с таким диапазоном было 21 или 16% от общего числа дней. В такие дни логичнее всего торговать отбой от границ открытия
№2,
те у которых диапазон <50%. Первоначально я сделал большее количество "кучек", но анализ показал, что величина открытия менее 50% не оказывает влияния на судьбу дня. И однозначного ответа торговать пробой открытия "внутрь" или "наружу" нет. Однако! Вспомним про экстремумы. Так вот - экстремум на открытии мы получаем только в примерно 30% случаев.
Так-же исследования показали, что в среднем открытие составляет 30% от дневного диапазона. Следовательно если открытие 1000пунктов, то весь диапазон будет около 3000. Так же интересно то, что "расстояние" до ближайшего экстремума примерно 20%-30% от диапазона дня.

Вывод
- диапазон открытия может дать намек на дальнейшее движение маркета.
- в более 60% случаев, один из экстремумов формируется на диапазоне открытия утверждение не подтвердилось
- реальный "диапазон открытия" который влияет на выдаваемые результаты у ФОРТСа несколько длиннее "часа" - для ФОРТСа он составил примерно до 12 часов. Это было связано со временем открытия ММВБ (сейчас то они вместе открываются) и временем открытия Европейских бирж

Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.10.2011
Ответить


gambler_max Перейти

- реальный "диапазон открытия" который влияет на выдаваемые результаты у ФОРТСа несколько длиннее "часа" - для ФОРТСа он составил примерно до 12 часов. Это было связано со временем открытия ММВБ (сейчас то они вместе открываются) и временем открытия Европейских бирж


Тоесть на амерофьючах все укладывается в наши с 10 до 11, а для наших - до 12? Распределение такое же на наших фьючерсах?
Спасибо:

gambler_max

Фотография
Дата: 16.10.2011
Ответить


Mikhail Sukhov Перейти
gambler_max Перейти

- реальный "диапазон открытия" который влияет на выдаваемые результаты у ФОРТСа несколько длиннее "часа" - для ФОРТСа он составил примерно до 12 часов. Это было связано со временем открытия ММВБ (сейчас то они вместе открываются) и временем открытия Европейских бирж


Тоесть на амерофьючах все укладывается в наши с 10 до 11, а для наших - до 12? Распределение такое же на наших фьючерсах?

Судя по многочисленным заявлениям - у амеров по амерскому времени первый час открытия играет существенно бОльшую роль чем у нас первый час открытия. У нас диапазон открытия (скажем даже так - диапазон который может иметь некую ценность для исследования) это с 10 до 12, В предыдущем посте автор исследовал временные точки входа - и первая такая зона у него не сильно отличается от моей. Т/е/ можно сказать что шанс получить первый дневной экстремум в данном временном отрезке выше
Спасибо:

StockSharp

Фотография
Дата: 18.10.2011
Ответить


Не пощажу ваши экраны.. код ниже.

Стратегия на часовиках

Суть стратегии - если цена прошла вверх Н пунктов, потом вниз столько же, строится уровень по пику, если цена рпобивает этот уровень, ниже этого пика ставится стоп ордер на вход. После входа стоп тянется по пикам.

Код
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies
{
	public class MyStrategy : WealthScript
	{

		
		//StrategyParameter Stop;
		StrategyParameter Step;
		StrategyParameter PeakRange;
		StrategyParameter DeltaStop;
		StrategyParameter Mode;
		
		public MyStrategy()
		{
			//Stop = CreateParameter("Stop", 3000, 1000, 5000, 200);
			Step = CreateParameter("Step", 3200, 100, 3500, 100);
			DeltaStop = CreateParameter("DeltaStop", 0, 100, 3500, 100);
			PeakRange = CreateParameter("PeakRange", 2700, 900, 3000, 100);
			Mode = CreateParameter("Mode", 0, -1, 1, 1);
		}

		protected override void Execute()
		{
			
			//double stoploss = Stop.Value;
			double stoploss = Step.Value + DeltaStop.Value;
			
			double StopPrice = 0;
			double TakePrice = 0;
			double price,LowestLow,HighestHigh;
			double delta;
			
			
			DataSeries Peaks = Peak.Series( High, PeakRange.ValueInt, PeakTroughMode.Value);			
			DataSeries Troughs = Trough.Series( Low, PeakRange.ValueInt, PeakTroughMode.Value);
			
			//DataSeries HighestSeries = Highest.Series(High,Period.ValueInt);
			//DataSeries LowestSeries = Lowest.Series(Low,Period.ValueInt);
				
			double LastPeakSignalPrice = 0;
			double WorkingPeak = 0;
			double WorkingHigh = 0;
			double PeakSignalPrice = 0;			
			bool SetShortOrderMode = false;

			double LastTroughSignalPrice = 0;
			double WorkingTrough = 0;
			double WorkingLow = 0;
			double TroughSignalPrice = 0;			
			bool SetBuyOrderMode = false;
			
			double trailingStop;
			
			DataSeries PeakSignalPriceSeries = new DataSeries(Bars,"PeakSignalPriceSeries");
			DataSeries TroughSignalPriceSeries = new DataSeries(Bars,"PeakSignalPriceSeries");
			
			
			for(int bar = 20; bar < Bars.Count; bar++)
			{		
						
				PeakSignalPriceSeries[bar] = Close[bar];
				TroughSignalPriceSeries[bar] = Close[bar]; 
				
				foreach( Position p in Positions )
				{
					if ( p.Active )
					{
						if (p.PositionType == PositionType.Short)					
						{
							trailingStop = p.TrailingStop;							
							if (Peaks[bar]!= WorkingPeak)
								if (p.TrailingStop > Peaks[bar]) trailingStop = Peaks[bar];
							if (!Bars.IsLastBarOfDay(bar)) ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop");
						}
						if (p.PositionType == PositionType.Long)					
						{
							trailingStop = p.TrailingStop;
							if (Troughs[bar]!= WorkingTrough)
								if (p.TrailingStop < Troughs[bar]) trailingStop = Troughs[bar];
							if (!Bars.IsLastBarOfDay(bar)) ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop");
						}						
					}
				}				
						
				if (Mode.Value != 1)
					if (High[bar-1]>Peaks[bar-1])
					{											
						WorkingPeak	= Peaks[bar-1];
						if (WorkingHigh<High[bar-1]) WorkingHigh=High[bar-1];
						PeakSignalPrice = WorkingPeak - Step.Value;	
						SetShortOrderMode = true;
					}
							
				if ((SetShortOrderMode)&&(LastPeakSignalPrice != PeakSignalPrice))
				{
					Position p = null;
					if (!Bars.IsLastBarOfDay(bar-1))
					{
						p = ShortAtStop(bar, PeakSignalPrice);		
						PeakSignalPriceSeries[bar] = PeakSignalPrice;
					}
					if (p != null) 
					{							
						SetShortOrderMode = false;	
						LastPeakSignalPrice = PeakSignalPrice;		
						trailingStop = p.EntryPrice + stoploss;
						ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop");
					}
				}			
				
				if (Mode.Value != -1)
					if (Low[bar-1]<Troughs[bar-1])
					{								
						WorkingTrough = Troughs[bar-1];
						if (WorkingLow>Low[bar-1]) WorkingLow=Low[bar-1];
						TroughSignalPrice = WorkingTrough + Step.Value;	
						SetBuyOrderMode = true;
					}
							
				if ((SetBuyOrderMode)&&(LastTroughSignalPrice != TroughSignalPrice))
				{
					Position p = null;
					if (!Bars.IsLastBarOfDay(bar-1))
					{
						p = BuyAtStop(bar, TroughSignalPrice);			
						TroughSignalPriceSeries[bar] = TroughSignalPrice;
					}
					if (p != null) 
					{							
						SetBuyOrderMode = false;	
						LastTroughSignalPrice = TroughSignalPrice;
						trailingStop = p.EntryPrice - stoploss;
						ExitAtTrailingStop(bar+1,p,trailingStop,"ExitAtTrailingStop");
					}
				}	


				
			}//for

			PlotSeries( PricePane, Peaks, Color.Green, LineStyle.Dots, 3 );
			PlotSeries( PricePane, Troughs, Color.Red, LineStyle.Dots, 3 );
			
			PlotSeries( PricePane, PeakSignalPriceSeries, Color.Green, LineStyle.Solid, 1 );
			PlotSeries( PricePane, TroughSignalPriceSeries, Color.Red, LineStyle.Solid, 1 );
			
		}
	}
}
по мес.png 34,4KB (0) перфоманс.png 38,3KB (0)
Автор топика
Спасибо:

Alexander

Фотография
Дата: 18.10.2011
Ответить


Грааль? Может удалить пока никто не спалил?
Спасибо:

Ariloum

Фотография
Благотворитель
Дата: 18.10.2011
Ответить


мой ник в скайпе - ariloum.

Почитал ветку, интересные наблюдения насчет привязки движений рынка ко времени..
Для одной из своих стратегий пару лет назад делал что-то подобное - разбивал все сделки по времени с задаваемым шагом и рисовал табличку этого распределения, в которой было видно прибыль/убытки для каждого интервала времени. Пробовал исключать "плохие" интервалы, это дало небольшой прирост прибыли.

Насчет клуба алготрейдеров - хорошая идея, буду рад принять посильное участие в брэйнштормах и тестировании идей.
Спасибо:

Ariloum

Фотография
Благотворитель
Дата: 18.10.2011
Ответить


2 Ален

У меня есть похожая стратегия, суть ее в следующем :
По 2м последним пикам рисуется линия, если последний пик ниже(выше) предыдущего пика происходит вход в лонг(шорт) на пробое линии.
Пики по хаям - для входа в лонг, по лоям - для шортов, визуально получаются линии "\" и "/".
Трейлинг стоп в процентах, для примера - каждые 5% стоп подтягивается на 2-3%.
Спасибо:

StockSharp

Фотография
Дата: 18.10.2011
Ответить


Ariloum Перейти
2 Ален

У меня есть похожая стратегия, суть ее в следующем :
По 2м последним пикам рисуется линия, если последний пик ниже(выше) предыдущего пика происходит вход в лонг(шорт) на пробое линии.
Пики по хаям - для входа в лонг, по лоям - для шортов, визуально получаются линии "\" и "/".
Трейлинг стоп в процентах, для примера - каждые 5% стоп подтягивается на 2-3%.


как результаты? лучше или сравнимы?
Автор топика
Спасибо:
1 2  >

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

loading
clippy