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

по

Нейросети в торговых системах. 1.

    • 25 июня 2020, 22:59
    • |
    • 3Qu
  • Еще

Вначале о грустном. Не понимая теорию нейросетей (НС) у вас вряд ли получится построить на ней ТС. Поэтому лучше для начала почитать теорию, например, Хайкин Саймон. «Нейронные сети. Полный курс». Книга уже достаточно старая и в ней нет новомодных веяний, но она дает базовые представления о НС.

И второе, мы будем далее для построения систем использовать пакет scikit-learn для Python. рекомендую ознакомиться. Есть и более продвинутые пакеты, скажем, TensorFlow и др., но их использовать мы не будем, и ограничимся более простым scikit-learn.
Теперь о том, чего здесь не будет. Здесь не будет теории НС, разве эпизодически и оч кратко. Здесь не будет описания пакетов Python, работы с графикой и пр. Обо всем этом вы можете прочесть в интернете, книгах, и документации Python.
В топике мы будем обсуждать только применение НС к ТС и их построению.
Так как тема достаточно велика, в один топик не влезет, сегодня мы займемся самыми общими вопросами. Следующая часть будет недели через две, раньше не получается.



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

Вот такое кино.

    • 21 июня 2020, 01:33
    • |
    • 3Qu
  • Еще
Вчера написал топик «Рынок и термодинамика» о демоне и распределении Максвелла и возможной связи всего этого с рынком. Старался изложить это простым языком на простых примерах, и… никто ничего не понял. Да и интереса к топику особого не было. Фиговый из меня популяризатор. Вообще, это и не важно, зато я понял. Не зря говорят, что попробуй объяснить… кому нибудь, и сам поймешь. Так и получилось.)
Вообще, такие идеи о связи термодинамики и рынка у меня крутятся и продумываются давно, от них уже есть небольшой толк в качестве приближенной модели рынка, и понимания части процессов. Но сегодня оказалось, что все много интересней, надо только как-то проверить соответствие этого распределения реальности и рассчитать его параметры.
Взял в руки Python и историю котировок, и выяснилось, что из них, хотя и на косвенных данных, можно получить такое распределение.
Во первых, хотя о большой точности говорить не приходится, получилось что-то очень похожее на распределение Максвелла (м.б покажу когда, под настроение, хотя, думаю, неинтересно это). А во вторых, хотя это и не Грааль, это реально можно использовать при игре на рынке, т.к. теперь о состоянии рынка известно то, что раньше было неизвестно, и это многое объяснило.
Ну, и теперь можно ложиться спать.

Рынок и термодинамика.

    • 20 июня 2020, 16:56
    • |
    • 3Qu
  • Еще

Вы когда нибудь слышали о демоне Максвелла? Уже из школьного курса известно, что при некоторой температуре энергии молекул газа распределяются в соответствии с распределением Максвелла. Среди них всегда есть и очень горячие (с высокой энергией), и очень холодные (с низкой энергией). Если в сосуде с газом просверлить дырочку, поставить туда заслонку и попросить демона Максвелла открывать заслонку, когда извне к ней подлетает высокоэнергетическая молекула, и, открывая заслонку, выпускать из сосуда молекулы с низкой энергией, то газ в сосуде будет нагреваться.
В итоге нам не нужно никакой энергии для нагревания газа, а открытие заслонки дело нехитрое. Надо на досуге к чайнику такую штуку прикрутить.
Вы скажете, что это нереализуемо, и сто раз доказано что это невозможно. Однако это уже сотни лет успешно работает, но не с газом.)
Немного усложним задачу. Пусть в наш сосуд поступает струйка тепленького газа. Молекулы газа многократно сталкиваясь между собой обмениваются энергией с газом в сосуде. Опять сверлим дырочку, и демон Максвелла выпускает из сосуда через задвижку низкоэнергетические молекулы. Энергия будет отбираться у молекул поступающего газа, и газ в сосуде будет неизбежно разогреваться.
Пока нет никаких ассоциаций? Тогда подскажу — таким устройством является биржа.
Трейдер приходит на биржу с деньгами (энергией), многократно сталкивается с другими участниками, обмениваясь с ними деньгами (энергией). Приобретает или теряет энергию (деньги), и если его энергия (деньги) становится меньше некоторого порога, демон Максвелла услужливо открывает ему заслонку, и товарищ покидает сосуд (биржу). Биржа при этом, естественно, разогревается и количество энергии (денег) на ней увеличивается.



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

Python. Делаем тестер стратегий и... зарабатываем на случайном блуждании.

    • 19 июня 2020, 16:32
    • |
    • 3Qu
  • Еще

Если вам кто нибудь скажет, что на случайном блуждании (СБ) нельзя зарабатывать, бросьте в него камень. Как говорил Паниковский — это жалкие ничтожные люди. На СБ можно зарабатывать с результатами не хуже, чем на реальном рынке. У СБ, по сравнению с реальным рынком, только один недостаток — за игры с СБ никто деньги платить не будет.
А если бы платили? Никто бы ничего не заметил. По прежнему 95% СБ-трейдеров сливало бы депозиты, а 5% регулярно выигрывало и считало бы себя Гуру. По прежнему на графики наносились бы каббалистические знаки и индикаторы, угадывались бы направления движения, каналы, и линии поддержки/сопротивления. Все так же начинающие трейдеры искали Учителя для обучения, а аналитики предсказывали будущее. И, ровным счетом, абсолютно ничего бы не поменялось. Может только АГ заметил бы подвох, но тоже не сразу, а только через несколько месяцев, а, может, и через год-другой. Но, легко сделать, чтобы и АГ остался в неведении.)

Однако, прежде чем играть на СБ, нам необходима стратегия и тестер. Ими мы и займемся.
Для начала стратегия: нам нужны три функции
— одна для пошагового слежения за рыночными котировками и определения момента входа в сделку — DealEntryAnalysis(i) и пусть на ее выходе будет: 0-если сделки нет, 1 — необходим вход в лонг, и -1 — необходим вход в шорт. i — номер отсчета массива котировок.
— вторая для сопровождения сделки лонг — DealControlL(i), отвечающая за контроль и закрытие сделки.
— и третья, для сопровождения сделки шорт — DealControlS(i).
Теперь у нас все готово для разработки тестера стратегий, а это всего лишь цикл while() последовательно перебирающий котировки.
Вот наша стратегия уже в тестере:

while i < Ie:
    deal_type = DealEntryAnalysis(i)
    if deal_type == 1:
        j, rep = DealControlL(i)
        deals_report.append(rep)
        i = j+1
        continue
    elif deal_type == -1:
        j, rep = DealControlS(i)
        deals_report.append(rep)
        i = j+1
        continue
    i = i+1


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

Автоматизация - ключ к успешному инвестированию. Python и SQL приходят на помощь!

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

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

Я уже рассказывал, что на самоизоляции осваивал Python, и демонстрировал, что мне удалось написать профессиональный инвестиционный калькулятор, который рассчитывает различные финансовые показатели и сравнивает между собой два актива. Кстати, в последней его версии я добавил возможность учета комиссий и налогов. Это позволяет намного легче сравнивать NET результаты для инвестора, особенно если в стратегии по ДУ есть вознаграждение управляющего за успех, а в ПИФах комиссия за приобретение и погашение паев.

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



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

Переподгонка, простейшая модель

               Для численного моделирования переподгонки я взял дневки фьючерса на индекс РТС, с середины декабря 2006 по начало мая 2020,  которые корректно склеены. Сначала рассмотрим систему максимальной доходности для 1 фьюча, торгуемого в обе стороны. Её эквити будет сумма модулей логарифмических приращений дневок, взятая нарастающим итогом.  Финансовый «результат» 5207% (логарифмических), или 391% годовых. Число дневных баров 3356, коэффициент Шарпа с нулевым смещением (нулевой % ставкой) 9,8.

               Наша «подгонка» будет состоять из 2 этапов. На первом мы моделируем наличие 3 индикаторов с порогом, просто присваивая каждому приращению случайное целое от 1 до 8, которое будет номером кластера. Напомню, что каждый индикатор с порогом делит массив баров на 2 кластера, а 2^3=8.  На втором этапе суммируем дневные приращения внутри каждого кластера и приписываем кластеру позицию лонг, если сумма положительна и шорт, если отрицательна. Получаем эквити, для которой можно посчитать число сделок (перемен позиции), доходность, к-т Шарпа.



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

Не, ну полный мудель

Доброй ночи, коллеги!

Эх, давал я себе зарок не писать больше про Косю Сапрыкина Смирнова, но эта пулемётная очередь постов начинает доставать.
Скорее всего, виноват я сам, т.к. никто не мешает мне добавить Косю «Старый Дед» Смирнова в ЧС.
Но это не наш метод. Цензура почти никогда не приводила к позитивным переменам в обществе.

Однако, посколько зарок больше не писать про КС я давал публично, позволю прояснить свою позицию.
И оставить для потомства простое (практически на пальцах) объяснение, почему все эти квадратики/ромбики/треугольнички представляют из себя некую творческую разновидность онанизма и никак не применимы в реальном трейдинге.

Сначала немного предыстории.
В далекие года очень неглупый чел Бенуа Мандельброт, изучая ценовые ряды рыночных актовов, успешно выявил массу аномалий, отличающих их от обычного случайного блуждания (с разными модификациями, вроде логнормального распределения).
Дальше это уважаемый чел выдвинул массу интересных гипотез, типа фрактальности, мультифрактальности etc. Справедливости ради следует отметить, что гипотезы были красивые, но НИ ОДНА ИЗ НИХ НЕ ПОДТВЕРДИЛАСЬ, и это легко можно понять из настроя поздних работ Мандельброта, а также заката карьер его немногочисленных последователей (Э.Петерс и ещё 3-4 человека).



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

Алготрейдинг. Получение данных свечей средствами QLUA и запись их в .CSV

Алготрейдинг. Получение данных свечей средствами QLUA

Очень часто бывает необходимо получить данные последних N-свечей различного интервала инструмента торговли. К сожалению, в справке QLUA нет достаточно полных примеров кода работы получения данных. В скрипте приведён пример получения данных интервала М1 инструмента BRN0 в формате <Инструмент> <Дата> <Время> <Цена_Open> <Цена_High> <Цена_Low> <Цена_Close> <Объем>. Данные пишутся в CSV формат.
Почему просто не выводить по DDE график и обрабатывать его в чём-нибудь более приятном? Есть простые вещи, для которых нет необходимости в таких конструкциях (проанализировать резкое изменение объема, найти определенную формацию/комбинацию свечей, а затем вывести в quik сообщение).
-------------------------------------------------------------------------------------------------------
--- Функция получения результатов свечей в .CSV в виде:
--- <Инструмент> <Дата> <Время> <Цена_Open> <Цена_High> <Цена_Low> <Цена_Close> <Объем>
--- BRN0	1	20200605	200100	42.15	42.16	42.1	42.1	2150
-------------------------------------------------------------------------------------------------------
is_run=true

-- Параметры
tInstr="BRN0" --код инструмента/бумаги
classcode="SPBFUT" --код класса инструмента/бумаги, если нужен фондовый рынок - вводить TQBR вместо SPBFUT
iNterval=INTERVAL_M1 --таймфрейм
-- доступные таймфреймы указаны в справке Quik (qlua.chm в папке с quik) по поиску CreateDataSource
-- пример INTERVAL_H1
corrTime=3 --Время МСК. C сервера время приходит без корректировки.
pFile="w:\\temp" --путь, где будет создаваться файл
cBars=10 --сколько свечей надо вывести
--настройка параметров

function OnInit()
	out_file=io.open(pFile .."\\"..tostring(tInstr)..".csv","w")
	is_run=(out_file~=nil)
	ds=CreateDataSource(classcode, tInstr, iNterval ) --создаем источник данных
	ds:SetUpdateCallback(NewChartData) --обновление последних данных
end

function strText(int)
	local m=tostring(int)
	local mLen=string.len(int)

	if mLen==1 then
		Output="0" .. tostring(m)
	else Output=m
	end
	return Output
end

function main()
	while is_run do
	local Size=ds:Size() --Получение количества всех свечей в источнике данных

	if cBars>Size then
		cBars=Size-1
	end

	for i=Size-cBars, Size, 1 do
		local O=ds:O(i) -- Значение цена открытия свечи
		local H=ds:H(i) -- Значение High для свечи
		local L=ds:L(i) -- Значение Low для свечи
		local C=ds:C(i) -- Значение Close для свечи
		local V=ds:V(i) -- Значение Volume для свечи
		local T=ds:T(i) -- Значение Time для свечи

		sTime=os.time(T)
		datetime=os.date("!*t",sTime)

		--вывод в файл
		out_file:write(tInstr..";"..tostring(iNterval)..";"..tostring(datetime.year)..tostring(strText(datetime.month))..tostring(strText(datetime.day))..";"..tostring(strText(datetime.hour + corrTime))..tostring(strText(datetime.min))..tostring(strText(datetime.sec))..";"..tostring(O)..";"..tostring(H)..";"..tostring(L)..";"..tostring©..";"..tostring(V).."\n")
		out_file:flush() --запись данных
	end
		out_file:close()
		sleep(1000)   -- приостановка на 1 секунду
		out_file=io.open(pFile .."\\"..tostring(tInstr)..".csv","w")
	end
end
  • обсудить на форуме:
  • Quik Lua

Лимитные ордера, их исполнение и рибейты. Навеяно последним топиком уважаемого Тихой Гавани

Доброй ночи, коллеги!

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

Дело в том, что лимитные ордера и особенности их исполнения — это достаточно сложная материя, в которой разбирается ещё меньше людей, чем тех, которые зарабатывают на рынке.
На моей памяти эрудицию в этой области проявляли буквально 4-5 резидентов СЛ, но лично я запомнил только fxsaber.

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


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

Теперь я владею стратегией Hamster (наименование условное)

    • 29 мая 2020, 22:28
    • |
    • 3Qu
  • Еще
Все совпадения с реальными именами и событиями случайны.
На днях написал топик — Модель идеального трейдера — Hamster. И вот оно, ушел в магазин, и 20 Кг сахара  стратегия. Она давно вынашивалась, тестировалась, и пора ее выводить на реал. Для того и писался индикатор, показанный в предыдущем топике.
Не все так просто, конечно, как показано на картинке, детали опущены, но стратегия — вот она:
Теперь я владею стратегией Hamster (наименование условное)
Картинка, кстати, никак не подбиралась, просто последняя (сегодняшний день), на первом попавшемся инструменте.
А че, хорошее название для стратегии. Главное, редкое.

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