Избранное трейдера 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