Установка лимитов с помощью lua

Страницы: 1
RSS
Установка лимитов с помощью lua
 
Здравствуйте!
Помогите разобраться с установкой стоп лосов и тейк профитов через lua скрипт.
В терминал отправляю 2 транзакции (можно ли все уместить в 1й?) - сама заявка и вторая лимиты :
1)
Цитата
order =
{
["ACCOUNT"]="NL0..",
["ACTION"] = "NEW_ORDER",
["CLASSCODE"] = "QJSIM",  
["SECCODE"] = "SBER",  
["OPERATION"] = "B",  
["TYPE"] = "M",
["PRICE"] = "0",
["QUANTITY"]="10",
["TRANS_ID"] = "1",
}

и 2) стоп заявка :
Цитата
limit = {
["ACCOUNT"]="NL0.."
["ACTION"] = "NEW_STOP_ORDER",
["CLASSCODE"] = "QJSIM",  
["SECCODE"] = "SBER",
["OPERATION"] = "S",
["TYPE"] = "M",
["PRICE"] = "0",
["QUANTITY"]="10",
["TRANS_ID"] = "2",
["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
["STOPPRICE"] = "209.10",  --профит
["STOPPRICE2"] = "208.68",  --лимит
["OFFSET_UNITS"] = "PRICE_UNITS",
["OFFSET"] = "0",
["MARKET_TAKE_PROFIT"] = "YES"
}

Когда цена достигла 208.68 вместо того что бы выставить заявку на продажу и закрыть позицию терминал выдал ошибку :
Цитата
Заявка, выставляемая по стоп-заявке N [-], отвергнута торговой системой
позиция соответственно не закрылась. подскажите в чем ошибка ? Заранее благодарю.  
 
 
Добрый день.

Проверьте в разделе Система - Настройки - Параметры инструмента. Возможно вы задали какой либо диапазон.
 
Никаких диапазонов я не задавал, их  нет. Тригер срабатывает ровно на том значении которое было задано в транзакции  
 
Цитата
Илья написал:
Никаких диапазонов я не задавал, их  нет. Тригер срабатывает ровно на том значении которое было задано в транзакции
Если выставить стоп лимит и тейк профит аналогичный в ручном режиме, проблема повторяется?
Попробуйте и сообщите результат. Также приложите полный ваш скрипт и сообщите UID вашего пользователя.
 
Полный скрипт :
Цитата
order =
{
["ACCOUNT"]="NL0",
["ACTION"] = "NEW_ORDER",
["CLASSCODE"] = "QJSIM",  
["SECCODE"] = "SBER",  
["OPERATION"] = "B",
["TYPE"] = "M",
["PRICE"] = "0",
["QUANTITY"]="10",
["TRANS_ID"] = "1",
}
price = "210.15";
profit = tostring(tonumber(price) + 0.15);
loss = tostring(tonumber(price) - 0.15);

limit = {
["ACTION"] = "NEW_STOP_ORDER",
["TRANS_ID"] = "2",
["CLASSCODE"] = "QJSIM",  
["SECCODE"] = "SBER",  
["ACCOUNT"]="NL0",
["OPERATION"] = "S",
["QUANTITY"]="10",
["PRICE"] = loss,
["STOPPRICE"] = profit,  
["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
["EXPIRY_DATE"] = "TODAY",
["OFFSET"] = "0.01",
["OFFSET_UNITS"] = "PRICE_UNITS",
["SPREAD"] = "0.01",
["SPREAD_UNITS"]  = "PRICE_UNITS",
["MARKET_TAKE_PROFIT"]  = "YES",
["STOPPRICE2"] = loss,
}
orderResult = sendTransaction(order);
limitResult = sendTransaction(limit);
message(orderResult);
message(limitResult);
номер пользователя - U0127505
 
Цитата
проблема повторяется?
нет.
 
Перед отправкой вы в скрипте, что нибудь меняли?
У Вас две ошибки.
1. Отсутствует параметр "код клиента"
2. Не верно указан счет ACCOUNT. Должен быть NL0011100043.
Проверили на вашем коде, стоп заявка выставилась, сработала и выставила лимитированную.
 
Благодарю за ответ!


CLIENT_CODE - необязательный параметр. (http://luaq.ru/sendTransaction.html)
а вот ACCOUNT - сменил и вроде все заработало как положено, но возникла другая проблема - скрипт не выставил заявки тейк профит по достижении нужного уровня.

скрипт немного изменил :

Цитата
tag = "candles";
lastCandle = getNumCandles(tag);
t, n, l = getCandlesByIndex (tag, 0, lastCandle-1, 1);
currPrice = t[0].close;


order =
{
["ACCOUNT"]="NL0011100043",
["ACTION"] = "NEW_ORDER",
["CLASSCODE"] = "QJSIM",  
["SECCODE"] = "SBER",  
["OPERATION"] = "B",  
["PRICE"] = tostring(currPrice),
["QUANTITY"]="10",
["TRANS_ID"] = "1",
}


profit = tostring(currPrice + 0.15);
loss = tostring(currPrice - 0.15);


limit =
{
["ACTION"] = "NEW_STOP_ORDER",
["TRANS_ID"] = "2",
["CLASSCODE"] = "QJSIM",  --CETS
["SECCODE"] = "SBER",  
["ACCOUNT"]="NL0011100043",  
["OPERATION"] = "S",
["QUANTITY"]="10",
["PRICE"] = loss,
["STOPPRICE"] = profit,  
["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER",
["EXPIRY_DATE"] = "TODAY",
["OFFSET"] = "0.11",
["OFFSET_UNITS"] = "PRICE_UNITS",
["SPREAD"] = "0.11",
["SPREAD_UNITS"]  = "PRICE_UNITS",
["MARKET_TAKE_PROFIT"]  = "NO",
["STOPPRICE2"] = loss,  
}
orderResult = sendTransaction(order);
limitResult = sendTransaction(limit);
message(orderResult);
message(limitResult);

когда цена достигла 209.16 терминал должен был выставить заявку на продажу но не сделал этого, даже при 209.22.
В итоге позиция закрылась при 209.09

В чем моя ошибка ?
 
Добрый день,

Исходя из предоставленного Вами скиншота, можем видеть, что цена условия выставлена в размере 209.16, а отступ от max=0.11, при этом на графике текущая цена 209,22, которая является "локальным максимумом". Для исполнения тейк-профита в данном случае необходимо, чтобы цена составила 209,11 (209,22-отступ от локального максимума=209,22-0.11), то есть условие исполнения тейк-профита достигнуто не было.

Значение "Рассчитывается min/max" в таблице стоп-заявок говорит о том, что цена условия была достигнута, тейк-профит активировался и проверяет будет ли цена расти дальше или нет. При снижении текущей цены на более чем "отступ от max", тейк-профит исполнится по цене последней сделки-защитный спред.


Цитата
CLIENT_CODE - необязательный параметр. (http://luaq.ru/sendTransaction.html)
По ссылке это не наша документация. В нашей документации этот параметр обязательный. Не обязательный он для Срочного рынка.
 
Цитата
Egor Zaytsev написал:
Для исполнения тейк-профита в данном случае необходимо, чтобы цена составила 209,11
так прежде чем достигнуть 209.16 сперва цена достигла 209.11 а тейк профит что тогда что сейчас не активировался.
Цитата
Egor Zaytsev написал:
цена условия выставлена в размере 209.16, а отступ от max=0.11
вы говорите про OFFSET или SPREAD  ? Разве не должен активироваться тейк профит для любой цены от 209.16 - 209.27 (209.16 + 0.11)?
 
Цитата
Илья написал:
вы говорите про OFFSET или SPREAD  ? Разве не должен активироваться тейк профит для любой цены от 209.16 - 209.27 (209.16 + 0.11)?
Нет.
Тейк Профит - Стоп лимит на продажу работает так:

Цитата
 Купили Газпром по цене 145 рублей, хотим зафиксировать прибыль если цена вырастет до 160. и ограничить убытки, если цена упадёт ниже либо равно 155р. Вы ставите заявку тэйк-профит и стоп-лимит, когда цена последний сделки на рынке 156 р. Условие активации: продажа, «тэйк-профит, если цена» >=160 руб., «стоп-лимит, если цена» <=155. Также указывает два дополнительных параметра:

Ø «отступ от max» — этот параметр указывает, насколько цена последней сделки должна стать ниже локального максимума цены, чтобы тэйк профит сработал,
Ø «защитный спрэд» — насколько меньше, чем цена срабатывания тэйк-профита, будет цена порожденной им лимитированной заявки на продажу.

Предположим, что мы задали «отступ от max»=5 руб, «защитный спрэд»=5 руб.
Допустим, Газпром растет. Как только, цена дойдет до 160, в этой точке заявка тэйк-профит активируется, и начинает проверять — будет расти цена дальше, или нет (Условия по стоп-лимиту перестали проверяться) Если цена растет дальше, то любое следующее более высокое значение от 160 система фиксирует как локальный максимум, а любое падение цены от локального максимума- как угрозу.

При этом, система проверяет, не стала ли цена последней сделки по бумаге ниже чем «локальный максимум цены» минус «отступ от max». Предположим, цена растет и достигла 163, после чего упала до 160 и опять начала расти. Тэйк-профит в этом случае не превратится в лимитированную заявку — ведь цена упала от максимума на 3 руб, а мы задали «отступ от max»=5 руб., т.е. условие исполнения достигнуто не было.

Предположим, цена опять выросла до 163, и упала до 158 - тогда тэйк профит выставит лимитированную заявку на продажу с ценой, вычисляемой по формуле: «текущая цена последней сделки минус защитный спрэд». Т.е. цена заявки на продажу будет 158-5=153. «Защитный спрэд» нужно указать для защиты от «проскальзывания» рынка ниже цены порожденной тэйк-профитом заявки.
Допустим, Газпром начал не расти (как описано выше), а падать, цена последний сделки на рынке 158 р. Условие активации: тэйк-профит, если цена >=160 руб., стоп-лимит <=155. Цена упала до 155 рублей. Условие по ТП перестаёт отслеживаться. В систему выставилась лимитированная заявка по цене 154р.  
Страницы: 1
Читают тему
Наверх