есть условие входа в позицю и есть отдельно тейк и стоп,когда складую вместе сразу после запуска виставляються лимитки,как зделать так чтоб лимитки виставлялись после входа в позицю?Заранее благодарен Вот скрипти run = true function main() while run do PriceStep = getParamEx('SPBFUT', 'RIH6' , 'SEC_PRICE_STEP').param_value Price = getParamEx('SPBFUT', 'RIH6', 'LAST').param_value PriceB = Price + 50 * PriceStep --маркет цена покупки local N1=getNumCandles("Price")
local N2=getNumCandles("MyPrice")
t1,n1,i1=getCandlesByIndex("Price", 0, N1-3, 2)
t2,n2,i2=getCandlesByIndex("MyPrice", 0, N2-3, 2) --сигнал на покупку (первый мувинг пересекает второй снизу вверх
if t1[0].close<t2[0].close and t1[1].close>t2[1].close then Open('SPBFUT', 'RIH6',PriceB , 1, 'B') end sleep(500) end end
function OnStop() run = false end
function Open(class_code, sec_code, price, qty, operation)
Здравствуйте,у меня опять проблема на этот рас с проскальзиваныем цены,заявка активируется но цена уходит,заявка не исполнена,Подскажите что сделать чтоб не проскальзивало,вот скрипт PriceStep = getParamEx('SPBFUT', 'RIH6' , 'SEC_PRICE_STEP').param_value Price = getParamEx('SPBFUT', 'RIH6', 'LAST').param_value PriceS = Price - 50 * PriceStep --маркет цена продажи t = {
Не указаны единицы измерения защитного интервала take profit стоп-заявки.В скрипте они есть почму же он их не видит? SEC_PRICE_STEP = getParamEx('SPBFUT', 'RIH6' , 'SEC_PRICE_STEP').param_value STOP_LOSS=3; TAKE_PROFIT=3; stopprice= tostring(PriceS - TAKE_PROFIT*SEC_PRICE_STEP); stopprice2= tostring(PriceS + STOP_LOSS*SEC_PRICE_STEP);
Вот в чом ошибка:lua:46: '}' expected (to close '{' at line 39) near '[' PriceStep = getParamEx('SPBFUT', 'RIH6' , 'SEC_PRICE_STEP').param_value Price = getParamEx('SPBFUT', 'RIH6', 'LAST').param_value PriceS = Price - 50 * PriceStep --маркет цена продажи t = {
В чом шибка стопа local Transaction = { ["ACTION"] = "NEW_STOP_ORDER", -- Тип заявки ["TRANS_ID"] = tostring(trans_id), ["CLASSCODE"] = "SPBFUT", ["SECCODE"] = "SRH6 ", ["ACCOUNT"] = "SPBFUT00963", ["OPERATION"] = "B" ["QUANTITY"] = "1", -- Количество в лотах ["PRICE"] = price, -- Цена, по которой выставится заявка при срабатывании Стоп-Лосса (для рыночной заявки по акциям должна быть 0) ["STOPPRICE"] = "10290", -- Цена Тэйк-Профита ["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER", -- Тип стоп-заявки ["EXPIRY_DATE"] = "TODAY", -- Срок действия стоп-заявки ("GTC" – до отмены,"TODAY" - до окончания текущей торговой сессии, Дата в формате "ГГММДД")
я правильно понял. stop_level и есть трейлинг он будет подтягиваит за индикатором,можно ли зделать что подтягивал за ценной и при достижениее б/у остановлявся на том уровне?
Я нашел один но трудно розобраться if string.find(package.path,'C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.lua')==nil then package.path=package.path..';C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.lua;' end if string.find(package.path,'C:\\Program Files\\Lua\\5.1\\lua\\?.lua')==nil then package.path=package.path..';C:\\Program Files\\Lua\\5.1\\lua\\?.lua;' end
require"QL" require"iuplua" log="auto_stop.log"
--Блок пользовательских переменных. Забиваем в визуальный интерфейс, который помнит ранее введённые данные. account="game997" cl_code="game997" sec="MSICHS" stop_level=5 --расстояние в шагах цены от индикатора, на котором срабатывает стоп. slippage=10 --проскальзывание при исполнении ордера в шагах цены. chart="auto_stop"
function OnStop(s) is_run = false toLog(log,'OnStop. Script finished manually') message ("auto_stop finished manually", 2) end
function main() log=getScriptPath()..'\\'..log toLog(log,"Start main") class=getSecurityInfo("",sec).class_code --Получаем размер лота lotsize=getParamEx(class,sec,"lotsize").param_value --Получаем цену последней сделки last=getParamEx(class,sec,"last").param_value step=getParamEx(class,sec,'SEC_PRICE_STEP').param_value stop_level=stop_level*step if string.find(FUT_OPT_CLASSES,class)~=nil then acc=account else acc=cl_code end while is_run do --получаем значение индикатора. Одинаково для Moving Average и Parabolic SAR n = getNumCandles (chart) if n==0 or n==nil then toLog(log,'Can`t get data fr om chart '..chart) message('Не можем получить данные с графика '..chart,1) is_run=false break end t,n,s = getCandlesByIndex(chart,0,n-1,1) indicator=t[0].close
sell_out_trigger=toPrice(sec, indicator-stop_level) --цена, при которой спускаем курок на продажу лонга buy_out_trigger=toPrice(sec, indicator+stop_level) --цена, при которой спускаем курок на откуп шорта
--Получаем текущий баланс по торгуемому инструменту
balance=getPosition(sec,acc) close_order_size=math.abs(balance/lotsize) --считаем размер ордера-закрывашки toLog(log,balance)
--ЗАКРЫТИЕ ПОЗИЦИЙ
if balance>0 and last < sell_out_trigger then toLog (log, 'Sell out signal. Balance='..balance..' Last='..last..' SellTrigerPrice='..sell_out_trigger) comment="sell_out!" --комментарий: продаём! sell_out=sell_out_trigger-slippage _,reply=sendLimit(class,sec,"S",sell_out,close_order_size,account,cl_code,comment) toLog(log, reply) end
if balance<0 and last > buy_out_trigger then toLog (log, 'Buy out signal. Balance='..balance..' Last='..last..' SellTrigerPrice='..buy_out_trigger) comment="buy_out!" --комментарий: продаём! buy_out=buy_out_trigger+slippage _,reply=sendLim it(class,sec,"B",buy_out,close_order_size,account,cl_code,comment) toLog(log, reply) end sleep(1000) --killAllOrders(table_mask) --рекомендуется после срабатывания стопа принудительно почистить все заявки в стакане по этому инструменту чтобы вдруг не осталось лишних, в том числе "забытых" по неосторожности. Бывает, что оставшиеся в стакане заявки блокируют средства и не дают продать по стопу. killAllOrders даст гарантию что на следующем круге цикла мы точно выйдем из позиции. end toLog(log,"Main ended") end
priceB=tostring (getParamEx("SPBFUT", "SRH6", 'offer').param_value) message("покупайте по цене") message(priceB) Как зделать один месседж:покупайте по цене(цена)?
local Transaction = { ["ACTION"] = "NEW_STOP_ORDER", -- Тип заявки ["TRANS_ID"] = tostring(trans_id), ["CLASSCODE"] = "SPBFUT", ["SECCODE"] = "SRH6 ", ["ACCOUNT"] = ACCOUNT, ["OPERATION"] = "B" ["QUANTITY"] = "1", -- Количество в лотах ["PRICE"] = price, -- Цена, по которой выставится заявка при срабатывании Стоп-Лосса (для рыночной заявки по акциям должна быть 0) ["STOPPRICE"] = stopprice, -- Цена Тэйк-Профита ["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER", -- Тип стоп-заявки ["EXPIRY_DATE"] = "TODAY", -- Срок действия стоп-заявки ("GTC" – до отмены,"TODAY" - до окончания текущей торговой сессии, Дата в формате "ГГММДД")
Подскажите пожалуйста в даной транзакции нужно условия Спреда,если робот торгует Маркет Ордерами? local Transaction = { ["ACTION"] = "NEW_STOP_ORDER", -- Тип заявки ["TRANS_ID"] = tostring(trans_id), ["CLASSCODE"] = "SPBFUT", ["SECCODE"] = "SRH6 ", ["ACCOUNT"] = ACCOUNT, ["OPERATION"] = "B" ["QUANTITY"] = "1", -- Количество в лотах ["PRICE"] = price, -- Цена, по которой выставится заявка при срабатывании Стоп-Лосса (для рыночной заявки по акциям должна быть 0) ["STOPPRICE"] = stopprice, -- Цена Тэйк-Профита ["STOP_ORDER_KIND"] = "TAKE_PROFIT_AND_STOP_LIMIT_ORDER", -- Тип стоп-заявки ["EXPIRY_DATE"] = "TODAY", -- Срок действия стоп-заявки ("GTC" – до отмены,"TODAY" - до окончания текущей торговой сессии, Дата в формате "ГГММДД")
["SPREAD"] = tostring(100*SEC_PRICE_STEP), ["SPREAD_UNITS"] = "PRICE_UNITS", -- Единицы измерения защитного спрэда ("PRICE_UNITS" - шаг цены, или "PERCENTS" - проценты)
Как округлить цену к целому числу,у меня цену видает с нулями после точки.а такую цену тразакция не принимает Price =tonumber(getParamEx('SPBFUT', 'SRH6', 'bid').param_value)
Ви не поняли,Смотрите if aaa>bbb then buy end if aaa<bbb then закрить бай и открить селл,Как ето записать кодом? тоесть банальний реверс просто увиличить контракт не поможет робот потом запутается