Избранное трейдера Константин

по

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

НЕФТЬ – сложнейшая смесь углеводородов

Не пишите больше глупостей про зависимость цены от теплоотдачи....

это я про нефть в частности говорю.

ИТАК.....

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

Главную часть нефтей составляют три группы углеводородов – алканы, нафтены и арены. 

Алканы (в литературе Вы можете также столкнуться с названиями предельные углеводороды, насыщенные углеводороды, парафины) химически наиболее устойчивы. Их общая формула СnH(2n+2). Если число атомов углерода в молекуле не более четырех, то при атмосферном давлении алканы будут газообразными. При 5-16 атомах углерода это жидкости, а свыше – уже твердые вещества, парафины. К нафтенам относят алициклические углеводороды состава CnH2n, CnH(2n-2) и CnH(2n-4). В нефтях содердится преимущественно циклопентан С5Н10, циклогексан С6Н10 и их гомологи. И наконец, арены(ароматические углеводороды). Они значительно беднее водородом, соотношение углерод/водород в аренах самое высокое, намного выше, чем в нефти в целом. Содержание водорода в нефтях колеблется в широких пределах, но в среднем может быть принято на уровне 10-12% тогда как содержание водорода в бензоле 7,7%. А что говорить о сложных полициклических соединениях, в ароматических кольцах которых много ненасыщенных связей углерод-углерод! Они составляют основу смол, асфальтенов и других предшественников кокса, и будучи крайне нестабильными, осложняют жизнь нефтепереработчикам.

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

" Я действительно порекомендовал начать к этому привыкать "

    • 08 июля 2017, 12:04
    • |
    • cerenc
  • Еще

Банковские карточки с криптовалютами: есть ли у них будущее?
Анастасия Зырянова. Русская служба Би-Би-Си
7 июля 2017

 Джулиан Хосп — основатель проекта TenX Правообладатель иллюстрации TenX Pte. Ltd.

Сингапурская компания запустила выпуск платежных карт, на которых можно будет хранить деньги в криптовалютах. Русская служба Би-би-си спросила у ее основателя, как к этому начинанию относятся Visa и MasterCard, власти России и США, и не приведет ли экспансия электронных денег к анархии.

 В конце июня сингапурский стартап TenX вышел на ICO (Initial Coin Offering), то есть провел краудфандинг в криптовалюте, собрав 200 тысяч так называемых эфиров. По курсу на тот день данная сумма криптовалюты была эквивалентна примерно $67 млн. В размещении поучаствовали 4 тысячи человек.

 TenX собирается выпускать дебетовые карты Visa и MasterCard для оплаты покупок криптовалютой. Один из основателей этого проекта Джулиан Хосп рассказал Русской службе Би-би-си, куда ведет быстроразвивающийся рынок криптовалют.



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

BRENT. Варианты движения.

    • 01 июля 2017, 08:47
    • |
    • MGM
  • Еще
Нефть пошла в рост, но коррекция будет и целью ее будет
тест уровня 48,08 — 48,18$, далее может 47,17 — 47,57$, ранее служившие сопротивлением.
Отбой вверх покупать, пробой вниз продавать.

Краткосрочные цели роста, варианты ухода на коррекцию к росту:
— от текущих коррекция (вероятность 15 — 20%, моя оценка);
— от пересечения со скользящей средней на уровне 49,79 — 49,94$ (вероятность 80 — 85%).

Минимальная цель этого роста (наиболее вероятная, ~ 75%) в диапазон: 52,22 — 53,03$.
Средняя цель этого роста (вероятность 10 — 15%) в диапазон: 54,24 — 54,54.
Максимальная цель этого роста (вероятность 5 — 10%) в диапазон: 55,55 — 56,56.

Диапазон целевой на конец 2017 — начало 2018 прежний: 58 — 63$.

Не забывайте плюсовать блог и профиль. Успехов!

Тут я указал вовремя и безошибочно прежний лой и разворот вверх: 
BRENT. Панические продажи. Важный диапазон. 
smart-lab.ru/blog/tradesignals/405544.php

Когда уже совсем все стало ясно и наблюдая за армией
шортящих нефть на смарт лабе, я опубликовал это:
Пока ВАМ втирают дичь об обвале цен на нефть...
smart-lab.ru/blog/405849.php

Тут указан вовремя и безошибочно лой акций Роснефть и цели роста:
Роснефть — панические продажи!
smart-lab.ru/blog/tradesignals/404344.php

Тут заблоговременно предупредил об уровне снижения нефти:
BRENT. Два варианта лоя.
smart-lab.ru/blog/tradesignals/403466.php

Подписывайтесь на блог.



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

Тепличный бизнес

ширина теплицы 11 метров :

1) Крайний ряд, высота 2 метра + 1 метр в земле, столбы стоят на расстоянии 1.5 метров друг от друга в длинну

0.075 х 0.075 х 6 метров = 0.03375 х 67 штук = 2.261 куб.

2) Средний ряд, высота 2.5 метра + 1 метр в земле, столбы стоят на расстоянии 2 метра друг от друга в длинну

0.075 х 0.075 х 4 метра = 0.0225 х 100 штук = 2.25 куб.

3) Центральный столб, высота 3.5 метра + 1 метр в земле, столбы стоят на расстоянии 2 метра друг от друга в длинну

0.075 х 0.075 х 5 метров = 0.028 х 50 штук = 1.40 куб.

4) Крыша ( обрешетка ) 0.075 х 0.075 х 6 метров = 0.033 х 222 штуки = 7.326 ( каждые 0.9 метра )

5) Продольные 0.075 х 0.075 х 6 метров = 0.033 х 85 штук = 2.805 куб.

6) Дюймовка ( центр ) 0.025 х 0.1 х 6 метров = 0.015 х 17 штук = 0.255 куб.

Итог:

2.261 + 2.25 + 1.4 + 7.326 + 2.805 + 0.255 = 16.297 куб. х 10.000 руб куб = 162.970 руб.

Плёнка :

6500 руб. х 4 рулона ( крыша ) = 26.000 руб.
4000 руб. х 1 рулон ( бока ) = 4.000 руб.
3000 руб. х 1 рулон ( торцы ) = 2.000 руб.

20.000 + 4.000 + 2.000 = 32.000 руб.

Дранка :

500 х 1 метр = 500 метров х 2200 метра = 22 пучка х 250 руб. = 5.500 руб.

Шпагат, навесы, гвозди, уголки, шурупы примерно 20.000 руб.



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

Реальная торговля на двух счетах по миллиону рублей - стрим 16 июня

Всем, кто внимательно читает мои посты, очень положительным было бы посмотреть этот пятничный стрим, можно на скорости 1.25.  Я сам только что прослушал, там не выкинуть ни слова, все по делу, все полезно (видео не форматировалось, ни одного слова не вырезано)

ЭТО МОДЕЛЬНЫЙ РАЗБОР РЫНОЧНОЙ СИТУАЦИИ, так должен уметь делать каждый. Не нужен ни один технический индикатор для этого.

Мы разобрали все основные бумаги, уровни, где ловить, где продавать… и так мы делаем каждый день.

Просто оцените, насколько дневной анализ рынка полезен для трейдера, насколько он может быть конкретен.

Тезисно по ходу видео:

1. Аэрофлот  - утром сыграли сверху вниз (186-182), поставили ловиться вниз 170.5-172.5 — и поймали лои по нему и отскок.

2. Засвечена очень перспективная на мой взгляд идея для крупняка — сыграть аэрофлот вверх на дивы, потом очень сильно его слить и перейти в Алросу, с учетом одинаково больших дивидендов

3. Отдельно был разобран Газпром, с целями закрытия гэпа внутри дня, у 117 добавил шорта прямо на стриме, по факту он свалился к 114.6

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

тайм фреймы, частица моего грааля!

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



СМС для QUIK. Бесплатная программка для трейдера

Написал небольшой помощник для трейдера. Он посылает СМС, когда цена достигнет определенного уровня.  У некоторых брокеров такая фича встроена в QUIK. Но у многих ее и нет. Так что думаю, что будет полезно. Скачать можно тут  https://yadi.sk/d/yp1NKqV_3JszLC




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

Как заработать на бирже (В погоне за блекджеком и шлю**ми! )

Доброе утро! 

Вчера в топе висели посты на тему ухода или исхода с биржи. В общем что одно и тоже, может быть рынок виноват? ММВБ льют без остановки — сама уже не открываю свой ИИС без слез.

Но в целом, судя по всему виноват неверный подход к рынку! И самое печальное, что в топе висят аналогичные посты которые как бы отвечают “нытикам”? Но тем не менее никакого конструктива не содержат.  Никто не пишет как заработать на “блекджек и шлюх”. Почему?

Ладно! Я сама напишу и надеюсь это вам действительно поможет, если не изменить жизнь к лучшему то серьезно поправить свое материальное положение.

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

К примеру: За последние два месяца суммарно я вывела со своих двух ПАММ счетов более 500.00 рублей, это не бумажная прибыль а реальные деньги. 



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

Дивидендный робот

    • 01 июня 2017, 18:34
    • |
    • Albus
  • Еще
Написал робота, который читает Смарт-Лаб :)
Он заходит на страничку с дивидендами:
smart-lab.ru/dividends/
берёт тикер и дату среза реестра (Т+2), и если сегодня акция последний день торгуется с дивидендами, пишет в КВИКе:
Дивидендный робот
Первая цифра: дивиденд в рублях, вторая цифра — див.доходность в процентах. (Без налога)
В день, когда гэп произошёл, он напишет, что сегодня гэп по такой-то акции.
Самую сложную часть робота написал Николай Камынин (программист), за что ему большое спасибо. Моя часть работы была совсем простой.
Чтобы увидеть эти сообщения, надо открыть окошко сообщений в КВИКе.
Делается это так:
Дивидендный робот

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

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