Избранное трейдера _sg_

по

Data Labeling. Разметка данных для моделей машинного обучения.

Приветствую комерады! :) 

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



( Читать дальше )

Python: поиск поддержки и сопротивления

Написал тут питонячью библиотечку небольшую для поиска поддержки/сопротивления.

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

Общая концепция такая:
1. Ищем разворотные точки
2. Обучаем Agglomerative Clustering, собираем уровни из точек

Находит оно примерно следующее:
Python: поиск поддержки и сопротивления


Юзайте в общем. Работает на Python 3.6+

Когда не лень выкладываю что-то по трейдингу в телегу

Camarilla Equation. Индикатор для QUIK. Часть 3.

    • 22 августа 2019, 12:29
    • |
    • XXM
  • Еще
Получил такое сообщение:

привет!
у меня в квике стояла камарилла аж с 2014 года, когда вы выложили здесь этот индикатор.
квик обновился до 8 и камарилла пропала.
это не исправить?

Глянул по тэгу https://smart-lab.ru/tag/Camarilla/ и вот они:
1. Camarilla Equation. Индикатор для QUIK.
2. Camarilla Equation. Индикатор для QUIK. Часть 2.

Выкладываю вариант, не зависящий от обновлений QUIK.

-- Camarilla.lua
Settings={
	Name = "Camarilla",
	period = 'D',
	line =
		{
			{Name = "S5", Color = RGB(255, 0, 0), Type = 1, Width = 2},
			{Name = "S4", Color = RGB(255, 165, 0), Type = 1, Width = 2},
			{Name = "S3", Color = RGB(255, 255, 0), Type = 1, Width = 2},
			{Name = "PP", Color = RGB(0, 255, 0), Type = 1, Width = 2},
			{Name = "R3", Color = RGB(0, 191, 255), Type = 1, Width = 2},
			{Name = "R4", Color = RGB(0, 0, 255), Type = 1, Width = 2},
			{Name = "R5", Color = RGB(139, 0, 255), Type = 1, Width = 2},
		}
}

local math_floor = math.floor
local levels = 0
local ydH, ydL, ydC, ydO = {},{},{},{}
local PP, R3, R4, R5 = 0,0,0,0
local S3, S4, S5 = 0,0,0
	local delta = 0
	local cl = 0
local predThisDay=0
local function dTs(t) return 100*(100*t.year+t.month)+t.day; end
local OldDay = ''	-- для выделения начала торгового дня

function Init ()
	local t=getDataSourceInfo()
	local tt = t.interval
	if tt == -3 then 
		message('Месячный график не обрабатывается.',1)
		return 
	end
	return 7
end

function OnCalculate (index)
	local time tt=T(index); ---время из свечи
	--local ThisDay=dTs(tt)	-- дата в формате yyyyMMdd
	local tDay=dTs(tt)	-- дата в формате yyyyMMdd
	local ThisDay = tDay
	if Settings.period == 'W' then
		ThisDay=tt.week_day	-- номер недели
	end
	if index == 1 then
		--message('First ThisDay = '..tostring(ThisDay),1)
		local t=getDataSourceInfo()
		--7.2.5 Функция предназначена для получения информации об источнике данных для индикатора.
		local scale = getSecurityInfo(t.class_code, t.sec_code).scale	--	NUMBER, Количество значащих цифр после запятой
		mul = 10^scale  -- возведение в степень
		local tt = t.interval
		if tt == -3 then tt = 'месяц' 
		elseif tt == -2 then tt = 'неделя'
		elseif tt == -1 then tt = 'день' 
		else
			tt = tt..' мин.'
		end
		--message(t.sec_code..'('..t.class_code..'), цифр после запятой: '..scale..', mul = '..mul..', дата = '..ThisDay,1)
		levels = levels + 1
		if ThisDay ~= OldDay then
			OldDay = ThisDay
		end	
		predThisDay = ThisDay
		--
		delta = H(index) - L(index)
		cl = C(index)
		R5 = (H(index) / L(index))*cl
		calcLevels(index)
		local per = 'daily'
		if Settings.period == 'W' then
			per = 'weekly'
		end
		message('Camarilla '..per..', Т = '..tt..', © xsharp.ru 20.06.2015', 1)
		return
	end
	if Settings.period == 'W' then
		if ThisDay < OldDay then	-- для неделек
			OldDay = OldDay + 1
			if OldDay ~= ThisDay then
				OldDay = ThisDay
			end
			levels = levels + 1
			delta = ydH[levels-1] - ydL[levels-1]
			cl = ydC[levels-1]
			R5 = (ydH[levels-1] / ydL[levels-1])*cl
			calcLevels(index)
			--if index<120 then
			--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
			--end
			predThisDay = ThisDay
		else
			if ThisDay ~=predThisDay then
				--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
				predThisDay = ThisDay
				OldDay = OldDay + 1
			end
			ThisDayF(index)
		end
	elseif Settings.period == 'D' then
		if ThisDay ~= OldDay then	-- для дневок
			OldDay = OldDay + 1
			if OldDay ~= ThisDay then
				OldDay = ThisDay
			end
			levels = levels + 1
			delta = ydH[levels-1] - ydL[levels-1]
			cl = ydC[levels-1]
			R5 = (ydH[levels-1] / ydL[levels-1])*cl
			calcLevels(index)
			--if index<120 then
			--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
			--end
			predThisDay = ThisDay
		else
			if ThisDay ~=predThisDay then
				--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
				predThisDay = ThisDay
				OldDay = OldDay + 1
			end
			ThisDayF(index)
		end
	elseif Settings.period == 'H4' then
		if ThisDay ~= OldDay then	-- для дневок
			OldDay = OldDay + 1
			if OldDay ~= ThisDay then
				OldDay = ThisDay
			end
			levels = levels + 1
			delta = ydH[levels-1] - ydL[levels-1]
			cl = ydC[levels-1]
			R5 = (ydH[levels-1] / ydL[levels-1])*cl
			calcLevels(index)
			--if index<120 then
			--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
			--end
			predThisDay = ThisDay
		else
			if ThisDay ~=predThisDay then
				--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
				predThisDay = ThisDay
				OldDay = OldDay + 1
			end
			ThisDayF(index)
		end
	end
	return S5, S4, S3, cl, R3, R4, R5
end

function round(value)
	return math_floor(value*mul + 0.5) / mul
end

function ThisDayF(index)
	ydC[levels] = C(index)
	if H(index) > ydH[levels] then
		ydH[levels] = H(index)
	end
	if L(index) < ydL[levels] then
		ydL[levels] = L(index)
	end
end

function calcLevels(index)
	ydO[levels] = O(index)
	ydH[levels] = H(index)
	ydL[levels] = L(index)
	ydC[levels] = C(index)
	--
	R3 = cl + delta * 1.1/4
	R4 = cl + delta * 1.1/2
	--
	S3 = cl - delta * 1.1/4
	S4 = cl - delta * 1.1/2
	S5 = cl - (R5-cl)
	--
	R5 = round(R5)
	R4 = round(R4)
	R3 = round(R3)
	S3 = round(S3)
	S4 = round(S4)
	S5 = round(S5)
end
  • обсудить на форуме:
  • QUIK

Как сливают торгуя по тренду. 2. Душим позицию стопами.

Как сливают торгуя по тренду. 2. Душим позицию стопами.

Как душим? Просто.
Рынок не движется в направлении тренда прямолинейно, а как бы дышит. В большинстве случаев движение происходит по принципу прорыв-откат, затем новый прорыв, новый откат и т.д., пока очередной откат не станет началом разворота.
Если не учитывать это дыхание рынка, то мы задушим трендовую позицию стопами на откате-выдохе.

Оптимальный размер стопа при трендовой торговле не должен мешать естественному дыханию рынка, но в то же время должен ликвидировать позицию при развороте.

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

Как же выбрать оптимальный стоп, который не душит позицию?

( Читать дальше )

Торговая система. Мои критерии выбора

"Если хочешь зарабатывать — лучше строить торговые системы, а не прогнозы". Тимофей Мартынов.


Здравствуйте, дамы и господа!

Каким же требованиям должна отвечать торговая система (далее – ТС)? Напомню, что бессистемная, основанная на субъективных оценках торговля это игра с отрицательным математическим ожиданием выигрыша и потеря денег при использовании такого подхода – вопрос времени и количества совершенных сделок (смотрите статью "Опыт — мудрость глупцов!").

1. ТС должна быть алгоритмизирована в виде торгового робота – только такой подход дает возможность проверить гипотезу о поведении котировки, заложенную в ТС, смоделировав сделки по правилам ТС с использованием известной истории изменения котировок на длительных временных интервалах, включающих различные рыночные ситуации (продолжительные тренды, флэтовые периоды, резкие (новостные) изменения и пр.) Тестирование ТС торговлей в реальном времени практически неприменимо, так как из-за бесконечной вариативности торговых систем может просто не хватить жизни для проверки достаточного их количества, а действительно прибыльная ТС — золотой самородок в куче пустой породы. Кроме того, серия тестов на истории с различными параметрами ТС позволяет найти оптимальные их значения для различных финансовых инструментов, например, расстояния до уровней стоп-лосса и тейк-профита для инструментов с различной волатильностью.



( Читать дальше )

Магия утра для финансовой свободы. Как заложить основы счастливой и богатой жизни. Часть I. Глава 3. «Спасательные круги» 6 практик гарантированного спасения вас от жизни с нереализованным потенциалом

Глава 3. «Спасательные круги»

6 практик гарантированного спасения вас от жизни с нереализованным потенциалом

(список из шести проверенных, вневременных практик личностного развития).
Магия утра для финансовой свободы. Как заложить основы счастливой и богатой жизни. Часть I. Глава 3. «Спасательные круги» 6 практик гарантированного спасения вас от жизни с нереализованным потенциалом
Часть 1 https://smart-lab.ru/blog/557218.php
 t.me/kudaidem — Инвестидеи. Новости бизнеса. Обзоры деловой литературы.

ПОЧЕМУ «СПАСАТЕЛЬНЫЕ КРУГИ» ЭФФЕКТИВНЫ?

«Спасательные круги» – это простые, но весьма эффективные ежедневные практики личностного роста. Они предназначены для того, чтобы вы могли начинать свой день на пике физической, умственной, эмоциональной и духовной формы. «Спасательные круги» не отнимают время, а дарят его, продлевая ваш день.

Итак, вот эти «спасательные круги»:

Тишина

Аффирмации



( Читать дальше )

Портфельная оптимизация как бустинг на «слабых» моделях-3

Устойчивые долгосрочные модели


В предыдущих частях (часть 1, часть 2) мы рассмотрели построение композитных систем оценок ценных бумаг, построенных при помощи распространённых средств машинного обучения (Bag/Boost методы). Однако, такой подход, несмотря на все свои преимущества (скорость, точность) имеет ряд больших недостатков – отсутствие универсальности моделей в результате проблем «переобучения»  (точной настройки на определённые типы рынков и временные интервалы) и сложность интерпретации полученных композиций.

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



( Читать дальше )

Вывод данных из квика в Omega Research и MetaStock - решение проблемы

    • 20 августа 2019, 16:58
    • |
    • yurikon
  • Еще
Добрый день всем!

Начиная с версии QUIK 8 будет удалена возможность вывода данных в программы технического анализа Omega Research и MetaStock. Уже сейчас многие брокеры отключают эту функцию на своих серверах, и QUIK выдает сообщение об ошибке «У вас отсутствует лицензия» для вывода данных.

Мы сделали простое решение этой проблемы - программа SynAdapter.

По ссылке есть еще несколько лайфхаков, как оптимизировать вывод данных — сделать быстрее и стабильнее.

Самая крутая фишка — вообще заменить квик на логин Plaza2 и брать данные напрямую с биржи! ;-)))

Удачных сделок!

ЕЩЕ ОДИН КОНКУРС ОТ 20.08.19. Бесплатный. Дальше можно не читать. Specially for Sergey Pavlov

Добрый день, коллеги!

Приношу свои извинения за сегодняшнюю излишнюю продуктивность — данный топик был запланирован к публикации на 09.09.19.
Т.е. ровно в тот момент, когда все конкурсные программы на 08.09.19 были бы уже выложены, а конкурсные данные еще не поступили (((

Но — человек предполагает, а жизнь идет своим чередом.
Сегодня один из потенциальных участников - Sergey Pavlov — высказал в одном из комментариев целый набор мудрых замечаний:

https://smart-lab.ru/blog/557045.php#comment??? (не могу корректно указать номер топика, но он про обратимость ТС)

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

Начну издалека, как обычно.

Все мы знаем, что такое ценовые ряды. Это такие наборы чисел, графики которых представляют из себя колючие загогулины. Более умные и продвинутые из нас видят в них реализации случайных процессов, менее продвинутые — непрерывные, нигде не дифференцируемые функции, все остальные — бабки, как потенциальные, так и заработанные.

( Читать дальше )

ЛЧИ 2019 Стартовый капитал и номинации!!!

    • 19 августа 2019, 16:45
    • |
    • Enter1
  • Еще

ЛЧИ 2019 Стартовый капитал и номинации!!!
Всем привет.

Организаторы конкурса Лучший Частный Инвестор 2019 обещали более зрелищные события и они это выполнили!
ЛЧИ 2019 Стартовый капитал и номинации!!!



( Читать дальше )

....все тэги
UPDONW
Новый дизайн