Избранное трейдера Чёрный Трейдер

по

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

Вернул налог и сплю спокойно

Хочу поднять тему налогового вычета. Буду говорить на примере своего старенького брокерского счёта.
Ситуация: Несколько лет назад я получил убыток на Московской бирже, то есть зафиксировал его. В следующие годы я получаю прибыли, но с них я плачу (точнее, мой брокер) налог в 13%. Совершенно справедливо воспользоваться правом на возврат этих налогов – учесть убыток.

Вообще, я «играя» с позициями в портфеле всегда старался минимизировать налогооблагаемую базу в каждый год. Если наклёвывается хорошая прибыль, то я пере-открывал убыточные сделки (без них не бывало))). Таким образом, налоговая база чуть уменьшалась. 13% берут не с доходности портфеля на 31 декабря, а с сальдо по всем операциям - итог по закрытым сделкам в год.  

Самостоятельно вернуть налог не получилось, хотя мой брокер прислал со своей стороны всё что нужно (бесплатно). Как только осознал, сколько затрачу времени на это дело — энтузиазм сошёл на нет. Другое дело, что всё больше компаний, которые предоставляют услуги по сопровождению этого процесса: делают Декларацию и дают инструменты для дистанционной отправки 3-НДФЛ в налоговую. 



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

Инвестиционные стратегии для российского рынка акций

Инвестиционные стратегии на основе фундаментальных индикаторов, на первый взгляд, являются простым способом отбора акций. Во-первых, они относительно легки и интуитивно понятны в расчётах, во-вторых, они доказали свою эффективность, о чем можно прочитать в исследованиях, приведенных в книгах Stocks for the Long Run и What Works on Wall Street.

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

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



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

Бэнкинг по-Русски: Облигации...Бинбанк. Новая напасть

Как сообщает Bloomberg, с 1 июля центробанк перестанет принимать в качестве залога для рублевых кредитов 33 выпуска облигаций. В результате банки, которые держат эти ценные бумаги, лишатся доступа к ликвидности от ЦБ, которую тот предоставлял им под фиксированную ставку в ежедневном режиме. 

Всего в «черном списке» центробанка бонды на 160 млрд рублей. Это бумаги российских эмитентов с рейтингами ниже «B-/B» от S&P или Fitch и «B3/B2» от Moody’s, рассказали Bloomberg банкиры, получившие письмо регулятора. 

По их словам, по ряду облигаций — на 130 млрд рублей — уже введены повышенные дисконты (до 60%). С 1 июня ЦБ принимает эти бумаги лишь с 40-процентной уценкой, а через месяц закроет такое кредитование полностью. 

В числе облигаций-изгоев оказались и долговые бумаги самих банков, в том числе из первой сотни, рассказали источники Bloomberg. 
Это принадлежащий миллиардерам Михаилу Гуцериеву и Микиалу Шишханову Бинбанк (12-е место по активам и 532 млрд рублей вкладов); КБ «Ренессанс Кредит» миллиардера Михаила Прохорова (63-е место и 72 млрд рублей вкладов); подконтрольный «Ростеху» Новикомбанк (37-е место и 29 млрд рублей вкладов) и принадлежащий «Ингосстраху» Банк Союз (72е место по активам и вклады на 27 млрд рублей). 

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

Фазы тренда | QUIK | Индикатор

1. Теория
Фазы рынка/тренда. Метод Вайкоффа.


Фазы тренда | QUIK | Индикатор

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

Ну а тренд – это дисбаланс.

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



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

Нужен совет по выводу средств!

В связи с срочной необходимостью покупки недвижимости понадобилась наличка. Решил вывести часть средств с торгового счета. Сам вывод беспроблемный, а вот с получением кэша — засада! Ссылаясь на антиотмывочный закон во многих банках месячный лимит до к600, свыше в некоторых, попадаешь в список нежелательных клиентов с предложением закрыть у них счет. У меня счета/карты в 5-ти, втб предлагает 10% за снятие свыше 600, без комиссии тайм-аут 40 (СОРОК) дней. Заявления в ЦБ, ФСФМ и тд  долго, деньги нужны срочно. 
Просьба посоветовать, кто сталкивался. Рейтинг не интересует, просьба вывести на главную, заранее всех благодарю. 


Какой же трейдинг выгоднее, а?

Тут вот спрашивают какой вид трейдинга самый выгодный.

Думаю есть два противоположных полюса, а все остальное в какой-то степени лежит между ними. Что собственно выбрать, зависит наверно от жадности выбирающего индивида и его адекватности в целом. Безусловно и любопытство и здоровый спортивный интерес так же играют здесь свою роль, но я бы не стал ее сильно преувеличивать. Мозг, при его хотя бы минимальном наличии, тут конечно рулит, что говорить! 

Самый выгодный трейдинг в РФ, я думаю вот  такой:

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

2. С каменным лицом, садимся на баксы и терпеливо ждем обвала типа 2008, или,  если совсем невтерпеж, то хотя бы как в  2011. Он обязательно будет! Услышав про дно, нереальные уровни, про смешные цены ниже баланса, садимся по-крепче и продолжаем упрямо ждать. 

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

ФСК ЕЭС - Границы цен

не для главной страницы, только для форума

личное мнение — никого не агитирую

больше конструктивности коллеги.

Исходные

ФСК ЕЭС - Границы цен
Основная деятельность передача электроэнергии — с этим и так всё понятно, нормальная отличная прибыль по соотношению к выручке.

Переоценка пакета ИнтерРао — бумажная прибыль, и никто не будет её распределять в текущих дивидендах, сама мысль о распределении переоценки полный бред. Другое дело продажа пакета и выплата акционерам отдельными дивидендами, что для Россетей было бы наилучшим вариантом.

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

Дивиденды2017Алмазы и Ударники чистоприбыльного производства

В обзоре 29.01.2017 «Полюс и банки-ударники чистоприбыльного производства» http://smart-lab.ru/blog/377297.php  мы рассмотрели рост ЧП в банковском секторе. Но время идёт быстро и уже не только БАНКИ опубликовали свои чистые прибыли, но и компании не банковского сектора начали публиковать бухгалтерские отчеты по итогам 2016 года.

Среди них тоже есть эмитенты, которые нарастили ЧП по итогам 2016 года
Дивиденды2017Алмазы и Ударники чистоприбыльного производства
Лидер списка ТГК-14 (подконтрольна РЖД) обеспечивает тепловой энергией потребителей на территории Забайкальского края и Республики Бурятия. Компании принадлежит семь ТЭЦ, два энергетических комплекса
Дивиденды2017Алмазы и Ударники чистоприбыльного производства

Рост ЧП компании по РСБУ прошел на 3800%.При этом выручка в 2016 году увеличилась всего на 6,5%
Дивиденды компания выплачивала в последний раз в 2006 году.
На втором месте Интер РАО, отразившая такую высокую ЧП, полученную в результате переоценки активов.
На третьем месте таблицы Алроса. ЧП увеличилась в 7 раз, выручка увеличилась на 35%.
Обращаю ваше внимание, что ряд компаний из таблицы выплатили промежуточные дивиденды в 2016 году.
Так, Алроса Нюрба выплатила по итогам 9 месяцев 2016 года 17500 рублей и Трансконтейнер выплатил 347,6 рублей за 6 месяцев 2016 года.
На прошедшей неделе были и другие позитивные новости. Например, значительно увеличилась вероятность получения 10% ДД в акциях Алроса этим летом.
Да, мы понимаем, что в связи с улучшением ситуации в российской экономике, некоторые компании с госучастием, попытаются пролоббировать себе преференцию в виде уменьшения размера чистой прибыли, направляемой на дивиденды с 50%, как настаивает Минфин, на меньший процент, типа 35% или даже 25%. Но ряд факторов говорит о том, что Алроса всё же направит на дивиденды 50% ЧП.
Давайте рассмотрим цепочку этих факторов.
17.02.2017 прошла такая новость: (Bloomberg) — Правительство России обсуждает смену главы ПАО «АК Алроса», рассказали три источника, знакомых с ситуацией.
Вопрос о смене руководителя крупнейшей алмазодобывающей компании мира обсуждается, директива, предписывающая наблюдательному совету проголосовать за отставку президента Алросы Андрея Жаркова, еще не подписана, сообщили источники, попросившие об анонимности из-за непубличного характера информации, не уточнив, когда может произойти отставка. Мнение Жаркова по ряду стратегических вопросов не всегда совпадало с позицией членов правительства, сообщили два источника.
Жарков проголосовал против сокращения инвестиций и капитальных затрат на 2017 год на одном из последних заседаний в декабре. На этом совещании совет директоров утвердил сокращение долгосрочных финансовых вложений на 3 миллиарда рублей в текущем году, капитальных расходов — на 1,4 миллиарда рублей, а также снижение расходов на выплату заработной платы.
Прочитав эту новость, я сказала себе: «ОГО! Даже президента могут отстранить от должности, если он не согласен высвободить деньги на выплату больших дивидендов!» И решила ещё раз просмотреть цепочку дивидендных факторов в Алросе.И так, СД Алросы проголосовал в декабре 
Первое: за снижение себестоимости в компании (рост ЧП) 
Второе: за уменьшение расходов, источником для которых служит, в том числе и ЧП Алросы. Это значит, СД уже намечает, что будут увеличены другие расходы из ЧП эмитента. Появилась осторожная надежда на 50% ЧП, которую направит компания на дивиденды.

Подтверждением этому служит интервью министра имущественных и земельных отношений Якутии Евгении Григорьевой. Цитирую:
министр имущественных и земельных отношений Якутии Евгения Григорьева сообщила, что в 2017 году ожидается прирост размера дивидендов, поскольку прибыль алмазной монополии планируется в достаточно большом объеме. Как заявляло руководство АЛРОСА, на дивиденды будет направлено до 50% прибыли.
Кроме того, во время летней 2016 года продажи 10,9% акций Алросы,
Дивиденды2017Алмазы и Ударники чистоприбыльного производства

чтобы подогреть интерес иностранных инвесторов, чиновники объявили о намерении сохранить уровень дивидендов госкомпании на уровне 50% чистой прибыли. А ведь пакет Алросы снова включен в приватизационный список на 2017-2019 годы. Значит обещание будут соблюдать.
А это значит, что ДД Алросы в 2017 году  может превысить 10%.

И ещё про дивиденды. Школа Московской биржи в преддверии нового дивидендного сезона и отсечек под дивиденды, которые уже скоро начнутся( например в прошлом году первая отсечка ЛСР была 18.04.16) предложила мне провести двухдневный вебинар Дивидендный трейдинг. Базовый курс.  red-circule.com/courses/203   
В прошлый раз, когда проводили аналогичный вебинар, ШМБ разрешила увеличить время, выделенное на проведение вебинара, для того, чтобы ответить на все вопросы участников. Думаю, что если вопросов будет много, и в этот раз ШМБ пойдёт навстречу.

 


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