Тема: Как выставить стоп-ордер на Lua в QUIK ?

Привет всем! Не могу выставить стоп-ордер. Чего не хватает?
Нужно выставить стоп-заявку выше текущей цены на продажу с условием PRICE ниже STOPPRICE .
Данный код не выставляет ни чего.

stop_or = {
     ACTION          = "NEW_STOP_ORDER", 
     STOP_ORDER_KIND = "TAKE_PROFIT_STOP_ORDER",
     OPERATION       = "S",
     ACCOUNT         = n_depo,
     CLIENT_CODE     = n_client_code,
     CLASSCODE       = n_classcode,
     SECCODE         = n_seccode,
     STOPPRICE       = tostring(a+0.1),
     PRICE           = tostring(a),
     QUANTITY        = tostring(lot),
     TRANS_ID        = tostring(n_id)
    }
result = sendTransaction(stop_or)

2

Re: Как выставить стоп-ордер на Lua в QUIK ?

Посмотрите такой вариант:

local Transaction = {
                       ['ACTION'] = "NEW_STOP_ORDER", 
                       ['PRICE'] = tostring(price), 
                       ['EXPIRY_DATE'] = "TODAY",--"GTC", -- на учебном серве только стоп-заявки с истечением сегодня, потом поменять на GTC
                       ['STOPPRICE'] = tostring(stopPrice),
                       ['STOP_ORDER_KIND'] = "SIMPLE_STOP_ORDER",
                       ['TRANS_ID'] = removeZero(tostring(trans_id)),
                       ['CLASSCODE'] = CLASS_CODE,
                       ['SECCODE'] = SEC_CODE,
                       ['ACCOUNT'] = ACCOUNT,
                       ['CLIENT_CODE'] = CLIENT_CODE, -- Комментарий к транзакции, который будет виден в транзакциях, заявках и сделках 
                       ['TYPE'] = "L",
                       ['OPERATION'] = tostring(operation),
                       ['CONDITION'] = direction, -- Направленность стоп-цены. Возможные значения: «4» - меньше или равно, «5» – больше или равно
                       ['QUANTITY'] = tostring(math.abs(quantity))
}

3

Re: Как выставить стоп-ордер на Lua в QUIK ?

Привет SWERG!  Ваша подсказка мне не помогла.
"SIMPLE_STOP_ORDER" - когда цена снизится... ,
получается: выставляется стоп-заявка и сразу она становится активной.
С направленностью то же не реагирует, может не так пишу. Надо писать "4" или " 5"? Может без кавычек?
"TAKE_PROFIT_STOP_ORDER" - как не ,,крутил,, не выставляет совсем. Вобщем встрял.

4

Re: Как выставить стоп-ордер на Lua в QUIK ?

А, не та немного транзакция
Вот так попробуйте:

stop_trans = {
   ["ACTION"] = "NEW_STOP_ORDER",
   ["TRANS_ID"] = tostring(math.random(1, 9999)),
   ["CLASSCODE"] = CLASSCODE,
   ["SECCODE"] = SECCODE,
   ["ACCOUNT"] = ACCOUNT,
   ["CLIENT_CODE"] = CLIENT_CODE,
   ["OPERATION"] = tostring(operation2),
   ["QUANTITY"] = tostring(_QUANTITY),
   ["STOPPRICE"] = tostring(stopprice_tp), --цена активации тейк профита
   ["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
   ["OFFSET"] = "200",
   ["OFFSET_UNITS"] = "PRICE_UNITS",
   ["MARKET_TAKE_PROFIT"] = "YES",
   ["STOPPRICE2"] = tostring(stopprice), --стоп цена
   ["IS_ACTIVE_IN_TIME"] = "YES",
   ["ACTIVE_FROM_TIME"] = "100000", 
   ["ACTIVE_TO_TIME"] = "234545",
   ["MARKET_STOP_LIMIT"] = "YES"
}

Обратите внимание на название транзакции: "TAKE_PROFIT_AND_STOP_LIMIT_ORDER"
Вроде то, что вам нужно?

5 (2023-12-13 22:00:29 отредактировано swerg)

Re: Как выставить стоп-ордер на Lua в QUIK ?

Вот, кстати, допустимые виды STOP_ORDER_KIND из справки:

  • "SIMPLE_STOP_ORDER" – стоп-лимит

  • "CONDITION_PRICE_BY_OTHER_SEC" – с условием по другой бумаге

  • "WITH_LINKED_LIMIT_ORDER" – со связанной заявкой

  • "TAKE_PROFIT_STOP_ORDER" – тэйк-профит

  • "TAKE_PROFIT_AND_STOP_LIMIT_ORDER" – тэйк-профит и стоп-лимит

  • "ACTIVATED_BY_ORDER_SIMPLE_STOP_ORDER" – стоп-лимит по исполнению заявки

  • "ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER" – тэйк-профит по исполнению заявки

  • "ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER" – тэйк-профит и стоп-лимит по исполнению заявки

Если параметр пропущен, то считается, что заявка имеет тип «стоп-лимит»

6 (2023-12-20 19:57:02 отредактировано Серёга)

Re: Как выставить стоп-ордер на Lua в QUIK ?

Привет SWERG! Спасибо за подсказки.
Вот что у меня получились

stop_or = {    
      ACTION            = "NEW_STOP_ORDER", 
     STOP_ORDER_KIND    = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
     OPERATION          = "S",
     TYPE               = "L",
     MARKET_TAKE_PROFIT = "YES",
     MARKET_STOP_LIMIT  = "NO",
     EXPIRY_DATE        = "GTC",
     ACCOUNT            = n_depo,
     CLIENT_CODE        = n_client_code,
     CLASSCODE          = n_classcode,
     SECCODE            = n_seccode,
     STOPPRICE          = tostring(sc+0.3),
     PRICE              = tostring(sc+0.25),
     QUANTITY           = tostring(lot),
     TRANS_ID           = tostring(n_id)
    }
E_stop_or = sendTransaction(stop_or)

Но есть недостаток: когда срабатывает активация заявка продаётся по рынку, хоть и указан "L". По рынку заявка продаётся примерно на 30 пунктов ниже, поэтому активацию приходится задирать на 30 пунктов выше. В итоге теряю доход в 30 пунктов. Как решить эту проблему?
В таблице стоп-заявок указывается цена активации и цена продажи, но при активации заявка продаётся по рынку.
Парадокс!

7 (2023-12-21 11:22:12 отредактировано swerg)

Re: Как выставить стоп-ордер на Lua в QUIK ?

Добрый день!

Серёга пишет:

хоть и указан "L"

TYPE я думаю тут ни при чем для стоп-заявок. Это относится к типу заявки по отправляемой сейчас транзакции (т.е. к самой стоп-заявке, насколько я понимаю, видимо не имеет смысла).

К типу формируемой вами стоп-заявке относятся какие-то такие параметры, поиграйте с ними:

  • STOPPRICE2 - Цена условия «стоп-лимит» для заявки типа «Тэйк-профит и стоп-лимит»

  • MARKET_STOP_LIMIT - Признак исполнения заявки по рыночной цене при наступлении условия «стоп- лимит». Значения «YES» или «NO». Параметр заявок типа «Тэйк-профит и стоп- лимит»

  • MARKET_TAKE_PROFIT - Признак исполнения заявки по рыночной цене при наступлении условия «тэйк- профит». Значения «YES» или «NO». Параметр заявок типа «Тэйк-профит и стоп-лимит»

  • IS_ACTIVE_IN_TIME - Признак действия заявки типа «Тэйк-профит и стоп-лимит» в течение определенного интервала времени. Значения «YES» или «NO»

  • ACTIVE_FROM_TIME - Время начала действия заявки типа «Тэйк-профит и стоп-лимит» в формате «ЧЧММСС»

  • ACTIVE_TO_TIME - Время окончания действия заявки типа «Тэйк-профит и стоп-лимит» в формате «ЧЧММСС»

8 (2024-01-04 01:43:45 отредактировано Серёга)

Re: Как выставить стоп-ордер на Lua в QUIK ?

Всех с наступившим 2024 годом! Желаю всем мирног неба, удачи и профита!
Поиграл с MARKET_TAKE_PROFIT и MARKET_STOP_LIMIT , заявка устанавливается только в вареанте указаном выше.
STOP_ORDER_KIND    = "TAKE_PROFIT_STOP_ORDER", заявка устанавливает только если есть параметры
         OFFSET        = tostring(0),
    OFFSET_UNITS  = "PRICE_UNITS",
        SPREAD        = tostring(0),
    SPREAD_UNITS = "PRICE_UNITS"
с этими параметрами после активации всё равно продаётся по рынку.
Сейчас пытаюсь понять что есть OFFSET (отступ от максимума), что есть максимум и в какую сторону отступ.
Ежё хочу похвалиться, мой робот делает первые шаги на реальном счёте smile
Логика стратегии не сразу далась.