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

по

Автоматизация торговли для нищеброда. Парсер+исходники для автоматизации торговли через Tradingview.

Добрый день, друзья!

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

Возможности сайта Tradingview:

  1. Написание торговых стратегий любой сложности с использование большого количества встроенных индикаторов и уже готовых скриптов. По мне встроенный язык PinrScript (скриптовый язык понятный даже не программисту) на много удобнее, чем построение робота из визуальных блоков (а главное точнее быстрее).
  2. Тестирование стратегий с использование внутреннего тестера (модуль оптимизации, к сожалению, отсутствует).
  3. Большое трейдерское сообщество, можно подчерпнуть интересные идеи.
  4. График котировок в режиме реального времени, а главное всё вышеописанное бесплатно.


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

график Газпром в долларах для Квика

    • 25 октября 2018, 19:48
    • |
    • gardist
  • Еще
1. В папке с Квиком создаем директорию LuaIndicators.
2. В этой папке создаем файл gazp_usd.lua, туда записываем:
Settings = 
{
   Name = "GAZPROM_USD",
   tag = "GAZP",
   tag1 = "GAZP_USDRUB",
   line=
   {
      {Name = "line1", Color = RGB(0, 0, 255), Type = 1,Width = 1}
   }
}

vPrice=1;

function Init()
   return 1
end

function OnCalculate(index)
	local vOutFlag=0;
	local vGazp =(getCandlesByIndex(Settings.tag, 0, index-1, 1)[0].close or 1) ;
	local vUSDRUB=(getCandlesByIndex(Settings.tag1, 0, index-1, 1)[0].close or 1);
	if vGazp>0 then
		vOutFlag=1;
	else
		vOutFlag=0;
	end;
	if vUSDRUB>0 then
		vOutFlag=1;
	else
		vOutFlag=0;
	end;
	if vOutFlag > 0 then
		local Out = vGazp/vUSDRUB;
		vPrice=Out;
	end;
	return  vPrice
end
3. В Квике создаем график с курсом доллара (USDRUB_TOM).
4. К графику добавляем график Газпрома (ГАЗПРОМ ао).
5. Идем в настройки графика, в разделе «Дополнительно» указываем «Идентификатор»: GAZP -для графика с ценой Газпрома, GAZP_USDRUB -для графика с курсом.
6. Добавляем индикатор (выбираем из выпадающего списка GAZPROM_USD).
график Газпром в долларах для Квика
7. Уменьшаем ненужные поля. Если график не отобразился — даблкликаем на графике — жмем «Применить»:

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

QUIK: Бенчмарк ОФЗ к ставке ЦБ

    Может кому будет интересен скрипт на QLUA, который выступает простым бенчмарком ОФЗ с постоянным купоном к ставке ЦБ.
Основные параметры доходность и премия к ставке ЦБ, с учетом дюрации.
Скрипт не работает онлайн (оперативность тут не принципиальна), при запуске собирает параметры в таблицу и выводит на экран.
В дальнейшем планируется эти данные использовать для анализа премии доходности по дюрации для муниципальных и корпоративных облигаций к ОФЗ.

QUIK: Бенчмарк ОФЗ к ставке ЦБ


    Код скрипта на github (на github две версии одна в utf-8 для просмотра и основная версия в win1251, т.к. quik понимает только его):
github.com/trantor77/lua_scripts/boundsOFZ.lua

    Код скрипта:
--переменные
keyRateCB = 7.5
classCode = "TQOB"

function CreateTable()
    t_id = AllocTable()
    AddColumn(t_id, 0, "Бумага", true, QTABLE_STRING_TYPE, 15)
    AddColumn(t_id, 1, "Цена", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 2, "Доходность, %", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 3, "Дюрация, лет", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 4, "Купон, %", true, QTABLE_DOUBLE_TYPE, 15)
    AddColumn(t_id, 5, "Премия к ЦБ, бп", true, QTABLE_INT_TYPE, 15)
    AddColumn(t_id, 6, "Погашение", true, QTABLE_STRING_TYPE, 15)
    t = CreateWindow(t_id)
    SetWindowCaption(t_id, "ОФЗ")
end

function string.split(str, sep)
    local fields = {}
    str:gsub(string.format("([^%s]+)", sep), function(f_c) fields[#fields + 1] = f_c end)
    return fields
end

function getParamNumber(code, param)
    return tonumber(getParamEx(classCode, code, param).param_value)
end

function formatData(prm)
    return string.format("%02d.%02d.%04d", prm%100, (prm%10000)/100, prm/10000)
end

CreateTable()

arr = {}
sec_list = getClassSecurities(classCode)
sec_listTable = string.split(sec_list, ',')
j = 0
for i = 1, #sec_listTable do
    secCode = sec_listTable[i]
    securityInfo = getSecurityInfo(classCode, secCode)
    short_name = securityInfo.short_name
    if short_name:find("ОФЗ 26") ~= nil then
        j = j + 1
        r = {}
        r["short_name"] = short_name
        r["price"] = getParamNumber(securityInfo.code, "PREVPRICE")
        r["yield"] = getParamNumber(securityInfo.code, "YIELD")
        r["duration"] = getParamNumber(securityInfo.code, "DURATION")/365
        couponvalue = getParamNumber(securityInfo.code, "COUPONVALUE")
        couponperiod = getParamNumber(securityInfo.code, "COUPONPERIOD")
        r["coupon"] = ((365/couponperiod) * couponvalue)/10
        r["bonus"] = (r["yield"] - keyRateCB)*100
        r["mat_date"] = getParamNumber(securityInfo.code, "MAT_DATE")
        table.insert(arr, j, r)
    end
end

table.sort(arr, function(a,b) return a["duration"] < b["duration"] end)

for j = 1, #arr do
    row = InsertRow(t_id, -1)
    SetCell(t_id, row, 0, arr[j]["short_name"])
    price = arr[j]["price"]
    SetCell(t_id, row, 1, string.format("%.2f", price), price)
    yield = arr[j]["yield"]
    SetCell(t_id, row, 2, string.format("%.2f", yield), yield)
    duration = arr[j]["duration"]
    SetCell(t_id, row, 3, string.format("%.2f", duration), duration)
    coupon = arr[j]["coupon"]
    SetCell(t_id, row, 4, string.format("%.2f", coupon), coupon)
    bonus = arr[j]["bonus"]
    SetCell(t_id, row, 5, string.format("%.0f", bonus), bonus)
    mat_date = arr[j]["mat_date"]
    SetCell(t_id, row, 6, formatData(mat_date), mat_date)
end
  • обсудить на форуме:
  • Quik Lua

Индикатор ThinkOrSwim рисует на графике линии вчерашних Hi, Low, Close, Open и сегодняшнего Open

Рисует линии вчерашних Hi, Low, Close, Open и сегодняшнего Open на графике
Очень удобно, наглядно показывает важные уровни вчерашнего дня.
Индикатор ThinkOrSwim рисует на графике линии вчерашних Hi, Low, Close, Open и сегодняшнего Open

#Thinkorswim studies 
#Рисует линии вчерашних Hi, Low, Close, Open и сегодняшнего Open на графике.
#Thinkorswim  https://radchenkovy.com/thinkorswim-live

input sPeroid = {default DAY, WEEK, MONTH};
input iHigh = {default "yes", "no"};
input iLow = {default "yes", "no"};
input iClose = {default "yes", "no"};
input iOpen = {default "yes", "no"};
input iTodayOpen = {default "yes", "no"};
plot pHigh = if !iHigh then high(period = sPeroid)[1] else Double.NaN;
plot pLow = if !iLow then low(period = sPeroid)[1] else Double.NaN;
plot pClose = if !iClose then close(period = sPeroid)[1] else Double.NaN;
plot pOpen = if !iOpen then open(period = sPeroid)[1] else Double.NaN;
plot pTodayOpen = if !iTodayOpen then open(period = sPeroid)[0] else Double.NaN;

pHigh.SetDefaultColor (Color.GREEN);
pHigh.SetPaintingStrategy(PaintingStrategy.DASHES);
pLow.SetDefaultColor(Color.RED);
pLow.SetPaintingStrategy(PaintingStrategy.DASHES);
pClose.SetDefaultColor (Color.GRAY);
pClose.SetPaintingStrategy(PaintingStrategy.DASHES);
pOpen.SetDefaultColor (Color.WHITE);
pOpen.SetPaintingStrategy(PaintingStrategy.DASHES);
pTodayOpen.SetDefaultColor (Color.WHITE);
pTodayOpen.SetPaintingStrategy(PaintingStrategy.DASHES);;

Полная библиотека индикаторов, фильтров и сканеров для Thinkorswim в этом блоге  bit.ly/2vKq4F8


Парсер котировок Финама

    • 30 августа 2018, 01:12
    • |
    • Albus
  • Еще
Пост будет полезен только тем, кто кодит на Луа.
---
Написал простенькую функцию, которая работает с архивом графиков Финама. На Финаме есть история торгов за много лет. Это полезно, чтобы прогнать вашу стратегию на максимально доступных исторических данных.
Архив Финама находится здесь: https://www.finam.ru/profile/moex-akcii/sberbank/export/
---
Заходите по ссылке, видите там:
Парсер котировок Финама
Там где «Формат записи в файл» выбираете как у меня: DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOL. Можно брать и другие форматы, но тогда код функции придётся переписать.
---
Выбираете вверху даты с 1 января по 31 декабря и год за годом сохраняте себе на компьютер вот так:
Парсер котировок Финама

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

Как Python помогает заменить финконсультантов

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

Во всем этом задействуем Pandas и минимизируем количество циклов. Погруппируем времянные ряды и порисуем графиков. Познакомимся с мультииндексами и их поведением. И всё это в Jupyter на Python 3.6.



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

SWT-метод. 1. Классический технический анализ

СОДЕРЖАНИЕ

1. Классический технический анализ
2. SWT-метод. Теория
3. SWT-метод. Практика применения
4. Пример анализа трендов
5. Торговые тактики

6. Дополнительные условия (фильтры сделок)
7. Риск-менеджмент

Часть 1. Классический технический анализ и проблемы его применения

СОДЕРЖАНИЕ

1.1. Аналитическая поддержка торговых операций
1.2. Что такое тренд в техническом анализе? Виды трендов
1.3. Глубина коррекции как критерий смены типа тренда

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

Как быстро из PostgreSQL и ClickHouse получить в Python длинные истории цен

Разбил много ☕кружек в поисках решения для ️быстрого получения длинных историй цен для большого количества активов в Python. Ещё имел смелость желать работать с ценами в numpy-массивах, а лучше сразу в pandas.

Стандартные подходы в лоб работали разочаровывающе, что приводило к выполнению запроса к БД в течение 30 секунд и более. Не желая мириться, я нашёл несколько решений, которые полностью меня удовлетворили.
Как быстро из PostgreSQL и ClickHouse получить в Python длинные истории цен



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

Новый проект

Новый проект

Круто! Буду пользоваться
Не круто! Не буду пользоваться
Всего проголосовало: 13
Привет, друзья!
Решил сделать новый проект. Его суть в следующем:
У каждого трейдера есть какая-то стратегия торговли, и наверняка не очень удобно постоянно сидеть возле монитора, другое дело, если тебе на телефон приходит сигнал, по твоей стратегии и далее ты уже принимаешь решение: стоит входить или нет, либо можно будет подписаться на стратегию другого трейдера, если он даст приглашение, конечно. Новый проект как раз будет реализовывать это. Буду рад, если вы проголосуете)

Торговля с индикатором On Balance Volume (OBV)

    • 04 апреля 2018, 07:19
    • |
    • RUH666
  • Еще
Торговля с индикатором On Balance Volume (OBV)
On Balance Volume (OBV) — это индикатор объема, который предназначен для измерения давления, которое покупатели и продавцы оказывают на рынки. Его подход заключается в том, чтобы добавлять объем в дни, когда цена поднимается и вычитать объем в дни, когда цена падает. Разработанный в 1963 году графическим аналитиком Джо Гранвилем, вероятно, был самым ранним примером показателя, который измерял положительный и отрицательный объемный поток.

Этот способ просмотра объема вычисляется относительно простой формулой (автоматическая на всех современных платформах):
Если цена закрытия выше предыдущей цены закрытия, то: Текущий OBV = Предыдущий OBV + Текущий объем

Если цена закрытия ниже предыдущей цены закрытия, то: Текущий OBV = Предыдущий OBV — Текущий объем

Если цена закрытия равна предыдущей цене закрытия, то: Текущий OBV = Предыдущий OBV (без изменений)

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

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

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