Избранное трейдера Кошкин Сергей
В ходе торговли и многодневного наблюдения с коллегами стали чаще обращать внимание на откаты во время тренда, тщательно проанализировав данный фактор, заметили интересные факторы, половина из них не новшество, особенно для опытных, а вот некоторые могут показаться интересными.
Для примера взяты последние данные Сбербанка, в часовом формате(1 свеча — 1 час)
Ни для кого не секрет, что каждый тренд имеет откаты и, на которых опытные трейдеры докупают или допродают. К примеру, на восходящих трендах, каждый откат является признаком продаж, но в один момент, когда цена снова становятся привлекательной, игроки начинают скупать бумагу и, либо пробивают последний хай продолжая тренд либо создают разворотную фигуру, если не пробивают последний хай.
На самом деле длинна отката, время отката, а самое главное, процентное соотношение отката к основному движению могу о многом сказать.
На рисунке ниже, изображен график сбербанка. Каждая прямоугольно фигура содержит информацию о рывке и последующем откате. Красная линия обозначает границу, между движением и откатом и показывает примерный процент отката от движения. В ходе наблюдения выявилось, что
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


Сегодня вечером Джаннет Йеллен будет дарить подарки. Кому повезет (выпадет сектор «Приз») – быкам или медведям, будет ли сам рост ставки- не стану обсуждать.
Надеюсь, волатильность на новости, ни у кого не вызывает споров? Именно она, может вынести котировки на непредсказуемые уровни и к этому надо быть «двусторонне готовым».
Я вижу свою позицию такой – на графике отметил зону продаж (экстремум отскока на Трампе) и зону покупок, ее описал в блогах, опубликованных ранее:
Чем мне нравится рынок, тут можно занимать две позиции одновременно. Кстати маркетмейкеры так и делают – «обкладывают» базовый актив опционами. Система называется – «цилиндр», при умелом обращении превращается в синтетическую облигацию.
Подобная абракадабра (фьюч плюс два и потом еще один опцион), позволяет гарантировано уйти без убытка или заработать до 25% в месяц.
Это я к чему клоню, многие тут пишут, что крупные инвесторы «теряют деньги» и «переживают за позиции». На самом деле, для них это игра «с правом на ошибку».
Приветствую!!!
Если еще не надоел со своими Паттернами :)
Для начала рекомендую ознакомиться с моей старой статьей :Pattern искусственного обвала цен Buy&Sell
И еще обратить, Ваше внимание вот на эту статью :Лучший месяц или день? Пример фьючерс на австралийца или AUDUSD
Мы приближаемся хорошей возможности не много подзаработать :)
Сегодня хочу рассказать еще об одном интересном Паттерне называться NEW LOW PATTETN.
Эта модель хорошо работала в прошлом и почему бы ей не работать и в будущем ?
Вы скорее всего торговали эту комбинацию и были не на той стороне …. Вы вероятно поймали стоп, когда эта модель давала сигнал на покупку!
У большинства всегда есть аргумент что за нашими стопами охотятся или что рынки сфальсифицированы.
Я никогда не соглашался с подобным мышлением… Я думаю, что рынки делают то, что они собираются делать. Наверняка, публика становится очень эмоциональной, когда цены идут до новых минимумов и выходят из своих позиций. Умные деньги, видя, что это происходит, входят в рынок с длинной стороны… вот и появляется такой эмоциональный паттерн. Я назвал это Новый Лоу Паттерн. Он основан на сценарии, который я только что изложил.

Индикатор VR Alert предназначен для своевременного оповещения трейдера о достижении ценой или временем заданного уровня. Основная задача программы привлечь внимание трейдера к торговому символу, на котором произошло касание ценового уровня установленного трейдером. Уровни могут быть как прямо горизонтальными так и под углом, что позволяет контролировать пробой тренда. Ценовые уровни индикатора можно двигать в ручную мышкой на графике, для этого нужно уровень выделить двойным кликом мыши.
Важно заметить, что начиная с версии 17.05 можно установить зону работы индикатора. Другими словами, если цена пересекает линию то будет звуковой сигнал. Пример: Вы растянули линию в направлении тренда с 01.02.2017 года по 15.05.2017 года так вот индикатор выдаст звуковой сигнал только в том случае если линия будет пересечена именно с 01.02.2017 года по 15.05.2017 года. Таким образом Вы можете ограничить по времени зону в которой хотите получить сигнал.
