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

по

Торговая система "купи-продай".

    • 16 октября 2017, 08:10
    • |
    • XXM
  • Еще

Представляю торговую систему «купи-продай».

Суть ее очень проста: Покупаем некоторое количество бумаг (start_qty), и выставляем заявки по лесенке на продажу через определенное количество пунктов.
Шаг лесенки назовем step. Да, бумаги следует продавать одинаковыми пачками, по qty_in_step лотов.
(Оставляем пока за бортом поста тему — а что делать, если купили, выставили заявки на продажу, а бумага пошла вниз?)
Поведение Equity при разных start_qty приведено на рисунке.
Супер-система, купи-продай. Многие знают, но стесняются говорить ;)


Индикаторы можете скачать со страницы www.xsharp.ru/indikators  файл StockTest.zip, два индикатора:
1. StockTest.lua — проставляет метки сделок. Ее следует добавить на график бумаги;
2. StockEquity.lua — строит кривую Equity, следует добавить на отдельное окно.

Успешной игры по тренду!


Публичный проект

    • 11 октября 2017, 14:31
    • |
    • TheOLD
  • Еще
Хотел я сделать сайт с публичной торговлей — в виде блога, в котором публиковались бы сделки и тд, но, так как мне не до сайтостроения/ведения, я решил, что буду делать это здесь, тем более, что я вот как уже месяц снова ( я присутствовал на этом сайте с момента создания — но ушел пару лет назад, было связано с моим отъездом из раши и волной наплыва кремлеботов, коих я терпеть не могу — именно они убили этот ресурс своими полит.высерами ) как здесь. Итак, поехали:

О себе — мне 38, живу не в раше, хотя у меня в раше некоторое кол-во бизнесов и я часто прилетаю по делам.
Торгую 11 лет, торговал рашу до 11 года — в 11 ушел на Америку и по сей день ежедневно торгую нефть ( фьючерсы и опционы ).
У меня несколько счетов, доходов вполне хватает на все, что нам надо ( у меня много детей — 3 + супруга беременна ). ДУ не занимаюсь, никого не учу за деньги и не считаю, что трейдингу можно научить — трейдинг, на мой взгляд, обычная, монотонная деятельность, не требующая специальных знаний и высокого IQ.

Я выделю сегодня небольшую сумму и буду торговать с отдельного счета, буду вести свой блочек и публиковать сделки и отчеты. Смысл? Да что то нечто вроде социальной нагрузки + показать, что это вполне реально. Если будет интерес — бесплатно расскажу о своей системе, она примитивная — единственное, сидеть у мониторов надо всю сессию, ибо я торгую только то, что вижу сейчас и мне абсолютно плевать, что будет завтра. Я торгую только внутри дня. Торговать буду WTI ( QM ). Поторгую годик, надеюсь, если мотивацию не потеряю )
Завтра утром начну — скину исходные по депо и вперед. Присоединяйтесь, быть может что полезное и почерпнете.
  

7 советов от Линды Рашке.

    • 06 октября 2017, 21:19
    • |
    • ZDH
  • Еще
1. Большинство шаблонов или систем, которые имеют очевидное преимущество, основаны на одном из четырех устойчивых принципов ценового поведения:
— тренд имеет более высокую вероятность продолжения, чем разворота
— импульс предшествует цене
— окончанию тренда предшествует кульминация
— рынок чередуется между расширением диапазона и сокращением диапазона

2. Последний час часто показывает, насколько силен тренд на самом деле. «Умные» деньги показывают свою руку в последний час, продолжая выставлять цены в свою пользу. Пока рынок имеет последовательные сильные закрытия, ищите тенденцию к продолжению. Восходящий тренд, скорее всего, закончится, когда состоится утреннее ралли, за которым последует слабое закрытие.

3. Покупайте первый откат после нового максимума. Продавайте первое ралли после нового минимума.

4. Сильный рынок в середине дня, как правило, продолжается и на следующий день.

5. Максимум и минимум предыдущего дня являются двумя очень важными «опорными» точками, так как это были решающие моменты, когда покупатели или продавцы входили накануне. Посмотрите, как рынок либо тестирует и откатывается от этих точек, либо пробивает и показывает признаки продолжения.

6. Сила утра: 
— лучшие развороты для трейдинга происходят утром, а не днем
— первый часовой диапазон устанавливает рамки для оставшейся части дня
— чем больше рыночные гэпы, тем больше шансов на продолжение и тренд
— существенный процент дневного диапазона происходит в первый час, поэтому очень важно торговать агрессивно, если появились ранние признаки сильного тренда на сегодняшний день

7. В денежном мире, который является миром, созданным человеческим поведением, никто не имеет ни малейшего представления о том, что произойдет в будущем. Отметьте это слово — никто! Таким образом, успешный трейдер не основывается на том, что возможно произойдет, а реагирует на то, что уже происходит. 

"Манька" Облигация

Всем привет еще раз, да да именно МАНЬКА ОБЛИГАЦИЯ, ибо первая ассоциация на облиги — «Место встречи изменить нельзя»
каюсь вообще не знаком с этой темой, от слова НИРАЗУ. 
доходность в 10% годовых никогда не привлекала, а тут приходит товарищ и так мол и так, хочу вложить но чтобы вот гарантированно хотяб чуть чуть, говорит слышал про облигации, помоги говорит выбрать — чо взять говорит, а я то вообще дурак дураком в облигах.

умные люди ткнули носом в офз 24019 smart-lab.ru/q/bonds/SU24019RMFS0/ говорят бери — верняк, я то им верю, но вот разобраться самому б еще хотелось.. 

собственно вопрос такой: с чем это едят, как ищут, где ищут, и вообще что с чем. 

как пример: офз 24019
текущая цена 102% от номинала
в конце вернут номинал тоесть минус 2% и плюс гарантированные 9%? тоесть суммарно получается 7% годовых? 
и что такое купон? ну кароч я совсем баран в этой теме

заранее спасибо


Тех.Анализ и опционы РИ

Всем привет дорогие друзья.
Вчера был неоднозначный день! Но сегодня он будет еще горячей )) 
СИ продолжила развивать свой импульс без отката
РИ вернулся после импульса вверх, и без тестирования ушел обновлять лои. однако ММВБ еще не развернулся, и РИ «решил его подождать»
ЗОЛОТО лениво возвращается после импульса
СБЕР пробил уровень поддержки АП тренда, и может начать отрабатывать разворотную модель
ГАЗПРОМ после импульса вернулся в зону 120 — 121 — теперь ожидается рост
ЛУКОЙЛ продолжает развивать импульс.
БРЕНТ — вообще ничего не хочу о нем писать )) 

***************************************
небольшое отступление:
Вчера мы вошли в ТОП 2 по комментариям, я сам такого не ожидал. При всем моем уважении к Атору — мы его неожиданно подвинули на 3е место.



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

В помощь рыбакам- невод на qpile.

    • 19 сентября 2017, 19:31
    • |
    • gardist
  • Еще

Суть скрипта — отслеживать резкие изменения цены.

1. Создайте каталог c:\Qpile — в нем будем хранить старую цену.
Создайте подкаталог c:\Qpile\GO — в нем будем хранить пойманные шпильки.
При наличии шпильки(гэпа) в подкаталоге GO будет создан файл с названием этого фюьчерса, это может быть удобно для дальнейших действий, скажем, можно запускать по планировщику заданий фaйл check.bat, который будет проигрывать мелодию:

@rem check.bat
dir «c:\Qpile\GO» /a-d >nul 2>nul && (
@ECHO Поймали шпильку
%WINDIR%\Media\tada.wav
) || (
@ECHO Ничего не поймали
)

2. Посмотрите код текущих фьючерсов (в таблице фьючерсов добавьте колонку Код бумаги)
Отредактируйте коды инструментов, укажите коды актуальных фьючерсов:

sINSTRUMENT_BRENT=«BRV7» ' код инструмента BRENT
sINSTRUMENT_GOLD=«GDU7» ' код инструмента GOLD
sINSTRUMENT_EURUSD=«EDU7» ' код инструмента EUR/USD

3. Настройте при каких параметрах выводить сообщения о шпильках
'Процент изменения цены при которой выводится оповещение:
sPrc_BRENT = 0.5
sPrc_GOLD = 0.2
sPrc_EURUSD = 0.4

4. Установите задержку обновления цены.
' Задержка:
NEW_GLOBAL(«sDELAY», 5)
(если при запуске скрипта стоит период расчета 10 сек. то значение 5 будет соответствовать примерно минуте).



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

Торговая система своими руками. Часть 2. Базовые компоненты.

    • 01 сентября 2017, 11:36
    • |
    • k100
  • Еще

     Приветствую! В предыдущем посте была теория, теперь к делу. Кое-что буду упрощать, чтобы представить картинку в целом.

     Итак, чтобы проект не зависел от API внешней com библиотеки (SmartCom или д.р.), чтобы в коде стратегий  не использовались специфические типы, разработку я начала с обёрток над смарткомом. Я определил три базовых интерфейса: IConnectGate, IMarketDataGate и IPortfolioGate. Соответственно для подключения, для получения маркет-даты и для выставления заявок и работы с портфелем. Причём каждый из этих трёх интерфейсов мне надо было реализовать минимум дважды – для смарткома и для локального тестера.

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



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

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

Мое выступление на конференции СмартЛаба | От идеи до торговой системы

В своем выступлении на конференции СмарЛаба я хотел рассказать о том, как и откуда приходят идеи для торговых систем. И привести пример из собственной практики. Но то ли я не так все преподнес, то ли меня не поняли, но слушатели услышали совсем другое. Поэтому решил подправить ситуацию и сделать видео со своим выступлением на конференции.


Стратегии торговли диагональных уровней. Тестирование, использование…

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

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

Что выяснилось? Эти системы работают в реале и существует множество способов «обыгрывания» диагональных уровней. Для их торговли применял фильтры ложного-неложного пробоя по Л. Рашке; метод Сперандро (там уровни чуть по другому рассчитываются) и т.д… Здесь иногда появлялись посты на эту тему, торгуют их. Например misa с его простой и гениальной системой.

 Метод постепенно эволюционировал, оброс диверсификацией, мани-менеджментом и т.п.

      Все это я реально использовал в своих торговых алгоритмах, которые зарабатывали продолжительное время. Затем доходность упала (весна 2016, снижение волатильности в Си, которая была ведущим инструментом в портфеле) мани-менеджмент «порезал» плечи, робот «мумифицировался» и был отключен. Я перешел на другие методы торговли, а недавно протестировал некоторые незаслуженно заброшенные системы диагональных уровней – работают.



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

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