выход из позиции

Страницы: 1
RSS
выход из позиции, закрытие позиции
 
Помогите пожалуйста сообразить с кодом для закрытия позиции.
Т.е. например вошёл в сделку, купил или продал 5 лотов.
Как организовать закрытие позиции по какому то условию?
На какой callBack повесить код?
Если вешаю на onParam подобный код успевает выполниться несколько раз(функция получения кол-ва штук/позиции в портфеле видимо отрабатывает недостаточно быстро), в результате из 5 шт. в лонг получаю 5 в шорт, а мне просто нужно выйти в 0.

Код
function get_futures_holdings(seccode)
   --функция получения позиции в портфеле
   local function fn(t)
      if t.sec_code == seccode then
         return true
      else
         return false
      end
   end
   local t1 = SearchItems("futures_client_holding", 0, getNumberOf("futures_client_holding")-1, fn)
   if t1 ~= nil then
      local item = getItem("futures_client_holding", t1[1])
      return item
   end
end

if условие then
   -- проверить cколько сейчас есть в портфеле
        local client_holding = get_futures_holdings(seccode)
         if client_holding and client_holding.totalnet ~=0 then
      local position = client_holding.totalnet
      if direction == 'B' then
            if position > 0 then
               -- MarketSell()
            end
        else
            if position < 0 then
                -- MarketBuy()
            end
        end

   end
end
 
Цитата
Aleksandr написал:
На какой callBack повесить код?
Возможно на OnFuturesClientHolding?
 
OnFuturesClientHolding вызывается терминалом QUIK при изменении позиции по срочному рынку.
Мне же нужно позицию самостоятельно изменить, поэтому не подходит.
 
Цитата
Aleksandr написал:
OnFuturesClientHolding  вызывается терминалом QUIK при изменении позиции по срочному рынку.
Мне же нужно позицию самостоятельно изменить, поэтому не подходит.
Вопрос тут не к коду, а к пониманию того что Вам нужно.
На сколько становится понятно, Вы хотите применить код по факту совершении сделки.
Если так то при этом срабатывает OnOrder, OnTrade и OnFuturesClientHolding.
Если Вам нужно применить код не в момент совершения сделки, а в другой, тогда потесните, какой момент Вам нужен.
 
Давайте попробуем на примере.
Допустим есть код:
Код
Если цена больше 250, продаём.
Вопрос в том, куда данный код стоит разместить, чтобы заявка по нему исполнилась один раз.
 
Цитата
Aleksandr написал:
куда данный код стоит разместить
По-моему, на таком уровне абстракции "код" лучше всего разместить в техзадании программисту. Прошу прощения за оффтоп, тксть исключительно из добрых побуждений.
 
Цитата
Aleksandr написал:
Вопрос в том, куда данный код стоит разместить, чтобы заявка по нему исполнилась один раз.
Хороший вопрос :) попробую ответить

Чтобы "исполнилась заявка по условию <если цена больше 250, продаем>" есть два пути.

1. простой
Размещаем заявку на 250 на продажу.
Когда цена будет 250 или выше, заявка исполнится по 250 биржей.

Все, больше ничего делать не нужно.

2. скриптом луа, по-взрослому.
-получаем котировки по интересующей бумаге в коллбеке OnQuote
-при настуления условия "цена на покупку >= 250" подаем транзакцию "продать ХХХ по 250" (или по рынку, если нужно)
-в коллбеке OnTransReply контролируем факт выполнения транзакции, при необходимости подаем повторно (или другую, по ситуации)
-при положительном ответе на транзакцию, в коллбеке OnOrder контролируем факт выставления заявки
-по срабатыванию коллбека OnTrade контролируем факт исполнения заявки, при необходимости подаем еще заявки (или отменяем неисполненный остаток, если нужно)
-и наконец, по срабатыванию колбека OnFuturesClientHolding контролируем то, что позиция стала такой, как надо. при необходимости увеличить/уменьшить позу начинаем все с п.2 (подать транзакцию).

Так куда данный код нужно разместить?
 
И да, нужно не забывать, что коллбеки OnOrder и OnTrade могут вызываться по нескольку раз на одну и ту же заявку/сделку, и это тоже нужно контролировать :)
 
А еще в любой момент может внезапно дернуться OnDisconnected и начнется самое интересное. Мне вот очень трудно представить, как все эти возможные варианты можно отследить не в терминах конечных автоматов, а это все-таки определенного бэкграунда требует.
 
А чё тут интересного?
Если дисконектнулся - все сбрасываешь и по подключении заново начинаешь сбор данных о текущем состоянии
 
Цитата
Imersio Arrigo написал:
сбор данных о текущем состоянии
Забавно, что без термина "состояние" не обойтись ) Конечно, интересного мало, про дисконнект добавил к тому, что если делать хорошо, придется делать довольно сложную штуку, диаграммки сперва рисовать и репу почесывать над ними, а не так чтобы десять или сто даже строчек накропал из головы и вуаля.
 
К сожалению не все это понимают.
И относятся в духе "а чё там долго возиться, я знаю там кода на полчаса" :)))
Страницы: 1
Читают тему
Наверх