Избранное трейдера Олег

по

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

Простой метод торговли для новичков.

    • 14 июля 2017, 23:47
    • |
    • COREz
  • Еще
Установите себе норму прибыли на каждую акцию в портфеле в размере допустим 10% и норму убытка в три раза меньше на уровне 3%. Следуя этим параметрам Вы должны закрывать прибыльные позиции сразу по достижении установленного предела и также поступать с убытками.

Что это даёт в результате? На каждые три убыточных позиции Вам нужна будет только одна прибыльная, чтобы остаться при своих. Нулевой результат — это весьма неплохо для фондового рынка. Если Вы угадали (а другого здесь не дано) с выбором акций, то есть шанс (но не гарантия) выхода в плюс.

Простой метод торговли для новичков.

Можно взять другие параметры, но как подсказывает практика, колебания котировок до 3% — это практически рыночный шум, сильно выше 10% ликвидным бумагам трудно зарабатывать в короткий промежуток времени.

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

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

8 ошибок при обращении с деньгами

8 ошибок при обращении с деньгами 

Быть богатым и обладать состоянием – не одно и то же. 

Состояние – это избыток чего-либо, настолько большой, что никакие внешние условия не могут повлиять на него. Одно дело – заработать много денег, разбогатеть – совсем другое. Но только лишь немногие способны научиться создавать свое состояние. Вы, наверняка, слышали о «быстром обогащении», но вы никогда не услышите о том, что можно быстро стать состоятельным. 

Слышали когда-нибудь о том, что «деньги никогда не спят»? Состоятельные люди принимают это высказывание буквально и потому уверены, что деньги должны работать и расти круглые сутки. Состоятельные люди уважают и уделяют внимание своим деньгам, поскольку знают, что состояние не увеличится само по себе. И они знают, что деньги требуют любви и уважения.

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

Портфель дивитикеров от двух миллионов рублей.

    • 12 июля 2017, 18:58
    • |
    • COREz
  • Еще
Формируем портфель из 20 наиболее интересных дивидендных бумаг ММВБ, на каждую позицию примерно по 100 тысяч рублей. Тем самым каждая бумага возьмёт на себя риск 5% на случай допустим банкротства эмитента. Примерно раз в месяц или ещё реже (по ситуации) проводим ребалансировку по следующему принципу: продаём часть подорожавших бумаг и докупаем на эти деньги наиболее подешевевшие бумаги в портфеле из такого расчёта, чтобы начальная (учётная) стоимость каждой позиции стремилась к одинаковому значению.

Почему именно счёт от двух миллионов?

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

Портфель дивитикеров от двух миллионов рублей.

Что даёт такой подход?

1. Удобно считать среднюю дивидендную доходность, потому что все позиции примерно равны по объёму.

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

Стратегии спекуляций на рынке криптовалют и ICO

    • 12 июля 2017, 18:21
    • |
    • Sergey
  • Еще
Стратегии спекуляций на рынке криптовалют и ICO

Сейчас идет повальный бум ICO (это типа краудфандинга в мире криптовалют). За участие в ICO человек получает токены в обмен на криптовалюту (эфир или биткион).

ICO создаются под проекты, которые «в будущем» могут стать успешными компаниями (но, как правило, нет). Если копать в глубину, то почти все ICO это в чистом виде лохотрон, они появляются каждый день, в них заливают деньги и они исчезают с горизонта, появляются новые и так далее. В итоге сейчас идет огромный конвейер — появление нового Токена на бирже, краткий всплеск и затухание со сползанием.  

Здесь можно посмотреть топ криптовалют по капитализации - https://coinmarketcap.com

Как можно на этом заработать?

  • Отслеживать выход ICO на биржи и шортить их после ажиотажа и пампа со стопами за ближайшим хаем
  • Шортить любые задёрги в непопулярных криптах


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

Ум

высшая степень интеллекта — умение просчитывать будущее

Новый формат журнала для трейдеров

Пока Тинькофф, платит за отказ от Telegram, группа молодых программистов внедрила новый формат журнала трейдера, позволяющий получать свежие данные по своему портфелю, вести статистику прибыли/убытков, смотреть новости рынка, и уже в самом ближайшем будущем зарабатывать на торговых сигналах.

Знакомьтесь stock_news_bot в Telegram.

 Новый формат журнала для трейдеров

Как это работает?

Заходим в приложение Telegram c мобильного устройства или компьютера в поисковой строке вводим stock_news_bot

В открывшемся окне Вам предложат подтвердить согласие на обработку данных

 Новый формат журнала для трейдеров



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

Акция! Бесплатное обучение трейдингу!

    • 22 июня 2017, 21:12
    • |
    • God
  • Еще
Повелись на заголовок? Облом, никого учить не собираюсь))
Темнемение, трейдингу действительно можно научиться совершенно бесплатно. На курсере есть множество очень качественных курсов на тему трейдинга, причем зачастую они гораздо полезней того что преподают околорыночники за деньги. Как минимум рекомендую пройти эти :

www.coursera.org/specializations/investment-portolio-management
www.coursera.org/learn/financial-engineering-1
www.coursera.org/learn/financial-engineering-2
www.coursera.org/learn/financial-statements
www.coursera.org/learn/trading-algorithm
www.coursera.org/learn/money-banking

Трейдинг - концентрированная жизнь

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

 

1)    Стоп-лоссы

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

В жизни похоже. Ты также принимаешь безвозвратные издержки. И не позволяешь неудачным проектам привести к непоправимым убыткам. Скорее, инвестируешь в количество проектов…

Смело прерываешь взаимоотношения, которые рискуют завести «не туда». Которые день за днем отравляют твою жизнь.

 

2)    НЕТ общепринятым стереотипам

На рынке как? У каждой концепции есть своя секта. Стереотипы: ТА не работает, ФА не работает, Стопы придумал трус, Рынок – случайное блуждание, Вложения в доллар – самые безопасные… Да ради Бога. Только сначала проверим. Одно за другим. Только после проверки можно использовать. Ведь на кону мои деньги.



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

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