Избранное трейдера ✔Бизне$$ Ангел ✰

по

ТС "Родственничек"

Всем привет.

Есть у меня родственники, которые ежедневно отслеживают курс Евро к рублю, и вот уже на протяжении 2-3 лет, при каждом «шорохе» +-30 копеек, как ошпаренные начинают названивать мне и интересоваться относительно дальнейшей судьбы данной валютной пары.

Сколько бы я им не говорил о том, что следует к покупке отнестись системно, не брать на ффсё, и особо не волноваться о задергах в 30-50 копеек, никто и никогда к моим советам не прислушивался, т.е. они все делали по своему.

У людей есть задача периодически покупать Евро для оплаты ипотеки, поэтому звонки за советом не прекращаются.
Честно признаться, я уже устал от вопросов на тему курса валюты, и поэтому решил составить для них простенькую систему, по которой они покупали бы валюту с постоянной периодичностью и на одну и ту же определенную сумму.



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

Пользуйтесь

План (А)

Когда на пятиминутном тайм фрейме менее 50-и пунктов то ставим лимитные заявки на покупку и на продажу
около 25% от депозита, на расстоянии 10 пунктов от текущей цены. Стоп лос ставим по 20 пунктов от лимитных заявок.
После того как сработала одна из лимитных заявок переносим встречную заявку (тейк профит) на 10 пунктов от цены
исполнения, ждем исполнения лоса или профита. Если профит то повторяем, если лос то переходим к плану (Б)


План (Б)

Ставим лимитные заявки в 20-и пунктах от текущей цены, на 50% от депозита, после того как сработала одна
из заявок переносим встречную заявку на 10 пунктов от цены исполнения. Если профит то повторяем план (Б) до признаков
узкого боковика, после этих признаков переходим к плану (А), если лос то переходим к плану (В).


План (В)

Ставим лимитные заявки по 40 пунктов от текущей цены на 100% от депозита, после исполнения одной из заявок
переносим встречную заявку на 10 пунктов от цены исполнения.Если профит повторяем до признака узкого боковика,
если и в третий раз сработал лос то ждем признаков узкого боковика и переходим к плану(А) и т.д. по кругу.


Признак узкого боковика:

Три прилипшие свечки к средней скользящий, moving average 8 периодов, на пяти минутном тайм фрейме.


Работает на фьючерсе доллар рубль.

Не работает в более широком временном тайм фрейме.

 


Бэктестинг: пересечение RSI разных периодов

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

Рассмотрим пересечение индикаторов RSI разных периодов. Алгоритмы пишем в Quantopian на Python.

В этот раз:

  • Попробуем быть на шаг впереди, используя 13-дневный и 65-дневный периоды RSI.
  • Попробуем использовать стандартные 14-дневный и 70-дневный периоды RSI.
  • Посмотрим на лучший период прошлого теста и используем 20-дневный и 100-дневный RSI.
  • Попробуем отфильтровать тренды с помощью скользящих средних.


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

Бэктестинг: следуем за RSI

В прошлый раз мы рассмотрели алгоритм торговли разворотов по сигналам RSI. В этой статье посмотрим, можно ли следовать в направлении движения RSI. Ведь индикатор показывает именно направление изменения цены. Алгоритмы пишем в Quantopian на Python.

В этот раз:

  • Следуем в направлении RSI на одном таймфрейме (день).
  • Следуем в направлении RSI на разных таймфреймах (час, день).
  • Отфильтруем тренд актива средними.


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

Календарный спред на Америке. Сделка №4.

    • 01 августа 2017, 19:40
    • |
    • Rustem
  • Еще
Доброго времени суток.


Открываю сделку №4.

Календарный спред на Америке. Сделка №4.
s019.radikal.ru/i617/1708/68/245454210616.jpg

Промежуточные результаты буду выкладывать.


Желаю всем успехов в торговле.


Обратный пропорциональный спред - мощь и красота

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

 

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

Не буду рассказывать теорию, а поделюсь практикой.

Вообще я читал в западных источниках, что такая конструкция подходит, когда вы ожидаете например резкий рост на БА, но его вероятность  — невысокая. Тогда типа покупай такую конструкцию за практически 0 – в случае роста цены на БА вы получаете хорошую прибыль, а если его не происходит – то цена опциона не меняется да и вы ничем не рисковали, в смысле не было ваших расходов. Например, это подходит для биотеха, если ждете прорыва у какой-то компании, выдачи разрешения FDA и т.п.



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

Реальная доходность индекса RTS или сколько зарабатывают местные Баффеты

Биржа ММВБ не так давно стала публиковать индексы полной доходности учитывая дивиденды и налогообложение http://www.moex.com/ru/index/totalreturn.aspx.

Решил посчитать сколько же реально зарабатывают местные Баффеты, для этого я взял индекс RTSTRR (RTS Net Total Return (Resident)) Для начала посмотрим как вообще выглядит индекс RTSTRR относительно индекса RTS

Реальная доходность индекса RTS или сколько зарабатывают местные Баффеты


К сожалению TradingView показывает данные только начиная с 2017 года.

Я написал скрипт который скачивает данные по ссылке http://www.moex.com/ru/index/totalreturn.aspx и в R продолжил анализ ( скрипт ниже ). Вот как выглядят индексы начиная с 2009 года.

 Реальная доходность индекса RTS или сколько зарабатывают местные Баффеты

Как видно, с течением

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

УМЕР АРТЁМ ТАРАСОВ

Умер Артем Михайлович Тарасов. Легенда 80-х. 

 УМЕР АРТЁМ ТАРАСОВ

Шок. Ничто не предвещало. И диагноз дурацкий. Банальная пневмония.
Мы из одного поколения. Почти ровесники, он на 2 года старше. Познакомились в мае 1988 года, на заре кооперативного движения.
Мимолетная встреча во время моей командировки в Москву явилась толчком к моему уходу из науки в бизнес.
К сожалению жернова российской действительности конца 80-х начала 90-х его не пощадили и он вынужден был уехать из страны. Долгое время жил за границей, вернулся, но в большой бизнес уже не вписался. Всё схвачено и поделено и времена не те...
Если вам его фамилия ничего не говорит, почитайте его книгу «Миллионер». Это почти документальное произведение о том времени, написанное хорошим языком великолепно образованного человека, поэта, кандидата наук, изобретателя, предпринимателя и бизнесмена. Читается на одном дыхании.
Этот роман, и еще книга Ю.Дубова «Большая пайка» рисуют достоверную картину реалий бизнеса того времени. Было много возможностей, но где те люди?


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



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

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