Избранное трейдера Игорь В.

по

Видишь пять волн, жди разворот. Часть 2, построение торгового плана.

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

Ниже будут приведены схематическое построение торгового плана, и размещение ордеров.

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

Схема начала построения торгового плана будет выглядеть, так как показано на картинке ниже из книги:  Wayne Gorman & Jeffrey Kennedy — Visual Guide to Elliott Wave Trading 2013.c 

Видишь пять волн, жди разворот. Часть 2, построение торгового плана.



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

Видишь пять волн, жди разворот. Часть 1.

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

В EWP основным паттерном является пяти волновая действующая модель. Таких, действующих моделей всего две, это импульс и диагональ. Ранее уже было описана модель диагональ, и  в ближайшее время заметка о диагоналях будет продолжена. В данный момент речь пойдет об импульсах.

Импульс – это наиболее распространенный вид действующей волны, и так как импульс является основным паттерном в  EWP то, все, абсолютно все модели как начинаются с импульсов так ими и заканчиваются. Видишь пять волн, жди разворот. Часть 1.

Существует всего несколько простых правил интерпретации ценового поведения внутри импульсов. Правило потому и называются правилом, что не допускает исключений и выполняется всегда. 
Видишь пять волн, жди разворот. Часть 1.



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

Скрипт Reshpekt'а для загрузки цитат в ленту комментариев (SL-autoquote) перестал работать (как починить внутри)

Не могу знать, почему отвалилась его работа с https ссылками, но поправить можно так.
  1. Зайти в настройки Tampermonkey (или Greasemonkey, или что там у вас для скриптов в браузере).
  2. Нажать Installed userscripts.
  3. Напротив SL-autoquote нажать Edit (иконка справа под Actions).
  4. В начало скрипта вставить строку // @include        https://smart-lab.ru/my/*, прямо под // @include        http://smart-lab.ru/my/*
  5. Нажать Save.
  6. Перезагрузить ленту комментариев SL.
Для тех, кто не знает, скрипт делает так:
Скрипт Reshpekt'а для загрузки цитат в ленту комментариев (SL-autoquote) перестал работать (как починить внутри)
Лежит тут: https://greasyfork.org/ru/scripts/19687-sl-autoquote



Код робота на 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

Диагональ – модель разворота. Часть 1.

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

Одной из самых «сильных», то есть дающих сильный сигнал, моделей в EWP является модель Диагональ, в частности речь, пойдет о конечной диагонали (Ending Diagonal). Данная модель чаще всего появляется в виде заключительной волны 5 в импульсе или волны C в зигзаге.

Диагональ – модель разворота. Часть 1.


Диагонали бывают двух типов, сужающаяся и расширяющаяся. Так как сама по себе Диагональ  появляется не так уж и часто по сравнению с импульсами. Например, если посмотреть статистику Rich Swannell  (см. таблицу, ниже, обозначение ED) то, можно увидеть, что данная модель появляется в импульсе чуть более 20% случаев, а на некоторых рынках и вовсе не дотягивает даже до 10%. 



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

Как я вылечил свою аллергию

По просьбе коллег попробую публиковать в своём блоге статьи про ЗОЖ.
У меня есть готовые статьи, ничего нового выдумывать не буду.
Вот эта статья написана в 2013г.
==
Предисловие к этой статье находится здесь 
Краткий вариант статьи — здесь


Наконец настало время написать про то, как я избавился от аллергии, от которой я страдал с детства

Реально страдал — ибо с весны до осени я истекал соплями, у меня чесались и гноились глаза (иногда я проснувшись утром не мог открыть глаза из-за слипшихся от гноя ресниц), я реагировал на запахи растений и на приближающиеся осадки (у меня закладывало нос так, что я даже не мог дышать от боли, из-за внутреннего давления, или начинал чихать раз по 30 подряд)

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

Фишечка-рюшечка для протоколов. Wireshark

Введение

      Для меня в свое время стало огромным сюрпризом, что WireShark поддерживает lua. Это открывает отличные возможности для анализа сетевого траффика. Наверняка, не все об этом знают. Поделюсь некоторыми возможностями.

Для кого и для чего

    Речь пойдет об анализе сетевого траффика. В первую очередь, анализом траффика, пользуются алгоритмисты и разработчики для прямого доступом к рыночным данным. На нашей бирже задействованы целый ряд протоколов, под UDP — это в первую очередь FAST (протокол распространения рыночных данных), под TCP — это транзакционные протоколы FIX, TWIME, мульти протоколы (рыночные данные + транзакции) Bridge, Plaza.
   У таких разработчиков и алгоритмистов должны частенько, или периодически, вставать вопросы, что там вообще происходит с торговыми роботами. Во сколько пришли на сетевую карту данные, во сколько отправил заявки, во сколько получил ответы и тд. Ставить временные метки внутри программы и выводить их на экран бывает не совсем то что надо. Во первых, это своего рода лишние задержки выполнения задач, а это уже отвлечение от боевых условий. Во вторых, если железо поддерживает, лучше всего брать временные метки у железа и смотреть во сколько приходят данные с самого сетевого кабеля и во сколько уходят данные в сам сетевой кабель. Это уже будет хороший и точный уровень расчетов.

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

Философия следования за ценой!

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

Вроде бы просто: Цена растёт мы покупаем, цена падает мы продаём — это принцип следования за трендом.
Цена падает и нащупывает поддержку, диапазон цен снижается, цена разворачивается и мы покупаем — это принцип контртренда.

Заранее, хочу сказать, что это моё личное мнение и оно естественно субъективно.
На точность и верность своего суждения, я не претендую!

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

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

Индикатор для парного трейдинга+рубле-бочка

    • 22 мая 2017, 17:17
    • |
    • Albus
  • Еще
Как и обещал, выкладываю простой индикатор для анализа двух инструментов. Его можно использовать для любых пар на свой вкус.
Вот например, Сбер обычный (вверху) против сбера привилегированного (посерёдке). Индикатор внизу — красный. Для его расчёта первый график поделён на второй.
Индикатор=SBER/SBERP
Индикатор для парного трейдинга+рубле-бочка
Дивиденды по ним одинаковые, ценообразование одинаковое, однако по странной воле рынка в эти дни Сбер обычный слишком дёшев против сбера привилегированного. Красный график утоптан вниз, а ведь ещё недавно был намного выше. Это не совет, но если (вдруг!) вы думаете, что эта несправедливость скоро выровняется, вам надо купить SBER и шортануть на такой же объём SBERP. А ещё лучше шортануть фьючерс на SBERP, чтобы не платить брокеру за акции взятые в долг.
----------
Итак, индикатор. Я дописал к коду комментарии, чтобы даже новичок не кодер мог разобраться.
Скачать индикатор.

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

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