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

по

Связь Lua -> ваша программа. RAM Disk.

    • 11 мая 2021, 21:33
    • |
    • 3Qu
  • Еще
Я, вроде, уже писал подобный пост. Давно. Но, новое — хорошо забытое старое.
Очень многие неплохо владеют основами программирования, но написать DLL, связь через TCP или что-то другое для экспорта-импорта в Lua — это достаточно сложная процедура, и требует дополнительных знаний и много времени. Однако, если такую связь как-то по простому реализовать, то решились бы многие проблемы обмена данными с C#, Python и другими средами, и не надо вникать во всяческие C-API и прочие премудрости.
Однако, есть достаточно простой и доступный способ — обмен данными через файлы. Например, так:
1. программа Lua пишет строку (строки) данных в формате CSV в файл data.csv,
2. программа Lua создает пустой файл flag.ddd,
3. ваша программа проверяет наличие файла flag.ddd, что означает, что данные готовы к чтению,
4. при наличии файла flag.ddd программа читает данные файла data.csv и удаляет файл flag.ddd,
5. программа Lua проверяет наличие файла flag.ddd, и если этот файл отсутствует пишет строку (строки) данных в файл data.csv (см. п.1)
При обратном обмене происходит все тоже самое, только имена файлов другие.

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Вопрос оптимизаторам ТС и любителям МАшек

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

Пусть у нас есть любимый актив и его история в минутных барах. Достаточная. Год. Для FX это примерно 360000 баров +-.

Выберем любимый индикатор. Пусть это будет комбинация МАшек с неизвестными параметрами.

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

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

С уважением

Портфель как замена прогноза?

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

Недавно столкнулся со следующей проблемой.

Есть набор систем, которые (в теории) должны хорошо (с положительным МО) отрабатывать следующий таймфрейм.
Попытка выбрать из них оптимальный прототип потерпела фиаско (ну, либо у меня руки кривые).
В итоге — запустил портфель из всех систем/прототипов — в среднем он работает по плану.

МЫСЛЬ.
Если из набора кандидатов в чемпионы трудно выбрать самого перспективного — следует всех заставить бежать к финишу.
Но это только в том случае, если мы знаем, что все кандидаты добегут до финиша за время, не более, чем...

Что вы думаете по этому поводу, коллеги?

С уважением

Опционы. Выбор дельты для дельта-хеджа

В последнее время тема выбора способа дельта-хеджа привлекает внимание публики.
Я решил использовать возможности своего софта и базу данных с целью сравнить различные подходы к решению этого вопроса.
Опционы. Выбор дельты для дельта-хеджа

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

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

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

Почему трейдеры используют curve fitting?

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

Все мы, в разное время, занимались онанизмом подгонкой торговой системы на исторических данных.
Занятие это полезное и увлекательное. Но что заставляет нас думать, что «подогнанная» система будет работать в будущем?

Попробую провести математическую аналогию.
Возьмем задачу построения многочленов, наименее уклоняющихся от нуля (на некотором отрезке, ессно). Решение ее давно известно (Чебышев и более поздние товарищи).
Однако за пределами исходного отрезка (интервал оптимизации) эти многочлены начинают быстро (полиномиально) расти или падать. Т.е. как раз максимально уклоняться от нуля )))

ВОПРОС:
Когда мы оптимизируем эквити на отрезке — что заставляет нас думать, что за пределами отрезка она будет расти?

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

Как всегда с уважением и просьбой в теме не срать

Простой бот для крипто биржи Deribit

Нашёл тестовое задание на разработчика в один фонд. Само задание можно посмотреть в файле. Нужно написать робота для крипто биржи Deribit. Из требований:
1. Написать на python 3
2. Нужно использовать asyncio так как API Deribit работает через websockets
3. Для управления зависимостями использовать poetry
4. Запуск робота через docker и docker compose
5. Написать пару тройку юнит тестов
6. Данные по сделкам сохранять в mysql базу данных.

Не долго думая решил его закодить, потренироваться лишний раз в программировании, заодно разобраться в API Deribit.

Базу данных использовал sqlite. Юнит тесты пока не делал.

Бот можно использовать как пример работы с API Deribit. Код работает как есть без всяких гарантий.

Ссылку на гитхаб можно найти у меня в телеграме: t.me/zenoftrading/68
  • обсудить на форуме:
  • Deribit

Эстиматор исторической волатильности для TradingView от balipour, Russian edition

    • 28 марта 2021, 09:37
    • |
    • tashik
  • Еще
В солнечный день хочется порадовать мир. Имею представить сообществу красивую работу некоего balipour, сделанную для tradingview и переведенную мною на русский язык. Это эстиматор исторической волатильности по различным моделям с встроенным процентным рейтингом волы.

Как подключить его себе в трейдингвью:
0. Скачайте код индикатора отсюда Откройте в любом текстовом редакторе (Блокнот подойдет)
1. Войдите в свою учетку, откройте график.
2. Внизу под графиком будут вкладочки — нам нужна Редактор Pine.
3. На вкладке откройте пустой файл (кнопка Открыть -> Новый индикатор), удалите в открывшемся скрипте все, что там есть, и вставьте туда код эстиматора. Сохраните под понятным Вам именем, нажав там справа Сохранить.
4. После сохранения можно нажать там же кнопку Добавить на график

Получится такое

Эстиматор исторической волатильности для TradingView от balipour, Russian edition

После закрытия окна TradingView или индикатора, повторно поместить его на график можно из Индикаторы (на верхней панели над графиком) — Мои скрипты




Хороший прогноз знака будущего приращения цены - это Грааль?

Нет.

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

К сожалению это совсем не так.

В действительности на маленьких таймфреймах определить знак будущего приращения цены совсем просто.

Возьмем минутные бары по любому активу (ну, тики тоже подойдут). 5, 15 и более минутки уже не подойдут.
Актив в самом деле может быть любой. Валюты, металлы, крипта, товары, индексы, акции, фьючерсы (купонные инструменты не проверял, если честно, но думаю, что и там все будет Ок).

Строим тривиальную трендовую систему:
— если на предыдущем баре цена выросла — покупаем, если нет — продаем

Если цена актива — это x(i), то приращение эквити выглядит так:
(x(i)-x(i-1))*sgn(x(i-1)-x(i-2))
В Экселе моделируется за 1 мин. Только нужно заменить sgn на ЗНАК() в русскоязычной версии )))

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

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

Как отправлять сообщения из Квика в Телеграм! И писать в файлик разную дребедень!


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

Про ботов в телеге здесь  https://core.telegram.org/bots
в гугле  куча инфы  и примеров, как чего куда и зачем.


--
--СКРИПТ Niki для smart-lab.ru 260321  ревизия
---------------------------------------

-- Флаг для поддержания работы функции main
is_run=true

fut_limit_old =0
fut_limit_max =0
kgo_old       =0.5


function main( ... )  -- чудотворная функция внутри  которой все  работает

		   
		    --"r": режим чтения (по умолчанию);
			--"w": режим записи;
			--"a": режим добавления;
			--"r+": режим обновления, все предыдущие данные сохраняются;
			--"w+": режим обновления, все предыдущие данные стираются;
			--"a+": режим добавления и обновления, предыдущие данные сохраняются, запись разрешена только в конец файла.     b бинарные файлы
		   
		   -- Пытается открыть файл в режиме "чтения/записи"
		   f = io.open(getScriptPath().."\\Limits.txt","a");
		   -- Если файл не существует
		   if f == nil then 
			  -- Создает файл в режиме "записи"
			  f = io.open(getScriptPath().."\\Limits.txt","w"); 
			  -- Закрывает файл
			  f:close();
			  -- Открывает уже существующий файл в режиме "чтения/записи"
			  f = io.open(getScriptPath().."\\Limits.txt","a");
		   end;

    while is_run do    
        sleep(1000)   -- 1000 = 1 секунда    --волшебная пауза в  работе  скрипта
		
		if getFuturesLimit("A111", "A111111", 0, "SUR") ~= nil then     -- защита от  пустых таблиц    -- впишите ваши данные из Квика
		
			-- %c   - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11) 
			-- %x   - дата (пример, 09/16/98)
			-- %X   - время (пример, 23:48:10)
			
			seconds = os.time(); -- в seconds будет значение 1427052491
			date1 = os.date("%x",seconds);  --  %c   - дата (по-умолчанию) (пример, 03/22/15 22:28:11) 
			time1 = os.date("%X",seconds);  --  %c   - время (по-умолчанию) (пример, 03/22/15 22:28:11) 
			
			
			--[[
			liquidity_coef           --NUMBER  Коэффициент ликвидности  
			cbp_prev_limit           --NUMBER  Предыдущий лимит открытых позиций на спот-рынке» 
			cbplimit                 --NUMBER  Лимит открытых позиций  
			cbplused                 --NUMBER  Текущие чистые позиции  
			cbplplanned              --NUMBER  Плановые чистые позиции  
			varmargin                --NUMBER  Вариационная маржа  
			accruedint               --NUMBER  Накопленный доход   
			cbplused_for_orders      --NUMBER  Текущие чистые позиции (под заявки)  
			cbplused_for_positions   --NUMBER  Текущие чистые позиции (под открытые позиции)  
			options_premium          --NUMBER  Премия по опционам  
			ts_comission             --NUMBER  Биржевые сборы  
			kgo                      --NUMBER  Коэффициент клиентского гарантийного обеспечения  
			currcode                 --STRING   Валюта, в которой транслируется ограничение  
			real_varmargin           --NUMBER  Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены  
			--]]
			
			
			fut_limit    = getFuturesLimit("A111", "A111111", 0, "SUR").cbplused_for_positions    --  NUMBER  Текущие чистые позиции (под открытые позиции)     -- впишите ваши данные из Квика
			varmargin    = getFuturesLimit("A111", "A111111", 0, "SUR").varmargin                 -- впишите ваши данные из Квика
			accruedint   = getFuturesLimit("A111", "A111111", 0, "SUR").accruedint                -- впишите ваши данные из Квика
			ts_comission = getFuturesLimit("A111", "A111111", 0, "SUR").ts_comission              -- впишите ваши данные из Квика
			kgo          = getFuturesLimit("A111", "A111111", 0, "SUR").kgo                       -- впишите ваши данные из Квика
			
			profit = varmargin + accruedint;
	 
			--if  math.abs(fut_limit-fut_limit_old) > 10000 then       -- каждые 10000 рублей изменения ГО,   слишком частый файл печати 
			if  math.abs(fut_limit-fut_limit_old) > 100000 then       -- каждые 100000 рублей изменения ГО,   настраиваем под себя.
			
				open_lim     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit                  --NUMBER  Лимит открытых позиций
				f:write( tostring(date1).."  "..tostring(time1).."  ".."ГО: "..tostring(fut_limit).."  ".."Профит: "..tostring(profit).."  ".."Комис: "..tostring(ts_comission).."  ".. "КГО: "..tostring(kgo).."  Lim: "..tostring(open_lim)..  "\n"); -- "\n" признак конца строки
				--f:write( tostring(date1).. "  " ..tostring(time1)..  "  " .. "BID: " .. tostring(res_trans) .. "  " .. "ASK: " ..  tostring(MXU8ask_vol) .. "\n"); -- "\n" признак конца строки
				   -- Сохраняет изменения в файле на диск
				f:flush();
				
				fut_limit_old = fut_limit;
			end
			
			if fut_limit_max == 0  then   								
				fut_limit_max = fut_limit;
			end	
				
			if ( math.abs(fut_limit-fut_limit_max) > 1000000 and fut_limit>0 ) then   	  -- настраиваем под себя							
				message( tostring(fut_limit) )   ----сообщение в Квик--
				--message( tostring(time1) )
				---------------------------------------- отправляем сообщение в  Телеграмм--
				pos_free     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplplanned               --NUMBER  ГО свободных денег от позы без пониженного ГО 
				open_lim     = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit                  --NUMBER  Лимит открытых позиций
				tg_message = tostring(open_lim).."   ГО:"..tostring(fut_limit).."   Поза:"..tostring(open_lim-pos_free) 
				os.execute('curl  "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ')    -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
				----------------------------------------
				-- Пример строки   https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text=  + Привет Квик!
				----------------------------------------
				fut_limit_max = fut_limit;
			end	
			
			if  math.abs(kgo-kgo_old) > 0 then
				---------------------------------------- отправляем сообщение в  телеграмм
				tg_message = tostring(kgo).." Внимание! Изменился коэффициент КГО" 
				os.execute('curl  "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ')    -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
				----------------------------------------
				-- Пример строки   https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text=  + Привет Квик!
				----------------------------------------
				kgo_old = kgo;
			end
		end
		
		
		
    end
f:close();  -- закрываем файл печати.
end		
		

-- Остановка скрипта из Квика
function OnStop(stop_flag)

    is_run=false

end


( Читать дальше )
  • обсудить на форуме:
  • QUIK

Использование API Fmp Cloud для отбора акций по дивидендам на Nasdaq с помощью Python

    • 21 марта 2021, 20:02
    • |
    • Aleks
  • Еще

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

Что такое дивидендная доходность?

Возьму определение из Википедии. Дивиде́ндная дохо́дность (англ. dividend yield) — это отношение величины годового дивиденда на акцию к цене акции. Данная величина выражается чаще всего в процентах.

Пример

При цене акции ОАО «Лукойл» 1124,37 рублей и дивиденде 28 рублей на акцию дивидендная доходность будет равна:

Использование API Fmp Cloud для отбора акций по дивидендам на Nasdaq с помощью Python
Так же необходимо обратить внимание, что многие растущие компании, такие как для примера Amazon и Yandex, не выплачивают дивиденды, поскольку они реинвестируют всю прибыль в развитие бизнеса. Поэтому дивидендная доходность для этих фирм будет равна нулю.

Расчет дивидендной доходности с помощью Python



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

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