Избранное трейдера Сергей Сергаев

по

Ослабление рубля позитивно для металлургического и нефтегазового секторов - Атон

В марте курс рубля достиг отметки 81 относительно доллара США, но сейчас он упал до 68, и мы вновь решили напомнить инвесторам о чувствительности финрезультатов отечественных компаний горно-металлургического сектора к изменениям валютного курса. Распространение COVID-19 привело мир к кризису, который может повлечь за собой один из крупнейших экономических шоков (по оценкам Всемирного банка, экономическая активность в 2020 сократится на 5.2%).
           Ослабление рубля позитивно для металлургического и нефтегазового секторов - Атон
           Ослабление рубля позитивно для металлургического и нефтегазового секторов - Атон

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

Алготрейдинг. Получение данных свечей средствами 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

КВИК-->Lua-->Python. Трансляция данных из КВИКа в Питон в реальном времени

Всех с пятницей — самоизолятницей!
Представляю общественности Python-сервер (в 9 строк кода) для получения данных из КВИКа в Питон через луа-скрипт в режиме реального времени.
Для примера приведу получение тиковых данных по SIM0.
Нам понадобятся следующие ингредиенты.
1. Понятное дело КВИК, версии ниже 8 или 8.5.2 и выше.
2. Питон Jupyter Notebook (Anaconda 3)
3. Луа-скрипт, взятый из Jatotrader (в нем буквально изменено пару строк)
Как работает сервер можно посмотреть в этом видео (1 мин. 38 сек.) Ну и по правилам хорошего тона, естественно сам текст ниже.


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

Lua индикатор для Quik, Bollinger Bands %b Oscillator

Доброго времени всем.
Ищу Lua индикатор для Quik, Bollinger Bands %b (Bollinger Bands %BB Oscillator).  На MT4 есть в открытом виде. Возможно у кого-то уже есть переделанный в lua. Буду очень признателен в помощи его отыскать. Если не найду, придется переписывать самому в lua...(




Кому интересно, переделал индикатор Bollinger Bands (ВВ.lua) под осциллятор Bollinger Bands  %B   





Settings = {
Name = "*BB (Bollinger Bands) %B oscillator",
Period = 20,
Metod = «SMA», --(SMA, MMA, EMA, WMA, SMMA, VMA)
VType = «Close», --(Open, High, Low, Close, Volume, Median, Typical, Weighted, Difference)
Shift=2,
line = {{
Name = «Horizontal line (top)»,
Type = TYPE_LINE,
Color = RGB(221, 44, 44)
},
{
Name = «Horizontal line (bottom)»,
Type = TYPE_LINE,
Color = RGB(221, 44, 44)
},
{
Name = «Bollinger Bands %B oscillator line»,
Type = TYPE_LINE,
Color = RGB(255, 255, 255)
}
},
Round = «off»,
Multiply = 1,
Horizontal_line=«0»
}

function Init()
func = BB_B()
return #Settings.line
end

function OnCalculate(Index)
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
if HL then
return 1+HL,HL,Out
else
return nil,nil,Out
end
end


function BB_B() --Bollinger Bands %B oscillator («BB_B»)
local BB_MA=MA()
local BB_SD=SD()
local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 20)
local M = (Fsettings.Metod or SMA)
local S = (Fsettings.Shift or 2)
local VT = (Fsettings.VType or CLOSE)
if (P > 0) then
if I == 1 then
it = {p=0, l=0}
end

local b_ma = BB_MA(I, {Period=P, Metod = M, VType=VT}, ds)
local b_sd = BB_SD(I, {Period=P, Metod = SMA, VType=VT}, ds)
if CandleExist(I,ds) then
if I~=it.p then it={p=I, l=it.l+1} end
if it.l >= P and b_ma and b_sd then



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

Опыт доработки QLua-скриптов для QUIK 8.5.2

    • 15 мая 2020, 16:29
    • |
    • _sk_
  • Еще
В новой версии терминала QUIK 8.5.2 произведён апгрейд языка Lua для написания торговых скриптов с версии 5.1 до версии 5.3. Это нужно для того, чтобы корректно обрабатывать 19-значные номера заявок и сделок на срочном рынке МосБиржи. Типа number в Lua 5.1 не подходит: там все числа хранятся как double, соответственно целые числа до 2^53 = 9 007 199 254 740 992 записываются без потери точности, а 19-значные номера заявок и сделок будут больше этой границы.

Версия Lua 5.3 обратно несовместима с Lua 5.1. Я почти не использовал внешние библиотеки и для меня было два важных изменения: отказ от module (это было сделано в версии 5.2) и введение целочисленной арифметики (версия 5.3).

Для избавления от использования module пришлось переработать много кода, хотя изменения были несложные. Приведу пример. Раньше был такой код Arrays.lua для работы с массивами:

--
-- Выполнение действий с массивами.
--

local pairs = pairs
local type = type

module(...)

--- Создать копию массива (таблицы)
-- @return копию массива (таблицы)
function copy(array)
    local copy_array = {}
    if type(array) ~= "table" then
        return array
    end
    for k, v in pairs(array) do
        if type(v) == "table" then
            copy_array[k] = copy(v)
        else
            copy_array[k] = v
        end
    end
    return copy_array
end

--- Узнать, начинается ли индексация в массиве с нуля или с единицы.
-- @return 0 или 1
function base(array)
    if array[0] ~= nil then
        return 0
    else
        return 1
    end
end

--- Вычислить число элементов в массиве.
-- @return число элементов в массиве
function size(array)
    local n = 0
    for _, _ in pairs(array) do
        n = n + 1
    end
    return n
end

--- Проверить пустой или нет массив.
-- @return true/false
function isEmpty(array)
    for _, _ in pairs(array) do
        return false
    end
    return true
end

--- Получить первый индекс массива, где ничего не записано. Поиск начинается с 1.
-- @return первый индекс массива, где ничего не записано
function firstEmptyIndex(array)
    local i = 1
    while array[i] ~= nil do
        i = i + 1
    end
    return i
end


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

Моделирование Торговых Систем на Python. 2.

    • 12 мая 2020, 10:29
    • |
    • 3Qu
  • Еще

Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].

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

Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:



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

Моделирование Торговых Систем на Python. 1.

    • 09 мая 2020, 19:31
    • |
    • 3Qu
  • Еще

Для моделирование ТС на Python, прежде всего нужен сам Python. Pythonы бывают очень разные.

Самый большой и длинный Python — Anaconda (https://anaconda.org/). Скачать дистрибутив Anaconda можно здесь — Индивидуальное издание -https://www.anaconda.com/products/individual.
Я работаю именно с Anaconda. Установив Anaconda мы получаем сам Python, уже установленные значительную часть нужных и ненужных пакетов с библиотеками Python, и несколько сред разработки. И все это сразу готово к работе, и нам, по большей части, уже не придется дополнительно устанавливать пакеты и среды.

Самый маленький Python последней версии 3.8.2. скачивается с сайта самого Python — https://www.python.org/. Это, практически, только сам язык, компилятор и минимальный набор пакетов. Сделать с ним практически ничего невозможно, и для работы придется постоянно устанавливать нужные пакеты. Среду разработки придется также устанавливать самостоятельно.
Этот Python больше подходит для запуска и работы с уже отлаженными законченными программами.



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

Трейдинг. Краткая инструкция для спекулянтов.

    • 07 мая 2020, 20:22
    • |
    • 3Qu
  • Еще
Может также быть полезна и части инвесторов. Но у  их большей части свои причуды, и им эта инструкция неприемлема.
Начнем с того, что рынок по большей части непрогнозируем и представляет из себя случайный процесс. Будем исходить из этого.
Хотя основная наша задача, все таки, получение прибыли, однако, еще более насущная — минимизация убытков.
Итак, внутренний голос (или что там у вас? ТА или даже ТС, говорите.) сказал нам, что цена будет некоторое время расти. А если не будет? — на этот вопрос мы и попробуем ответить перед входом в сделку. Нам следует минимизировать убытки, если мы не правы, и расти, таки, не будет. Кто хочет, пусть ставит стопы — это их личное дело. Мы не будем.
Мы будем ждать. Наша сделка начнется со скальпинга и должна закончится либо входом в интрадей сделку, либо получением скальпинг-прибыли, либо скальпинг-убытком. Т.е., в случае неудачи, мы закрываемся в безубыток, с небольшой прибылью или небольшим убытком. Далее, ждем следующей возможности.
В итоге, после нескольких неудачных попыток входа, имеем либо небольшую прибыль от скальпинга, либо мизерный убыток — никаких %% убытка, заметьте.

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

Наш птичий язык

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

Чтобы лучше ориентироваться в нашем птичьем языке, предлагаю вам словарь-помощник.

Быки – игроки, мечтающие о том, что все будет гораздо выше и толкающие цены вверх.

Бычара – ярко выраженный, несгибаемый, «упертый» бык. Удивительная штука: в жизни бывает нормальный человек, но как он «раскрывается» на полях биржевых сражений! А ведь никто бы не мог подумать. 😀

Мамба – наша уважаемая Московская биржа, произошло от предыдущего официального названия биржи – ММВБ. Сам грешу этим. Что поделаешь – привычка.

Сиплый – S&P 500. Не частое выражение, но сочное.  

Вдуть, запарить, впарить, слить – продать. «Вдули ему по самым хаям» – крылатое выражение сейлзов, работающих с клиентами. В обьяснении не нуждается. Как говорится, «поубивал бы их всех...» Циничные люди. Бог придумал пиратов, а потом решил, что они тихие добрые агнцы. И тогда он создал сейлзов… Кровожадный народец, знаете ли. Но куда без них?😉



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

Северсталь. Обзор операционных показателей за 1-ый квартал 2020 года. Прогноз финансовых показателей и дивидендов

Северсталь представила операционные результаты за 1-ый квартал 2020 года.

Объем производства чугуна увеличился на 2% к предыдущему кварталу и составил 2.41 млн. тонн (4 кв. 2019: 2.36 млн. тонн) в связи с завершением краткосрочных работ на доменных печах в 4 кв. 2019.
Производство стали увеличилось на 5% и составило 2.85 млн. тонн (4 кв. 2019: 2.71 млн. тонн) в связи с увеличением количества плавок в 1 кв. 2020 и завершением краткосрочных работ на конвертерных и электросталеплавильных мощностях в 4 кв. 2019.

Снижение выплавки стали к 1-му кварталу 2019 года вызвано продажей сортового завода в Балаково.

Производство концентрата коксующегося угля на «Воркутауголь» сократилось из-за уменьшения объемов производства горной массы в связи с перемонтажом лав на шахте «Комсомольская» в 1 кв. 2020.

Производство железорудного сырья выросло на 1% и 7% относительно прошлого квартала и 1-го квартала 2019 года соответственно.

Северсталь. Обзор операционных показателей за 1-ый квартал 2020 года. Прогноз финансовых показателей и дивидендов

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

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