Добрый день.
Собственно проблема в том, что 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; |