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

по

Вопрос для обсуждения: Ваше мнение об Ишимоку. Это действительно стоящая вещь или профанация?

    • 09 января 2019, 12:12
    • |
    • SectorC
  • Еще
Кто-то торгует по Индикаторам, кто-то их терпеть не может. Для кого-то Уровни — это все. Есть прекрасные школы торговли по Барам. Здесь у каждого свои предпочтения. А вот индикатор Ишимоку почти не встречается в обсуждениях, а если и упоминают о нём, то крайне редко. Так что же это за индикатор Ишимоку? Если это действительно стоящая вещь то как его лучше применять, с какими параметрами, что бы добиться наилучшего результата?

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

    • 08 января 2019, 11:21
    • |
    • Albus
  • Еще
Недавно начал учить язык программирования Python. Жаль, что я к нему приступил в 36 лет, а не в 16. Он прекрасно подходит для анализа исторических данных. Выкладываю скрипт, который заходит на сайт финама, скачивает оттуда котировки акций и записывает их в файл quotes.txt. Для того, чтобы всё работало, должен быть установлен Питон https://www.python.org/.
---
В интернете есть информация, как качать котировки с Финама не вручную, а с помощью скрипта. Вот эти статьи. Ими я пользовался при написании своего кода:
Программный сбор данных о котировках
Загрузка котировок валют с сайта finam.ru
Дополнительно пришлось хорошенько поработать головой, чтобы адаптировать эту информацию для моих нужд. Там кое-что устарело и коды авторов потребовали доработки. Также в моём скрипте вы найдёте цифровые символы, которые соответствуют каждой акции. Например Алроса лежит на сайте финама под цифрой 81820.

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

Торговый робот на Lua для QUIK.

    • 27 декабря 2018, 09:39
    • |
    • XXM
  • Еще

4 года и 4 месяца прошло с выхода поста «Торговый робот на LUA для QUIK» (https://smart-lab.ru/blog/200767.php) про конструктор Lbot. За это время он повзрослел, лишился графического интерфейса и… превратился в младшего брата для Lbot3D. И если раньше для Lbot была пробная версия (с одним инструментом и одним лотом), то теперь, фактически, сам превратился в пробную версию для Lbot3D и, с этого дня, предоставляется в свободное пользование с полным функционалом:

Торговый робот на Lua для QUIK.

Скачать Lbot180.zip можно тут: drive.google.com/open?id=1DL9jGEBm2Uhk89PcQdlK-ObaOe2zihnx
INI-файл написан для демо-QUIK на 3 инструмента — Сбербанк, Газпром и Лукойл. Стратегия на Газпроме — безиндикаторная, на Сбербанке — на скользящих средних, на Лукойле — на пересечениях MACD.

encoding = "UTF-8"
FREQUENCY = 1000
account = NL0011100043, 10110
PositionSize = 300000
xy = 421, 0, 859, 118
;-------------------------------------------------------------------------------
[GAZP]
Security = GAZP, QJSIM, Gazp_moex
WorkSize = 3		//  рабочий объем, в штуках;
LossLimit = 100		// ограничение на убыток по стратегии
OpenSlippage = 10	// допустимое проскальзывание на сделке, в количестве минимальных шагов цены;
OpenLong =  {Close, 1} < {High, 2}	// цена 'close' предыдущей 'полной' свечи превысила 'high' предшествующего ей бара;
OpenShort = {Close, 1} > {Low, 5-2}	// цена 'close' предыдущей 'полной' свечи принизила 'low' 5-2 баров;
StopLoss = 2
TakeProfit = 3, 1, 1
EOD = 18:29:00	//закрытия позиции в указанное время.
autoBot = Y
[SBER]
Security = SBER, QJSIM, Sber_moex
WorkSize = 10
LossLimit = 100
OpenSlippage = 10
OpenLong	= {Ema1} > {Ema2}
CloseLong	= {Ema1} < {Ema2}
OpenShort	= {Ema1} < {Ema2}
CloseShort	= {Ema1} > {Ema2}
autoBot = Y
[LKOH]
WorkSize = 2
Security = LKOH, QJSIM, Lkoh_moex
LossLimit = 225
OpenSlippage = 10
OpenLong	= cross(macd_Lkoh.0, macd_Lkoh.1)
OpenShort	= cross(macd_Lkoh.1, macd_Lkoh.0)
;OpenLong =  {Close, 1} < {Low, 5-2}
;OpenShort = {Close, 1} > {High, 2}
StopLoss = 30
TakeProfit = 50, 10, 10
autoBot = Y


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

Визуализация лимитных объемов на графике


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

Визуализация лимитных объемов на графике



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

Визуализация лимитных объемов на графике

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

Тестирование стохастического осциллятора на исторических данных

    • 27 ноября 2018, 18:59
    • |
    • AlexChi
  • Еще

Тестирование стохастического осциллятора на исторических данных


          В данной статье нас интересует возможность проверить на исторических данных эффективность использования стохастического осциллятора для прогнозирования будущего движения цены. Данный индикатор технического анализа показывает положение текущей цены относительно диапазона цен за определенный период в прошлом и измеряется в процентах.  Чтобы рассчитать значение стохастического осциллятора можно воспользоваться следующей формулой: K = (C – L_min)/(H_max-L_min)*100,

         где С – цена сегодняшнего закрытия,

         L_min – минимальная цена за расчетный период,

         H_max — максимальная цена за расчетный период.

         В качестве расчетного периода будем использовать период равный 5 дням. При этом считается, что стохастический осциллятор дает сигнал на покупку когда K был < 20%, а потом повысился и стал больше 20%, а сигнал на продажу данный индикатор дает тогда, когда K был > 80%, а потом понизился и стал меньше 80%.



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

Диапазонная логика. Конспект книги М.Фишера Логический трейдер. Ч2

Ссылка на первую часть конспекта: https://smart-lab.ru/blog/copypaste/504297.php

Далее по тексту: ДО — диапазон открытия.

4.Фактор времени

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

Если после инициации позиции через точку А цена никуда не идет 20-30 минут, очевидно, что шансы не на нашей стороне и целесообразно ликвидировать позицию.

Итак, как учесть фактор времени в торговле? Очень просто:

 

минимум — инструмент должен торговаться на требуемом уровне ½ времени ДО.

 

Максимум — если инструмент не пошел куда мы ждем в течение 1 времени ДО — ликвидируем позиции.



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

Автоматизация торговли для нищеброда. Парсер+исходники для автоматизации торговли через 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

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