Яна (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
статус заявки: выставленной по стоп-лоссу, снята, а не активна
 
Добрый день!
Написала функцию для стоп-лосса по маркету, но почему-то при выставлении заявки при срабатывании стоп-лосса статус заявки сразу же снята, а не активна, и позиция по стопу не закрывается. Пожалуйста, подскажите, где может быть ошибка:
Код
function TAKESTOPORDERM(FLOTS,FDIRECTION,FSTOP,FSTOP2,FPRICE,FOTSTUP,FSPREAD)
   q = {
      ["ACTION"]= "NEW_STOP_ORDER",      
      ["CLASSCODE"]=CLASSCODE,      
      ["SECCODE"]=INSTRUMENT,
      ["ACCOUNT"]= ACCOUNT,
      ["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
      ["TYPE"]="M",
      ["MARKET_STOP_LIMIT"]='YES',
      ["OPERATION"]=FDIRECTION,
      ["QUANTITY"]=tostring(FLOTS),
      ["STOPPRICE"]=tostring(FSTOP),
      ["STOPPRICE2"]=tostring(FSTOP2),
      ["PRICE"]=tostring(FPRICE),
      ["OFFSET"] = tostring(FOTSTUP),
        ["OFFSET_UNITS"] = "PRICE_UNITS",
        ["SPREAD"] = tostring(FSPREAD),
        ["SPREAD_UNITS"] = "PRICE_UNITS",
        ["EXPIRY_DATE"] = "GTC",
      ["TRANS_ID"]=tostring(id_take),
      ["CLIENT_CODE"]=Robot

     }
   res=sendTransaction(q)
   message(res,1)
end
Получение из таблицы текущих торгов всех доступных на текущий момент фьючерсов по инструменту
 
Коллеги, привет!
Написала функцию, которая проверяет количество дней до экспирации, чтобы контракт менялся сам, написала топорно в лоб: создала таблицу, где указала имена контрактов. Функция через  getParamEx проверяет, сколько дней осталось до экспиры. Если дней меньше 3, то контракт сам меняется. Но сегодня утром столкнулась с тем, что предыдущий контракт по нефти (который вчера экспирировался) пропал из списка доступных в таблице "Текущие торги" и скрипт не может проверить по нему параметр остатка. Попытка проверить данный параметр на существование к нужному результату не привела. Скрипт с попыткой будет ниже.
Как я вижу, нужно забрать из таблицы текущих торгов все возможные контракты по баховому активу и посмотреть их даты экспирации, но вот как забрать эти данные, я не знаю...
Код
function contract()
local futdate = {} 
   local timedif = {}
   local idx = 0
      activename = "RTS"
      
      futnames = {"RIZ1", "RIH2", "RIM2", "RIU2", "RIZ2","RIH3", "RIM3", "RIU3", "RIZ3"}
      --message("futnames[1]"..futnames[1].."futnames[2]"..futnames[2])
      for i=1,12 do
         if idx==1 then break end
         --message("futnames"..futnames[i]..type(futnames[i]))
         if futnames[i] then
            futdate[i] = getParamEx(CLASSCODE, futnames[i], "DAYS_TO_MAT_DATE").param_image
            --message("futdate[i]"..futdate[i])
            --message(type(DATE).."date="..DATE)
            --timedif[i] = futdate[i]-tonumber(DATE)
            --message('timedif='..timedif[i])
               if tonumber(futdate[i])>2 then 
                  INSTRUMENT=futnames[i]
                  --message('actual futures is'..INSTRUMENT)
                  idx=1
               end
         end
      end
end
Тейк профит и стоп-МАРКЕТ заявка для луа, стоп-заявка проскальзывает, так как стоит стоп-лимит
 
Коллеги, привет!
Скрипт работает уже давно, используется заявка тейк-профит и стоп-лимит, но в пятницу размер стопа не спас ситуацию, нефть слишком упала, и заявку протащило. Поэтому возник вопрос: как сделать заявку тейк-профит и стоп-маркет, чтобы таких ситуаций избегать?
Испробована версия с выставлением нулевых параметров, но система логично такую историю отвергает, в итоге и стоп- не стоит, и позиция взята, слишком рисково.

Как получилось на реальном примере: выставлена заявка на закрытие фьюча по нефти, тейк 83, стоп 81,7, цена стопа 81,55. Что вышло на практике? нефть упала в 80 в начале торговой сессии, стоп выставил заявку на продажу по 81,55, и пришлось закрыть сделку руками. Как сделать так, чтобы при прохождении 81,7 у меня выставлялась заявка на продажу по маркету?
Думала сама над двумя связанными заявками, но может, у кого есть попроще решение?

Коды все рабочие, представлены ниже. Заранее большое спасибо за ответ!

Как выглядит заявка (тут все тоже рабочее):
Код
function stop2_calc()
   if (PRICEMAX-ZZ12)>500 then
   stop=PRICEMAX-500
   else stop = ZZ12
   end
end

function BUY(FLOTS)
   ORDER(FLOTS,"B",dD(PRICEMAX+0,0))
   stop2_calc()
   message("stop "..stop)
   TAKESTOPORDER(FLOTS,"S",dD(ZZ31+0,0), dD(stop,0),dD(stop-0,15,0),100,100)
end   
функция стопа (она рабочая)
Код
function TAKESTOPORDER(FLOTS,FDIRECTION,FSTOP,FSTOP2,FPRICE,FOTSTUP,FSPREAD)
   q = {
      ["ACTION"]= "NEW_STOP_ORDER",      
      ["CLASSCODE"]=CLASSCODE,      
      ["SECCODE"]=INSTRUMENT,
      ["ACCOUNT"]= ACCOUNT,
      ["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
      ["TYPE"]="L",
      ["OPERATION"]=FDIRECTION,
      ["QUANTITY"]=tostring(FLOTS),
      ["STOPPRICE"]=tostring(FSTOP),
      ["STOPPRICE2"]=tostring(FSTOP2),
      ["PRICE"]=tostring(FPRICE),
      ["OFFSET"] = tostring(FOTSTUP),
        ["OFFSET_UNITS"] = "PRICE_UNITS",
        ["SPREAD"] = tostring(FSPREAD),
        ["SPREAD_UNITS"] = "PRICE_UNITS",
        ["EXPIRY_DATE"] = "GTC",
      ["TRANS_ID"]=tostring(id_take),
      ["CLIENT_CODE"]=Robot
     }
   res=sendTransaction(q)
   message(res,1)
end
Как узнать лимит доступных средств для единого счета открытие
 
Коллеги, привет!
У Открытия создан единый счет, пытаюсь запросить остаток средств по срочному рынку, выдает оошибку. Запрашиваю свободные средства через вот эту функцию, выдает ноль. Как узнать таги, которыми можно вывести этот самый остаток? Таблицу с группами, которую указывали на формул ранее вот здесь, не нашла.
https://forum.quik.ru/forum10/topic2138/
рабочий код для рынка фортс, хочу такой же работоспособный для единого счета
Код
function Lot_calculate()
--функция для расчета лотности
   moneyt = getFuturesLimit(FIRM, ACCOUNT, 0, "SUR")
   --message('Cash='..moneyt.cbp_prev_limit)
   gofut = getParamEx(CLASSCODE, INSTRUMENT, "SELLDEPO").param_value+0
   --message("GO Br = "..gofut)
   LOT1 = roundNum(0.25*moneyt.cbp_prev_limit/gofut,0)
   --message("LOT="..LOT1)
end
не записывает больше одной сделки в файлик, CSV файл
 
Коллеги, добрый день! Я новичок в программировании луа, и у меня возникла проблема. Есть скрипт, который записывает в файл csv данные об отправленной транзакции в систему, далее скрипт проверяет состояние стопа и фиксирует, если стоп выполнен. И вот после этого происходят чудеса: если появляется ещё одна сделка, то скрипт её открывает, но вот в файлик уже ничего не записывается, и в итоге ломается учёт, так как скрипт не видит записи о номере стопа в файлике. Подскажите, пожалуйста, как это можно починить?
Код
-- Функция вызывается терминалом, когда с сервера приходит новая информация о транзакциях
function OnTransReply(trans_reply)
   -- Если пришла информация по нашей транзакции
   if trans_reply.trans_id == id_done then
      -- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно
      if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status      end
      -- Выводит в сообщении статусы выполнения транзакции
      if  trans_reply.status == 1   then -- транзакция активна
         --message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫСТАВЛЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity,3) 
     end
     if  trans_reply.status ==3   then -- транзакция выполнена, запись в журнал
         --message(trans_reply.result_msg,1)
         --message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫПОЛНЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity,3) 
        OrderNum = trans_reply.order_num 
        OrderTime=trans_reply.datetime 
        OrderPrice=trans_reply.price 
        OrderQuantity=trans_reply.quantity 
        OrderCond=TP 
        OrderInstr =trans_reply.sec_code
        Ordcomment=trans_reply.brokerref
        local tradeline= os.date("%c", os.time(trans_reply.datetime))..";"..
        OrderInstr..";"..
        OrderQuantity ..";".. 
        OrderCond..";"..
        OrderPrice..";"..
        OrderNum ..";"..
        "Open_order"..";"..
        ACCOUNT..";"..
        Ordcomment..";"..
        "Created".."\n"
        CSV:seek("end",0)
        CSV:write(tradeline); --записали значения в файлик
        CSV:flush(); --сохранили файлик
     end
   end
      -- Если пришла информация по нашей стоп-транзакции
   if trans_reply.trans_id == id_take then
      -- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно
      if trans_reply.status == TakeStatus then return else TakeStatus = trans_reply.status end
      -- Выводит в сообщении статусы выполнения транзакции
     if  trans_reply.status == 3   then -- транзакция активна
          Stopnumb =trans_reply.order_num
         SlTpOrderTime=trans_reply.datetime 
         SlTpOrderPrice=trans_reply.price 
         SlTpOrderQuantity=trans_reply.quantity 
         SlTpOrderCond=TP
         SlTpOrderInstr=trans_reply.sec_code
        SlComment=trans_reply.brokerref
       --message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' ВЫПОЛНЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity,3) 
        local Stopline= os.date("%c", os.time(trans_reply.datetime))..";"..
        SlTpOrderInstr..";"..
        SlTpOrderQuantity ..";"..
        SlTpOrderCond ..";"..
        SlTpOrderPrice ..";"..
        Stopnumb ..";"..
        "Take_Stop_order"..";"..
        ACCOUNT..";"..
        SlComment..";"..
        "Created".."\n"
        CSV:seek("end",0)
        CSV:write(Stopline); --записали значения в файлик
        CSV:flush(); --сохранили файлик
     end
   end
end
Страницы: 1
Наверх