Избранное трейдера johnson773
Этот большой пост предназначен как справочный для работы с таблицами в постах серии «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. Успешный трейдер не есть богатый человек, как правило эти люди приходят в трейдинг из простого рабочего мира.
2. Успешный трейдер, это очень самокритичный человек. Для него все достижения и успехи даже те которые другим людям не под силу, это просто мелочь, и он всегда стремится к большему.
3. У успешного трейдера нет кумиров и нет шаблонов что и как надо делать. Он знает ситуацию, а если не знает изучает ее, и на основе своих знаний пытается добиться успеха.
4. Успешный трейдер это очень ленивый человек по отношению к тем делам которые ему приходится делать в жизни, и очень трудолюбивый по отношению к трейдингу. То что касается трейдинга, успешный трейдер может разбирать буквально до по синения, обычный человек такой нагрузки не выдержит.
5. Успешный трейдер смотря на любой механический прибор, представляет как он устроен даже не разу не разобрав его. Таково его логическое мышление. Да в некоторых вещах он может ошибиться, но суть будет верна
6. Успешный трейдер четко понимает причину и следствия событий не только в трейдинге но и в обычной жизни.
7. Успешный трейдер супер объективный человек. Любую ситуацию он рассматривает со стороны своих знаний и опыта, догадки, личное мнение и эмоции построенные на субъективности его не интересуют.
8. Успешный трейдер это всесторонне развитый человек, с многими интересами и предпочтениями.
9. Успешный трейдер любое дело рассматривает от рисков и только потом рассматривает прибыль и то как она соотносится к рискам.
10. Усп трейд это человек который честен перед самим собой. Он прекрасно знает что любой самообман приводит либо к краху либо к ложному не долгому успеху.
11. Усп тред это очень терпеливый человек в реальной жизни, так как он объективно понимает что многим людям нужны годы что бы понять то что он понимает уже сейчас. Даже если ситуация возникла в одно время для всех.
12. Успешный трейдер всегда сомневается в том что он знает. Именно поэтому он быстро завершает или исправляет свои ошибки, так как заранее к этому готов.
13. Усп трейд добрый к другим людям за счет своей объективности и сомнения в собственных выводах.
14. Успешный трейдер это минималист и гуманитарий. Он всегда знает что может заработать для себя и поэтому в основном зарабатывает для близких ему людей.
15. Усп трейдер любит людей, но не любит толпу, так как знает что в толпе бушует смута эмоции и стадное чувство.
16. Успешный трейдер может многим пожертвовать для результата достижения своей цели.
17. Успешный трейдер если ошибается, понимает это и прекращает. Так как знает что сделал все для результата и сомнений не остается.
Так я описал психотип успешного трейдера. Если вы со мной согласны или не согласны, напишите в комментариях ваше мнение.
Пока паровозил до автомобиля, решил почитать смарт. И наткнулся на статью про «качество компетентности на ресурсе». Кто/что пролайкал на тему РЕПО с ЦК, что никто не знает, что РЕПО с ЦК есть уже тыщу лет и что можно вовсю у брокеров просить свопы/РЕПО...
Поедем по порядку.
1. Да, РЕПО с ЦК это уже «давняя» история. Уже больше половины, если не 2/3 объема рынка РЕПО идет через ЦК. Немудрено. Ибо вроде и есть доверие/вечеринки/алкоголь с коллегой по чату, а риски дефолта контрагенты/эмитента никто не отменял.
Новое РЕПО с ЦК. Оно, конечно, РЕПО… Но не совсем. Т.е. для стороны размещающей средства (непрофик) это будет просто размещение депозита в ЦК (читай в НКЦ = член EACH, рейтинги Фича и Акры). Т.е. по сути это еще не прямой допуск непрофиков к профильным торгам. А вот для второй стороны (привлекающей у НКЦ) это сделка РЕПО.
Основной кейс для внедрения продукта, чтобы крупные (на данный момент, об этом ниже) корпорации размещали средства в рынок. Что дает +1,5-2% к депозитной ставке в банках (в годовых ессно). На 2 млн. рублей «не густо», а на 2 млрд. — вполне.
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