Я нашел один но трудно розобраться
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"
table_mask={}
table_mask.client_code=cl_code
table_mask.seccode=sec
is_run = true
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