Макс Максименко
Макс Максименко личный блог
15 сентября 2018, 12:44

QLua. Перестановка лимиток через вечерний клиринг на FORTS.


— flags:
— 30 — снята продажная
— 28 — исполнена продажная
— 24 — исполнена купленная
— 29 — активная продажная
— 25 — активная на куплю
— скрипт после клиринга завершается

function profit(pric_s)

t = {

    [«CLASSCODE»]=«SPBFUT»,

    [«SECCODE»]=«SiH8»,

    [«ACTION»]=«NEW_STOP_ORDER»,

    [«STOP_ORDER_KIND»]=«WITH_LINKED_LIMIT_ORDER», — со связанной заявкой

    [«ACCOUNT»]=«41xxxJB»,

    [«CLIENT_CODE»]=«65xxx»,

    [«OPERATION»]=«S»,

    [«QUANTITY»]=«1»,

    [«PRICE»]=tostring(pric_s-380),

    [«LINKED_ORDER_PRICE»]=tostring(pric_s),

    [«STOPPRICE»]=tostring(pric_s-700),

    [«KILL_IF_LINKED_ORDER_PARTLY_FILLED»]=«NO», — при частичном исполнении снимать стоп?

    [«TRANS_ID»]=«112»,

        }

    res=sendTransaction(t)

end



function profit_s(pri_s)

t = {

    [«CLASSCODE»]=«SPBFUT»,

    [«SECCODE»]=«SiH8»,

    [«ACTION»]=«NEW_STOP_ORDER»,

    [«STOP_ORDER_KIND»]=«WITH_LINKED_LIMIT_ORDER», — со связанной заявкой

    [«ACCOUNT»]=«41xxxJB»,

    [«CLIENT_CODE»]=«65xxx»,

    [«OPERATION»]=«B»,

    [«QUANTITY»]=«1»,

    [«PRICE»]=tostring(pri_s+380),

    [«LINKED_ORDER_PRICE»]=tostring(pri_s),

    [«STOPPRICE»]=tostring(pri_s+500),

    [«KILL_IF_LINKED_ORDER_PARTLY_FILLED»]=«NO», — при частичном исполнении снимать стоп?

    [«TRANS_ID»]=«112»,

        }

    res=sendTransaction(t)

end






i1=0
i2=0
is_run=true
clearing=0
clearing_end=0
trigger=0

function main()

  while is_run do
  sleep(500)
    if clearing==1 then
        if clearing_end==0 and trigger==0 then — за 1 секунду до вечернего клиринга
            trigger=1
            n = getNumberOf(«orders»)
            order={}
            message(«total »… tostring(n)… " of all orders")
            array_buy={} — новый пустой массив для сбора заявок на покупку
            array_sell={} — на продажу
            for i=0,n-1 do
                order = getItem(«orders», i)
                if order.flags==25 then — активная на куплю
                i1=i1+1
                array_buy[i1]=order.value
                end
                if order.flags==29 then — активная на продажу
                i2=i2+1
                array_sell[i2]=order.value
                end
            end

        elseif clearing_end==1 then — клиринг кончился, восстанавливаем заявки
            for i=1,i1 do
                pri_s=array_buy[i]
                profit_s(pri_s)
                sleep(600)
                message(«купля по цене=»… tostring(array_buy[i]))
            end
            for i=1,i2 do
                pric_s=array_sell[i]
                profit(pric_s)
                sleep(600)
                message(«продажа по цене=»… tostring(array_sell[i]))
            end
            is_run=false
            sleep(600)
        end
    end
  end
end


function OnStop(stop_flag)
    is_run=false
end



function OnAllTrade(alltrade) — табличные данные

    if alltrade.datetime.min==44 and alltrade.datetime.sec==58 and alltrade.datetime.hour==18 then
        clearing=1
    end
    if alltrade.sec_code==«SiH8» and alltrade.datetime.hour==19 then
        clearing_end=1 — клиринг закончился
    end

end

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн