Добрый день.
Собственно проблема в том, что OnTransReply не вызывается после sendTransaction
Как узнать какие ошибки возникли при попытке сделать sendTransaction
Использую quik junior
Собственно проблема в том, что OnTransReply не вызывается после sendTransaction
Как узнать какие ошибки возникли при попытке сделать sendTransaction
Использую quik junior
| Код |
|---|
function SL_TP(Price, Type)
-- ID транзакции
trans_id = trans_id + 1;
-- Находит направление для заявки
local operation = "";
local price = "0"; -- Цена, по которой выставится заявка при срабатывании Стоп-Лосса (для рыночной заявки по акциям должна быть 0)
local stopprice = ""; -- Цена Тейк-Профита
local stopprice2 = ""; -- Цена Стоп-Лосса
local market = "YES"; -- После срабатывания Тейка, или Стопа, заявка сработает по рыночной цене
-- Если открыт BUY, то направление стоп-лосса и тейк-профита SELL, иначе направление стоп-лосса и тейк-профита BUY
if Type == 'BUY' then
operation = "S"; -- Тейк-профит и Стоп-лосс на продажу(чтобы закрыть BUY, нужно открыть SELL)
-- Если не акции
if CLASS_CODE ~= 'QJSIM' and CLASS_CODE ~= 'TQBR' then
price = tostring(math.floor(getParamEx(CLASS_CODE, SEC_CODE, 'PRICEMIN').param_value)); -- Цена выставляемой заявки после страбатывания Стопа минимально возможная, чтобы не проскользнуло
market = "NO"; -- После срабатывания Тейка, или Стопа, заявка сработает НЕ по рыночной цене
end;
stopprice = tostring(Price + TAKE_PROFIT*SEC_PRICE_STEP); -- Уровень цены, когда активируется Тейк-профит
stopprice2 = tostring(Price - STOP_LOSS*SEC_PRICE_STEP); -- Уровень цены, когда активируется Стоп-лосс
else -- открыт SELL
operation = "B"; -- Тейк-профит и Стоп-лосс на покупку(чтобы закрыть SELL, нужно открыть BUY)
-- Если не акции
if CLASS_CODE ~= 'QJSIM' and CLASS_CODE ~= 'TQBR' then
price = tostring(math.floor(getParamEx(CLASS_CODE, SEC_CODE, 'PRICEMAX').param_value)); -- Цена выставляемой заявки после страбатывания Стопа максимально возможная, чтобы не проскользнуло
market = "NO"; -- После срабатывания Тейка, или Стопа, заявка сработает НЕ по рыночной цене
end;
stopprice = tostring(Price - TAKE_PROFIT*SEC_PRICE_STEP); -- Уровень цены, когда активируется Тейк-профит
stopprice2 = tostring(Price + STOP_LOSS*SEC_PRICE_STEP); -- Уровень цены, когда активируется Стоп-лосс
end;
-- Заполняет структуру для отправки транзакции на Стоп-лосс и Тейк-профит
local Transaction = {
["ACTION"] = "NEW_STOP_ORDER", -- Тип заявки
["TRANS_ID"] = tostring(trans_id),
["CLASSCODE"] = CLASS_CODE,
["SECCODE"] = SEC_CODE,
["ACCOUNT"] = ACCOUNT,
["OPERATION"] = operation, -- Операция ("B" - покупка(BUY), "S" - продажа(SELL))
["QUANTITY"] = "1", -- Количество в лотах
["PRICE"] = price, -- Цена, по которой выставится заявка при срабатывании Стоп-Лосса (для рыночной заявки по акциям должна быть 0)
["STOPPRICE"] = stopprice, -- Цена Тейк-Профита
["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER", -- Тип стоп-заявки
["EXPIRY_DATE"] = "TODAY", -- Срок действия стоп-заявки ("GTC" – до отмены,"TODAY" - до окончания текущей торговой сессии, Дата в формате "ГГММДД")
-- "OFFSET" - (ОТСТУП)Если цена достигла Тейк-профита и идет дальше в прибыль,
-- то Тейк-профит сработает только когда цена вернется минимум на 2 шага цены назад,
-- это может потенциально увеличить прибыль
["OFFSET"] = tostring(2*SEC_PRICE_STEP),
["OFFSET_UNITS"] = "PRICE_UNITS", -- Единицы измерения отступа ("PRICE_UNITS" - шаг цены, или "PERCENTS" - проценты)
-- "SPREAD" - Когда сработает Тейк-профит, выставится заявка по цене хуже текущей на 100 шагов цены,
-- которая АВТОМАТИЧЕСКИ УДОВЛЕТВОРИТСЯ ПО ТЕКУЩЕЙ ЛУЧШЕЙ ЦЕНЕ,
-- но то, что цена значительно хуже, спасет от проскальзывания,
-- иначе, сделка может просто не закрыться (заявка на закрытие будет выставлена, но цена к тому времени ее уже проскочит)
["SPREAD"] = tostring(100*SEC_PRICE_STEP),
["SPREAD_UNITS"] = "PRICE_UNITS", -- Единицы измерения защитного спрэда ("PRICE_UNITS" - шаг цены, или "PERCENTS" - проценты)
-- "MARKET_TAKE_PROFIT" = ("YES", или "NO") должна ли выставится заявка по рыночной цене при срабатывании Тейк-Профита.
-- Для рынка FORTS рыночные заявки, как правило, запрещены,
-- для лимитированной заявки на FORTS нужно указывать заведомо худшую цену, чтобы она сработала сразу же, как рыночная
["MARKET_TAKE_PROFIT"] = market,
["STOPPRICE2"] = stopprice2, -- Цена Стоп-Лосса
["IS_ACTIVE_IN_TIME"] = "NO",
-- "MARKET_TAKE_PROFIT" = ("YES", или "NO") должна ли выставится заявка по рыночной цене при срабатывании Стоп-Лосса.
-- Для рынка FORTS рыночные заявки, как правило, запрещены,
-- для лимитированной заявки на FORTS нужно указывать заведомо худшую цену, чтобы она сработала сразу же, как рыночная
["MARKET_STOP_LIMIT"] = market,
["COMMENT"] = "Простой MA-робот ТЕЙК-ПРОФИТ и СТОП-ЛОСС"
}
-- Отправляет транзакцию на установку ТЕЙК-ПРОФИТ и СТОП-ЛОСС
sendTransaction(Transaction);
-- Ждет, пока не получит статус текущей транзакции (переменные "trans_Status" и "trans_result_msg" заполняются в функции OnTransReply())
while Run and trans_Status == nil do sleep(10); end;
Собственно на этой проверке все переходит в бесконечный цикл.
|
| Код |
|---|
function OnTransReply(trans_reply)
message("OnTransReply")
if trans_reply.trans_id == trans_id then
trans_Status = trans_reply.status;
trans_result_msg = trans_reply.result_msg;
end;
end;
|