Избранное трейдера Don Limon

по

Робот по скользяшкам

    • 02 сентября 2017, 08:03
    • |
    • Albus
  • Еще
Написал для всех желающих робота-советника. Он автоматически анализирует множество акций по следующим индикаторам:
Мувинг с долгим периодом.
Мувинг с коротким периодом.
Робот по скользяшкам
Робот не торгует, только анализирует рынок.
В КВИКе он выглядит так:
Робот по скользяшкам

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

Робот нужен каждому.

И робота должен написать каждый сам. Да, каждый, особенно новичек, и сам.
Сейчас, по прошествии немалого, с моей точки зрения, пути в трейдинге, ответственно заявляю: 
1. Робот поможет Вам оттестировать Ваши стратегии, именно во множественном числе, не только на истории, но и в настоящем. Достаточно подключить демо-счет.
2. Робот поможет разработать оптимальные для Вас ММ и РМ.
3. Написание робота не позволит Вашим мозгам сохнуть или пухнуть от безделья. Вместо просмотра всякой хрени и зловредного времяпровождения, зачастую ухудшающего Ваше здоровье, физическое и психологическое, Вы окунетесь в интереснейший мир, мир логики и математики, мир, в котором все Ваши цели достижимы, но не иссякаемы.
4. Вы перестанете бояться рынка, а будете наблюдать за ним, практически, с научной точки зрения. 
5. Вы научитесь объективно оценивать Ваши достижения и ошибки. Перестанете выискивать виноватых «куклов» и подлых брокеров, охотящихся за Вашими стопами и депозитами.
6. Вы повысите Ваши умственные способности, уравновесите нервную систему, возможно, начнете снисходительно относиться к чужим недостаткам и уважать чужие достоинства.

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

История трейдера, который поставил на колени Уолл-стрит

Навиндер Сингх Сарао

6 мая 2010 года на американских биржах произошел инцидент, который вошел в историю финансовых рынков как «Флэш крэш» или «Молниеносный коллапс». За 5 минут индекс Доу Джонса обвалился на целую тысячу пунктов, а капитализация американского фондового рынка уменьшилась более чем на триллион долларов. Совместными усилиями американских финансовых структур обвал был ликвидирован, однако остался вопрос: что послужило причиной этого обвала? Американские прокуроры считают, что нашли виновного в обвале злодея. Некоторые СМИ считают, что они нашли не виновного, а козла отпущения.Версия американских следователей хорошо бы подошла для лихого голливудского фильма: одинокий нелюдимый финансовый гений и социопат в одном лице закрывшись от мира в своей спальне с помощью своего компьютера и острого интеллекта обрушивает американский финансовый рынок.

Сам того не зная, кастинг на роль голливудского злодея-одиночки выиграл британец индийского происхождения 36-летний Навиндер Сингх Сарао. По требованию американских следователей он был арестован в Великобритании и сейчас ждёт экстрадиции в США, где ему предъявлено 22 обвинения в манипулировании рынком ценных бумаг. Версия ФБР о жизни и преступной деятельности человека, обвалившего Уолл-стрит, выглядит примерно так:

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

Частный трейдинг - не профессия!

Постоянно  натыкаюсь на мнение, что трейдинг — это искусство, это очень сложно, это профессия. Вот свеженький пост, не самый плохой

Аналогичное мнение изложил Тимофей в своей книге. Сравнил трейдера с нейрохирургом. Мол, не будете же делать операцию на мозге без знаний и опыта.

В то же время все знают, что на растущем тренде  зарабатывают абсолютно все инвесторы, какими бы они не были неопытными. Как так?

А так, дорогие мои. Эти сравнения с другими профессиями некорректны.

Частный трейдинг — это рыбалка. Это не профессия, а самозанятость (по управлению своим биржевым капиталом). Сравните рыбака в море, выбирающего сетью сельдь, и получающего за это зарплату, и рыбака, вываживающего одного крупного карпа себе на потеху.

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

Граница успех/неуспех лежит не в отношении к трейдингу. И не в объеме знаний.

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

Про настоящих роботов, с ценой далеко за 500к рублей

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

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

Возможно, еще что-нибудь интересное по ходу расскажу :)

Уверен, кому-нибудь и интересно будет. Это мой первый блог. Давно думал, что делать с моими знаниями, но идей пока нет, может кто предложит :) Правда, скорее всего, что-то и устарело уже (инфраструктура биржи, скорее всего), давно этим занимался — более трех лет назад перестал.

Вообще, должен признать, нынешним алготрейдерам очень тяжело и будет еще тяжелее. Информацию приходится собирать по крупицам. Если лет 5-6 назад все достаточно легко делились информацией и подходами, то сейчас действительно стоящей информации вообще нет. Все, что есть на смартлабе по поводу алго и hft — настолько не значительно, а в 99% — ерунда. Помню, на конфе в Геленджике можно было получить больше практической информации, чем во всех книжках по hft :)



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

Мэтрам волнового ТА посвящается.

Как власть ничтожна без денег, а деньги порождают жажду власти, так и забвение после славы переживается человеком — болезненно.

Ральф Нельсон Эллиотт 

25 лет он занимал руководящие должности главным образом на предприятиях Мексики и Центральной Америки, связанных с железной дорогой. 

Основная заслуга этого удивительного человека в умении пиарить свое имя, будучи обыкновенным бухгалтером, он умудрился так раскрутить имя, что эхо докатилось до кабинетов Белого дома.

В то время у США были проблемы с Никарагуа, страна никчемная, а войска держать приходиться и потому,

В 1924 году Государственный департамент США предложил ему должность министра финансов Никарагуа. 

В феврале 1925 года Эллиотт начал применять свой опыт реорганизатора для перестройки финансовой системы целой страны.

Наворотил такое, что США спокойно слиняло из Никарагуа не беспокоясь ни о чем, на ближайшие 100 лет.



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

Мы ? делаем ? деньги ? на бирже ? (анализ лозунга)

Вследствие всем понятных причин — этот лозунг постоянно у меня перед глазами.
И постоянно я испытываю когнитивный диссонанс.
Сегодня мощность диссонанса пересилила мою природную лень — и я решил черкнуть пару строк.
Мысли будут банальными, ибо большинство и так всё понимает, без разжёвываний.
Но не могу молчать! )))
Что же кроется за этими красивыми словами ?
На бирже умные и умелые отбирают деньги из слабых рук у торопливых, неосторожных, наивных и расточительных.
А кто они — эти «Мы» ?
Мы — это те 4% успешных биржевых игроков, которые планомерно увеличивают свои накопления при помощи удачных биржевых операций.
Биржа — это то место, где государство позволило одним законно отбирать деньги у других при помощи ставок на предполагаемое движение цен.
Деньги — это особый товар, являющийся всеобщим эквивалентом стоимости других товаров и услуг, втч эквивалентом стоимости рабочей силы (рабочей силы — как разновидности товара).
Если индивид обладает сбережениями и готов этими сбережениями рисковать, то своей готовностью он ставит виртуальную подпись — что для него эти деньги являются лишними.

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

Лень и праздность – залог здоровья!

Считает Петер Акст, знаменитый немецкий медик.

Так как посты про здоровье стали мега актуальными на СЛ, а эту тему запустил сам Тимофей, то считаю должным поделиться интересной статьей. Так что, его величество, РЕПОСТ.

Что за бред сивой кобылы, наверняка скажет продвинутый читатель. Совсем эти профессора сбрендили! Всем же хорошо известно: чтобы сохранить здоровье и продлить молодость, быть успешным в обществе и трудовом коллективе, надо пробегать по утрам несколько километров, а еще лучше – марафон по выходным! Упорно качать мышцы железом, тренажерами в фитнес-центре. И будет вам долгая, счастливая, жизнь!
С таким настроем я и стал перелистывать книгу Петера Акста «Ленивые живут дольше».

Читаю и глазам не верю: «Лень и праздность – залог здоровья». Чистое шарлатанство. Ну, профессор, погоди! Выведу тебя на чистую воду…

БАБИЙ ВЕК ДЛИННЕЕ МУЖСКОГО


Однако этот Акст оказался не прост. Под свое заявление подвел научную базу. Мол, еще в 1908 году физиолог Рубнер установил, что каждому существу вроде бы отпущено ограниченное количество жизненной энергии. Ересь, конечно! Типа забытой пресловутой теории, что каждому мужчине якобы природой дано определенное число половых актов. Недаром ихнего Рубнера быстро забыли. Однако в последнее время идея вновь обрела популярность. Еще один ученый немец, Принцингер, заново исследовал теорию жизненной энергии, которая официально именуется теорией обмена веществ. И установил: все живые существа, в зависимости от массы тела, обладают одинаковым запасом жизненной силы. Профессор приводит конкретные расчеты, тысячи килоджоулей на грамм массы тела. Человеку, вроде бы, отпущено природой вдвое больше энергии на единицу веса, чем большинству животных. Поэтому в принципе он может жить до 130 лет.

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

Тут такое было... история пятничного слива))

Здравствуйте всем!!!

Я торгую средне- и долгосрок. Иногда под настроение торгую интрадей. Запас свободной маржи около 2000% обычно,  Диверсификация по 20-ти парам позволяют не париться, не крыть убыток, пересиживать годами убыточные позы.

Сделал за полтора года +240% и считал себя красафчиком. Но на днях произошло событие, после которого я никогда не стану прежним))

Итак..

ВНИМАНИЕ!!! Не пытайтесь повторить, трюки выполнены профессионалами.

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

В, общем, они со своим другом предложили мне поторговать вместе. ...

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

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

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

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