Pair trading

  1. Аватар Руслан Смехов
    Hey there, I just tried Bitsgap cryptocurrency multi-exchange platform and I LIKED it! Follow, trade, manage all your coins from one place and discover new trading opportunities. Sign up too for free. bitsgap.com/?ref=3b44560
    «Start Your Free 14-Day Trial Today»
    API traders rejoice — #Bitsgap Exchange is equipped with an industry-leading API developed to ensure you can buy or sell #cryptocurrency the way it works for you! Learn more at: bitsgap.com/?ref=3b44560

    #Crypto #cryptoexchange #bitcoin #btc #eth #ethereum #cryptotrading #cryptotrader #cryptolife #cryptoworld #blockchain #dlt #BitsgapExchange #Криптовалюты #Криптовалюта #arbitrage #trading bot #signals #Trade on Binance #OKEX #Kraken #crypto #exchanges FTX #Bitfinex #Huobi #Coinbase #Binance Pro #Bittrex #HitBTC #Cex.io #Poloniex #Bitstamp #Coinbene #EXMO #Bithumb #Bibox #Gemini #Gate.io #Liquid #Lbank #THEROCKtrading #api #API #pro #PRO

  2. Аватар ivanov petya
    Спасибо, посмотрю… Ещё бы овладеть как вывести это на график))
  3. Аватар tranquility
    ivanov petya,
    сам не писал индикаторы никогда, но видел в руководстве QLua вроде как вполне себе информативные примеры. Вы в них разбирались? Так-то «последнее значение», возможно, имеет смысл получать из функции OnAllTrade, примерно таким вот образом:


    — глобальный объект
    GDS = { { 0, «SPBFUT», «BRQ7» }, { 1, «CETS», «USD000000TOD» }, { 2, «SPBFUT», «SRU7» }, { 3, «SPBFUT», «GZU7» } }
    — --

    for i = 1, #GDS do
    local gd = GDS[i]
    if (class == gd[2]) and (sec == gd[3]) then
    doSomething( gd[1],
    os.time(alltrade.datetime),
    alltrade.price,
    alltrade.qty,
    alltrade.flags )
    --PrintDbgStr( string.format( «Guide%d has been passed», gd[1] ) )
    return
    end
    end


    для того, чтобы эти тики транслировались в OnAllTrade, на них надо предварительно подписаться при инициализации скрипта:


    local gs = {}
    local dss = {}
    for i = 1, #GDS do
    local gd_info = getSecurityInfo( GDS[i][2], GDS[i][3] )
    if gd_info ~= nil then
    gs[i] = { GDS[i][1], gd_info.short_name, gd_info.min_price_step }
    dss[i], errMess = CreateDataSource( GDS[i][2], GDS[i][3], INTERVAL_TICK )
    PrintDbgStr( errMess )
    else
    gs[i] = nil
    dss[i] = nil
    PrintDbgStr( string.format( «Wrong security for i = %d», i ) )
    end
    end
    return gs, dss


    А так, руководство Qlua в помощь, за вас код никто писать не будет. Только, возможно, помогут с каким-нибудь багом разобраться, но это должно так совпасть, чтобы кто-то другой с ним тоже столкнулся...
  4. Аватар ivanov petya
    остаётся вопрос в получении последнего значения…


    ivanov petya, можете объяснить по-человечески, что за последнее значение получить хотите? Вообще, я так понимаю, это индикатор, а не торговый робот, т.к. в коде нет условий для входа/выхода из позиции, посылки торговых приказов.

    tranquility, хочу получить разность последних значений с графика между двумя инструментами… чт-то не получается пока.а этот код выводит только разность того момента, когда его загружаешь, там проблема в считывании с графика… не работает с текущими значениями
  5. Аватар tranquility
    остаётся вопрос в получении последнего значения…


    ivanov petya, можете объяснить по-человечески, что за последнее значение получить хотите? Вообще, я так понимаю, это индикатор, а не торговый робот, т.к. в коде нет условий для входа/выхода из позиции, посылки торговых приказов.
  6. Аватар ivanov petya
    Как бы разбираться в чужом коде, отлаживать его — это уже работа. А делать чужую работу бесплатно у нас как-то не принято. Если бы ты больше сам посвятил времени своей задаче, то и количество строчек можно было бы уменьшить до 3-5 максимум. И если бы по ним у тебя все равно остались какие-то вопросы, точно кто-то бы подсказал что там да как.

    tranquility, спасибо, хоть не прошли мимо чужого горя))да был бы там код… много времени не отнимет у знающего… а вот мои нервы любителя изрядно потрепал… что понравилось, так это возможность считать с разными парами, и можно задавать вес… также хорошо, что на луа, будет меньше грузить систему, если его размножать… остаётся вопрос в получении последнего значения…
  7. Аватар ivanov petya
    Как бы разбираться в чужом коде, отлаживать его — это уже работа. А делать чужую работу бесплатно у нас как-то не принято. Если бы ты больше сам посвятил времени своей задаче, то и количество строчек можно было бы уменьшить до 3-5 максимум. И если бы по ним у тебя все равно остались какие-то вопросы, точно кто-то бы подсказал что там да как.

    tranquility,
  8. Аватар tranquility
    Как бы разбираться в чужом коде, отлаживать его — это уже работа. А делать чужую работу бесплатно у нас как-то не принято. Если бы ты больше сам посвятил времени своей задаче, то и количество строчек можно было бы уменьшить до 3-5 максимум. И если бы по ним у тебя все равно остались какие-то вопросы, точно кто-то бы подсказал что там да как.
  9. Аватар ivanov petya
    короче одни псевдокастожиды)))ну ладно граждане глашатые, предёт время peace of the peace

Pair trading

Здравствуйте, можете подсказать?? Есть луа скрипт арбитража, но в коде ошибка… Не показывает последнее значение… Код вроде бы не сложен, просто не хватает опыта в этом.буду благодарен, если подскажете…
--*********************************************

Settings =
{
    Name = «PairsTrading2»,     --имя индикатора
    line1 = «L1»,                    — имя первой исследуемой кривой пары
    line2 = «L2»,                    — имя второй исследуемой кривой пары
    — коэффициенты
   — для чего это нужно, например акция Газпрома стоит 133 рубля, а акция Лукойла 1970 
   — рублей и нам надо вывести кривую разности этой пары
   --  можно вычесть из 1970 133 и вывести разницу, но она будет невыразительной и
   — неинформативной, а если принять, что на 1 акцию Лукойла приходится 1970 / 133 примерно 14 акций Газпрома, то графиком спреда уже можно пользоваться для теханализа.
    k_line1 = 1,                     --  коэффициент, на который будем умножать значения первой кривой
    k_line2 = 1,                     — коэффициент, на который умножим значение второй кривой


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

        relation =«отношение.разница.произведение»,
— описание внешнего вида линий
    line = 
    {
        {
            Name = «PairsTrading»,
            Color = RGB(255, 0, 255),
            Type = TYPE_LINE,
            Width = 2
        }
    }
}
function Init()
    return 1
end


function OnCalculate(index)
— обращаемся к исходным кривым
local LINEPRICE =Settings.line1
local LINEPRICE2 =Settings.line2
CL_CURR=0
CL_CURR2=0

— читаем цену закрытия свечки первой линии
        MAINqty = getNumCandles(LINEPRICE) 

        t, num, legend = getCandlesByIndex(LINEPRICE, 0, index-1, 1) 
        if index<MAINqty then
        CL_CURR=t[0].close
        end
— читаем цену закрытия свечки второй  линии
        MAINqty2 = getNumCandles(LINEPRICE2) 
        t2, num2, legend2 = getCandlesByIndex(LINEPRICE2, 0, index-1, 1) 
        if index< MAINqty2 then
        CL_CURR2=t2[0].close
        end



        if index <= 0 or CL_CURR2==0 or CL_CURR==0 or index>= MAINqty or   index>= MAINqty2 then
        return nil
    else
                local pair = 0
--   обсчитаем результирующую линиу требуемым способом
                if Settings.relation ==«отношение» then
                  pair= (CL_CURR2*Settings.k_line2)/(CL_CURR*Settings.k_line1)
                end
                if Settings.relation ==«разница» then
                  pair= (CL_CURR2*Settings.k_line2)-(CL_CURR*Settings.k_line1)
                end
                if Settings.relation ==«произведение» then
                  pair= (CL_CURR2*Settings.k_line2)*(CL_CURR*Settings.k_line1)
                end


        return pair
    end

end
Чтобы купить акции, выберите надежного брокера: