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

по

Зум с Седым, часть вторая

Продолжение. Начало: https://smart-lab.ru/blog/624051.php

— То есть ты утверждаешь, что можно наблюдать за экономикой онлайн?

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

— потребитель?

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

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

Прикладная широта рынка (объяснение категорий акций под капотом индексов - много картинок)

Этот большой пост предназначен как справочный для работы с таблицами в постах серии «S&P500 под капотом», крайне рекомендуется для углублённого понимания концепций. Не пропустите следующий большой исследовательский пост, он будет посвящён анализу двух последних вершин рынка и курвфиттингу созданию правил маркет-тайминга на основе подкапотных категорий.

Традиционное измерение широты

Анализ широты рынка нужен для определения участия масс в движении. В общем случае для этого используются счётчики Advances/Declines и линия A/D на их основе.

 

2019-06-07
New Highs / Lows   Adv   Dec  Unch  AdvVol  DecVol UnchVol  A/D   A/DV
 ----------------------------------------------------------------------
   NYSE  187   51  1377   570    64  2059.3  1023.9    92.2  2.42  2.01
 NASDAQ  105  133  1563   952   146  1389.9   461.0    68.0  1.64  3.01
   AMEX    7   10   129    78    33   251.1    20.7    17.6  1.65 12.11
  Total ---------------------------------------------------------------
   4912  299  194  3069  1600   243  3700.3  1505.6   177.8  1.92  2.46



Модифицированное измерение широты

Недостаток стандартных A/D-счётчиков в том, что любой незначительный подъём на $0.01 считается, как advance, и любое незначительное падение считается как decline. Поэтому целесообразно применять фильтр по росту/падению цены, например, считать за advance/decline только если цена поднялась/опустилась на $0.03 и более:

2019-06-07
New Highs / Lows   Adv   Dec  Unch  AdvVol  DecVol UnchVol  A/D   A/DV
 ----------------------------------------------------------------------
   NYSE  187   51  1260   475   276  1860.9   853.1   461.4  2.65  2.18
 NASDAQ  105  133  1344   754   563  1336.5   370.4   212.0  1.78  3.61
   AMEX    7   10    93    42   105   239.7    10.3    39.4  2.21 23.16
  Total ---------------------------------------------------------------
   4912  299  194  2697  1271   944  3437.1  1233.9   712.7  2.12  2.79


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

Как правильно торговать опционами видеокурс

Как правильно торговать опционами видеокурс

Урок1: 

Настройка ПО option workshop, подключение к терминалу quik.

 

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

Индикатор ожидаемого движения для опционной торговли (Часть 1 теория)

    • 04 апреля 2019, 16:12
    • |
    • FZF
  • Еще

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

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

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

Если мы хотим посчитать волатильность на длительном периоде исходя из данных более мелких периодов, то волатильность посчитанная на мелких периодах нужно умножить на корень из числа мелких периодов входящих в большой период.
Индикатор ожидаемого движения для опционной торговли (Часть 1 теория)



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

Поиск бегемотов (робот)

Написал робота-советника для анализа спроса и предложения в стакане. В нём есть полезная опция: поиск бегемотов, то есть крупных объёмов.
Поиск бегемотов (робот)
Робот одинаково работает с фьючерсами и с акциями.
Описание полей.
Security и Nazvanie — это код бумаги и её краткое название. Робот умный, он сам находит ближайший фьючерс. За 3 дня до экспирации он возьмёт следующий — более дальний.
---
Lotov BUY | SELL | Raznitsa %. Не все знают, но биржа транслирует в КВИК суммарное количество контрактов (лотов) на покупку и на продажу. Это все лоты для акций и все контракты для фьючерсов, выставленные трейдерами. Считаются даже очень дальние ордера за пределами видимости стакана.
Вам не нужен робот, чтобы их отслеживать. Вот они:
Поиск бегемотов (робот)

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

Успешный трейдер. Психотип.

    • 18 ноября 2017, 02:46
    • |
    • Sverka
  • Еще

Все знают что есть успешные трейдеры, которые живут с рынка не один год, и уходят с него либо по усталости ли бо по завершению своего торгового плана. И кто же он такой успешный трейдер? Чем он отличается от других людей? В этой статье я опишу несколько важных факторов успешного трейдера, на основе своего опыта и опыта других трейдеров о которых я знаю достаточно, что бы делать выводы. Можно сказать что я опишу психотип успешного трейдера.
1. Успешный трейдер не есть богатый человек, как правило эти люди приходят в трейдинг из простого рабочего мира.
2. Успешный трейдер, это очень самокритичный человек. Для него все достижения и успехи даже те которые другим людям не под силу, это просто мелочь, и он всегда стремится к большему.
3. У успешного трейдера нет кумиров и нет шаблонов что и как надо делать. Он знает ситуацию, а если не знает изучает ее, и на основе своих знаний пытается добиться успеха.
4. Успешный трейдер это очень ленивый человек по отношению к тем делам которые ему приходится делать в жизни, и очень трудолюбивый по отношению к трейдингу. То что касается трейдинга, успешный трейдер может разбирать буквально до по синения, обычный человек такой нагрузки не выдержит.
5. Успешный трейдер смотря на любой механический прибор, представляет как он устроен даже не разу не разобрав его. Таково его логическое мышление. Да в некоторых вещах он может ошибиться, но суть будет верна
6. Успешный трейдер четко понимает причину и следствия событий не только в трейдинге но и в обычной жизни.
7. Успешный трейдер супер объективный человек. Любую ситуацию он рассматривает со стороны своих знаний и опыта, догадки, личное мнение и эмоции построенные на субъективности его не интересуют.
8. Успешный трейдер это всесторонне развитый человек, с многими интересами и предпочтениями.
9. Успешный трейдер любое дело рассматривает от рисков и только потом рассматривает прибыль и то как она соотносится к рискам.
10. Усп трейд это человек который честен перед самим собой. Он прекрасно знает что любой самообман приводит либо к краху либо к ложному не долгому успеху.
11. Усп тред это очень терпеливый человек в реальной жизни, так как он объективно понимает что многим людям нужны годы что бы понять то что он понимает уже сейчас. Даже если ситуация возникла в одно время для всех.
12. Успешный трейдер всегда сомневается в том что он знает. Именно поэтому он быстро завершает или исправляет свои ошибки, так как заранее к этому готов.
13. Усп трейд добрый к другим людям за счет своей объективности и сомнения в собственных выводах.
14. Успешный трейдер это минималист и гуманитарий. Он всегда знает что может заработать для себя и поэтому в основном зарабатывает для близких ему людей.
15. Усп трейдер любит людей, но не любит толпу, так как знает что в толпе бушует смута эмоции и стадное чувство.
16. Успешный трейдер может многим пожертвовать для результата достижения своей цели.
17. Успешный трейдер если ошибается, понимает это и прекращает. Так как знает что сделал все для результата и сомнений не остается.

Так я описал психотип успешного трейдера. Если вы со мной согласны или не согласны, напишите в комментариях ваше мнение.


Вопрос активным трейдерам криптой

    • 11 ноября 2017, 13:15
    • |
    • Geist
  • Еще
 
Уважаемые коллеги, созрел вопрос, если вам не сложно, прошу ответить.

Я криптой не торгую и пока не знаю, буду ли вообще, однако вижу, что процесс развивается и естественно слежу за ним краем глаза и мозга. С биткойном мне всё более-менее ясно, это на текущий момент безусловный лидер, первый эшелон. А я хочу взглянуть на второй эшелон, под которым подразумеваю всё, кроме битка.

Назовите, пожалуйста, ваш топ 3 (или топ 5) существующих криптовалют, которые кажутся вам перспективными прежде всего в смысле «купил и держи», на майнинг и ICO я точно не готов.

Спасибо!

P.S. Коллег, которые активно не верят в криптовалюты, попрошу воздержаться от троллинга и сообщений о том, что это всё пузырь, разводка и т.д. Этот пост о другом.

Гимн ПЕНСИОННЫЙ ФОНД РОССИИ

ПЕНСИОННЫЙ  ФОНД  РОССИИ
давно  туда  не  ходил  ,  тут  забрел ..
попался  в  руки  их  буклет   с  расчетом  балов  и  пенсией 
и  вот  что  интересно  
ОНИ  считают  пенсию  человека  со  стажем  
37 лет   и  зарплатой   24 000 р
отчисления  с  зарплаты  22%       
24 000 * 12 * 0.22  =  63 360 р  в  год
22%  -  это  грубо  пенсионный  налог 
на  начисление  ВАМ  зарплаты ,  
это  зарплата  вместе  с  НДФЛ  =  13%  , 
грубо  на  руки 20 800 рублей
и  получают  пенсию  9 800 р  + 4 000 ( доплат )   
скажем  пусть  будет  15 000 р  в  месяц

я  прикинул  ,  а  если  тупо  перебрасывать  эти  деньги  ежемесячно  в  облигации 
и  получил  вот   ,  что  
за  10  лет  таких  платежей  ( 63 360 р  в год )   в  ОФЗ 
с  доходностью  8%  получим  991 285  р

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

Про РЕПО, залоговый рынок, ЦК, М-Депозиты, пролетариат и ... знания

Пока паровозил до автомобиля, решил почитать смарт. И наткнулся на статью про «качество компетентности на ресурсе». Кто/что пролайкал на тему РЕПО с ЦК, что никто не знает, что РЕПО с ЦК есть уже тыщу лет и что можно вовсю у брокеров просить свопы/РЕПО...

Поедем по порядку.

1. Да, РЕПО с ЦК это уже «давняя» история. Уже больше половины, если не 2/3 объема рынка РЕПО идет через ЦК. Немудрено. Ибо вроде и есть доверие/вечеринки/алкоголь с коллегой по чату, а риски дефолта контрагенты/эмитента никто не отменял.

Новое РЕПО с ЦК. Оно, конечно, РЕПО… Но не совсем. Т.е. для стороны размещающей средства (непрофик) это будет просто размещение депозита в ЦК (читай в НКЦ = член EACH, рейтинги Фича и Акры). Т.е. по сути это еще не прямой допуск непрофиков к профильным торгам. А вот для второй стороны (привлекающей у НКЦ) это сделка РЕПО.

Основной кейс для внедрения продукта, чтобы крупные (на данный момент, об этом ниже) корпорации размещали средства в рынок. Что дает +1,5-2% к депозитной ставке в банках (в годовых ессно). На 2 млн. рублей «не густо», а на 2 млрд. — вполне.



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

Код робота на LUA для QUIK

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

Предназначается для новичков в алготрейдинге, что-то типа болванки.

Важно: выставление заявок я закомментировал, поэтому можете смело запускать этот скрит, он не натворит ужаса по счету.

require"QL"

log = "sbrf.log"
seccode = "SRM6"
lots_in_trade = 80
accnt = ""
better = -5
chart = "sberbankxxx"
is_run = true
prev_datetime = {}
len = 100
basis = 9
k_bal = {0,1,2,3}
sell = false
buy = false
id = 0
first = true

function trade_signal(shift)
        number_of_candles = getNumCandles(chart)
        bars_temp,res,legend = getCandlesByIndex(chart,0,number_of_candles-2*len-shift,2*len)
        bars={}

        i=len
        j=2*len
        while i>=1 do
                if bars_temp[j-1].datetime.hour>=10 then
                        sk=true
                        if bars_temp[j-1].datetime.hour==18 and bars_temp[j-1].datetime.min==45 then
                                sk=false
                        end
                        if sk then
                                bars[i]=bars_temp[j-1]
                                i=i-1
                        end
                end
                j=j-1
        end

        t = len+1

        do_sell = false
        do_buy = true

        value = 0
        if do_sell then value = 1 end
        if do_buy then value = -1 end
        toLog(log,"value="..value.." on candle: "..bars[len].datetime.year.."-"..bars[len].datetime.month.."-"..bars[len].datetime.day.." "..bars[len].datetime.hour..":"..bars[len].datetime.min.."   O="..bars[len].open.." H="..bars[len].high.." L="..bars[len].low.." C="..bars[len].close.." V="..bars[len].volume)
        return value
end

function mysplit(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end

function OnInit(path)
        log=getScriptPath()..'\\'..log
        toLog(log,"==========OnInit: START")
        toLog(log,"==========OnInit: FINISH")
end

function OnStop()
        is_run = false
        toLog(log,"==========OnStop: script finished manually")
end

function CheckBit(flags, bit)
   -- Проверяет, что переданные аргументы являются числами
   if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!"); end;
   if type(bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!"); end;
   local RevBitsStr  = ""; -- Перевернутое (задом наперед) строковое представление двоичного представления переданного десятичного числа (flags)
   local Fmod = 0; -- Остаток от деления
   local Go = true; -- Флаг работы цикла
   while Go do
      Fmod = math.fmod(flags, 2); -- Остаток от деления
      flags = math.floor(flags/2); -- Оставляет для следующей итерации цикла только целую часть от деления
      RevBitsStr = RevBitsStr ..tostring(Fmod); -- Добавляет справа остаток от деления
      if flags == 0 then Go = false; end; -- Если был последний бит, завершает цикл
   end;
   -- Возвращает значение бита
   local Result = RevBitsStr :sub(bit+1,bit+1);
   if Result == "0" then return 0;
   elseif Result == "1" then return 1;
   else return nil;
   end;
end;

function killorders(ccode,scode)
    for i=0,getNumberOf("orders")-1,1 do
        local t=getItem("orders", i)
        if t ~= nil and type(t) == "table" then
            if( t.seccode == scode and CheckBit(t.flags, 0) == 1) then
                local transaction={
                    ["TRANS_ID"]=tostring(math.random(2000000000)),
                    ["ACTION"]="KILL_ORDER",
                    ["CLASSCODE"]=ccode,
                    ["SECCODE"]=scode,
                                        ["ACCOUNT"] = accnt,
                    ["ORDER_KEY"]=tostring(t.ordernum),
                }
                                res=sendTransaction(transaction)
            end
        end
    end
end

function killstoporders(ccode,scode)
    for i=0,getNumberOf("stop_orders")-1,1 do
        local t=getItem("stop_orders", i)
        if t ~= nil and type(t) == "table" then
            if( t.seccode == scode and CheckBit(t.flags, 0) == 1) then
                local transaction={
                    ["TRANS_ID"]=tostring(math.random(2000000000)),
                    ["ACTION"]="KILL_STOP_ORDER",
                    ["CLASSCODE"]=ccode,
                    ["SECCODE"]=scode,
                                        ["ACCOUNT"] = accnt,
                    ["STOP_ORDER_KEY"]=tostring(t.ordernum),
                }
                                res=sendTransaction(transaction)
            end
        end
    end
end


function main()
        toLog(log,"==========main: START")
        while is_run do
                if isConnected() == 1 then
                        ss = getInfoParam("SERVERTIME")
                        if string.len(ss) >= 5 then
                                hh = mysplit(ss,":")
                                str=hh[1]..hh[2]
                                h = tonumber(str)
                                if (h>=1000 and h<1400) or (h>=1405 and h<1845) or (h>=1905 and h<2350) then
                                        if first then
                                                for ti = 50,2,-1 do     trade_signal(ti) end
                                                if buy and not sell then message(seccode.." Current state: green and buy",1) end
                                                if sell and not buy then message(seccode.." Current state: red and sell",1) end
                                                if buy and sell then message(seccode.." ERROR: green and red",1) end
                                                if not buy and not sell then message(seccode.." WARNING: nothing",1) end
                                                first = false
                                        end
                                        prev_candle = getPrevCandle(chart,0)
                                        if not isEqual(prev_candle.datetime,prev_datetime) then
                                                current_value = trade_signal(1)

                                                if current_value ~= 0 then
                                                        optn = "B"
                                                        if current_value==1 then optn = "S" end
                                                        curvol=0
                                                        no=getNumberOf("FUTURES_CLIENT_HOLDING")
                                                        if no>0 then
                                                                for i=0,no-1,1 do
                                                                        im=getItem("FUTURES_CLIENT_HOLDING", i)
                                                                        if im.sec_code==seccode then
                                                                        curvol=im.totalnet
                                                                        end
                                                                end
                                                        end
                                                        trvol = -current_value*lots_in_trade-curvol
                                                        if trvol ~= 0 then
                                                                killorders("SPBFUT",seccode)
                                                                killstoporders("SPBFUT",seccode)
                                                                f = io.open(getScriptPath().."\\sbrf2_pos.txt","r")
                                                                sbrf2_pos=f:read("*n")
                                                                f:close()
                                                                f = io.open(getScriptPath().."\\sbrf3_pos.txt","r")
                                                                sbrf3_pos=f:read("*n")
                                                                f:close()
                                                                pr,n,l = getCandlesByIndex ("futsber", 0, getNumCandles("futsber")-1, 1)
                                                                local trans =
                                                                {
                                                                        ["ACTION"] = "NEW_ORDER",
                                                                        ["CLASSCODE"] = "SPBFUT",
                                                                        ["SECCODE"] = seccode,
                                                                        ["ACCOUNT"] = accnt,
                                                                        ["OPERATION"] = optn,
                                                                        ["PRICE"] = toPrice(seccode,pr[0].close+current_value*better),
                                                                        ["QUANTITY"] = tostring(math.abs(curvol-sbrf2_pos-sbrf3_pos)),
                                                                        ["TRANS_ID"] = tostring(getTradeDate().month*100+getTradeDate().day+id)
                                                                }
                                                                id = id+1
                                                                --res = sendTransaction(trans)
                                                                message(seccode.." Send : " .. res, 2)
                                                                toLog(log,"Send: ".. res)
                                                                for btr=0,200,5 do
                                                                        local trans =
                                                                        {
                                                                                ["ACTION"] = "NEW_STOP_ORDER",
                                                                                ["CLASSCODE"] = "SPBFUT",
                                                                                ["SECCODE"] = seccode,
                                                                                ["ACCOUNT"] = accnt,
                                                                                ["OPERATION"] = optn,
                                                                                ["PRICE"] = toPrice(seccode,pr[0].close-current_value*btr),
                                                                                ["STOPPRICE"] = toPrice(seccode,pr[0].close-current_value*(btr+better)),
                                                                                ["QUANTITY"] = tostring(6),
                                                                                ["TRANS_ID"] = tostring(getTradeDate().month*100+getTradeDate().day+id),
                                                                                ["EXPIRY_DATE"] = "GTC"
                                                                        }
                                                                        id = id+1
                                                                        --res = sendTransaction(trans)
                                                                        message(seccode.." Send : " .. res, 2)
                                                                        toLog(log,"Send: ".. res)
                                                                end
                                                                if current_value == 1 then
                                                                        message(seccode..' RED: buy->sell',1)
                                                                        toLog(log,"RED signal")
                                                                else
                                                                        message(seccode..' GREEN: sell->buy',1)
                                                                        toLog(log,"GREEN signal")
                                                                end
                                                        else
                                                                if current_value == 1 then
                                                                        message(seccode..' RED: buy->sell',1)
                                                                        toLog(log,"RED signal, but nothing to do")
                                                                else
                                                                        message(seccode..' GREEN: sell->buy',1)
                                                                        toLog(log,"GREEN signal, but nothing to do")
                                                                end
                                                        end
                                                else
                                                        if buy and not sell then toLog(log,"Nothing to do. Current state: green and buy",1) end
                                                        if sell and not buy then toLog(log,"Nothing to do. Current state: red and sell",1) end
                                                        if buy and sell then toLog(log,"Nothing to do. ERROR: green and red",1) end
                                                        if not buy and not sell then toLog(log,"Nothing to do. WARNING: nothing",1) end
                                                end
                                                prev_datetime = prev_candle.datetime
                                        end
                                end
                        end
                end
                sleep(5*1000)
        end
        toLog(log,"==========main: FINISH")
end
  • обсудить на форуме:
  • Quik Lua

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