Избранное трейдера java

по

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

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

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


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

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

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

Бэнкинг по-Русски: Прощай ломбард. ЦБ планирует в течении года исключить все финбонды из ломбардного списка

Об изменении подходов к формированию Ломбардного списка Банка России

 

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

1. С 1 октября 2017 года приостанавливается включение в Ломбардный список новых выпусков следующих ценных бумаг:

облигаций кредитных организаций [1] и Внешэкономбанка;

облигаций страховых организаций;

облигаций международных финансовых организаций;

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



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

Индикаторы SWT-метода. Как установить и как пользоваться

Ниже публикуется краткое руководство пользователя по установке и применению индикаторов SWT-метода.
Индикаторы SWT-метода для своих клиентов приобрела компания OPENFX — дилер белорусской юрисдикции, дающий доступ на форекс с безупречным юридическим оформлением и юридической защищенностью прав клиентов. Клиенты компании на счетах компании могут пользоваться индикаторами бесплатно, с использованием консультационной поддержки персоналом компании.

 1. Торговая платформа.


Индикаторы предназначены для использования на торговой платформе Метатрейдер 4 (МТ4).
Требуемая глубина корректных исторических данных для правильной работы индикаторов не менее 1024 отсчетов. Больше можно. Стандартная торговая сессия — 5 дней в неделю — 120 часов. При меньшей глубине истории, наличии перерывов внутри торговой сессии может быть нарушено соответствие между трендами одного типа на графиках разного временного масштаба,  тем больше, чем больше разрывы или иные несоответствия между требованиями и реальностью.
Рабочие тайм-фреймы — М1, М5, М15, Н1, Н4, D1, W1. Параметры индикаторов автоматически настраиваются на каждый рабочий тайм-фрейм. На графике М30 индикаторы не отображаются. Слишком малы отличия от Н1 и М15 и информация этого графика в рамках используемого метода анализа не является необходимой.

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

Стратегии доходной работы на ФР

 

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

  Итак, я на текущий момент могу выделить следующие стратегии, которые позволяют зарабатывать средства на ФР:

1) Стратегия, связанная с поиском и «окучиванием» своей ниши. Правда большинство их уже занято крупными игроками, поэтому для большинства трейдеров — это узкие ниши, неинтересные крупным игрокам по разным причинам, обычно из-за плохой ликвидности.

Например, одно время развлекался арбитражём между фьючерсами на ммвб и ртс с учетом курса доллара. Было это, правда, давненько. Тогда из-за низкой ликвидности фьючерса ммвб заработать 5%-10% в месяц почти что безрисково вполне можно было, но суммы там, естественно, были мелковаты.

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

А вы ждете сырьевое ралли?!

А вы ждете сырьевое ралли?!


В отношении S & P500 индекс сырьевых товаров GSCI в настоящее время торгуется на самом низком уровне за 50 лет. Кроме того, отношение значительно ниже долговременной медианы 4.1. Следуя понятию средней реверсии, мы должны видеть привлекательные инвестиционные возможности.
А вы ждете сырьевое ралли?!
Источник:http://www.mining.com/chart-commodity-prices-slump-50-year-low-us-stocks

Цифровизация трейдинга. Часть1 Фатальные заблуждения трейдеров, погружающихся на финансовое дно, и возможный путь спасения

Приветствую обитателей Смарт-лаба.

То, что я вам скажу сегодня, возможно вам скажут завтра, но, скорее всего,  в искаженном виде, а  может  и  не  скажут никогда.

И не говорите потом, что вас не предупреждали.

Миллионы трейдеров (инвесторов) в мире  погружаются на финансовое дно  и  покоятся на нем  из-за  трех  вещей:

Вера (ложная) – в  «интуицию», в то, что рынок пойдет в вашу сторону, в торговую систему  на основе традиционных классических  ТА и ФА, использующих примитивные модели финрынка и не имеющих  мощных   автоматических  адаптационных механизмов,  при этом не зная и не понимая, как  говорят математики, что является  главной компонентой  в трейдинге и роли управляющих  латентных переменных на финрынке

Доверие (наивное) –  статистическим данным, отчетам, новостям, аналитикам,  гуру, кумирам и прочим говорящим головам

Надежда (напрасная) – снять  приличный (!) потенциал с финансовых  полей  без  специальных синтетических (физико-математических и кибернетических)  знаний.



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

Открытие всё?

Банк «Открытие» с 14 июля лишится возможности привлекать деньги бюджета, НПФ и ЦБ

Российское рейтинговое агентство АКРА присвоило банку ФК «Открытие» рейтинг «BBB-» — рекордно низкий для системообразущих банков, сообщает РБК.

В результате банк, входящий в топ-10 по размеру активов в России и имеющий на счетах больше 400 млрд рублей вкладов населения, будет отрезан от возможности привлекать деньги федерального бюджета, негосударственных пенсионных фондов и фондирование от ЦБ.

Cтоль низкий рейтинг частному системообразующему банку агентство пристраивает впервые. Рейтинги АКРА станут нормативными для Минфина и Центробанка с 14 июля. Для работы с деньгами государства требуется рейтинг минимум «А-».

Кроме того, бумаги банка, выпущенные после 14 июля, из-за недостаточного рейтинга не будут включены в ломбардный список ЦБ (минимально допустимый рейтинг — «ВВВ» по национальной шкале).



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

внимательно смотрим на доходность облигаций в квике

Инвестиционное резюме
РЖД-БО-03 торгуется с доходностью 10,94%, которая рассчитывается биржей до оферты – 20.11.2020г. По выпуску предусмотрена возможность досрочного погашения по усмотрению эмитента в дату окончания 5-го купонного периода, то есть 17.11.2017г. Учитывая ставку купона 11,75%, мы считаем, что этот выпуск будет досрочно выкуплен эмитентом, так как доходность БО-03 к путу значительно выше схожих по дюрации выпусков эмитента (около 8,50%). Доходность бумаги к колу 17.11.2017г. составляет 3,81%. Поэтому мы рекомендуем ориентироваться на эту доходность при принятии решения о покупке, а тем, кто держит бумагу в портфеле, рекомендуем переложиться в другой выпуск эмитента.

Схожая ситуация наблюдается с выпусками Газпромнефть-БО-02 и БО-07, которые торгуются с доходностями до оферты 10,40% и 10,27% соответственно. Досрочное погашение по выпускам предусмотрено в дату окончания 4-го купонного периода, то есть 23.03.2018г. Учитывая ставку купона 10,65%, мы считаем, что этот выпуск будет досрочно выкуплен эмитентом, так как доходность БО-02/07 к путу значительно выше схожих по дюрации выпусков эмитента (около 8,50%). Доходность бумаг до досрочного погашения 23.03.2018г. составляет 8,25% (при цене 101,7, по которой периодически проходят сделки). Именно на данный уровень доходности мы рекомендуем ориентироваться при принятии инвестиционного решения.

Открытие

p.s. именно на этом как-то влетела «компания имени которой здесь произносить нельзя», купив облигации Ленэнерго и попав на выкуп эмитентом. При этом, потом долго грозя кулаком бирже, за нерасскрытие инфо


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