sam063rus, да, я его переделал. Вынес создание за цикл, резюмировал в итоге только тогда когда статус - dead. 
Вот сейчас это выглядит так: (то, что относится к корутине)
| Код | 
|---|
| function OnOrder(trans_order)
PrintDbgStr("В онордере прошло событие flag ="..tostring(flag))
PrintDbgStr("статус в онордере " .. tostring(coroutine.status(co)))
--if coroutine.status(co) == "running" then coroutine.resume(co) end
   if flag and trans_order["sec_code"] == SECCODE and trans_order["brokerref"] == COMMENT_ALL and trans_order["class_code"] == CLASSCODE then 
      table.sinsert(ORDER_TABLE,1,trans_order) 
      PrintDbgStr("Прошли по условию в онордер")
      flag = false
      --if coroutine.status(co) == "normal" or coroutine.status(co) == "suspended" then coroutine.resume(co) end
      coroutine.resume(co)
   end
end
  | 
закомментированы разные варианты, я пробую то так то эдак.. Flag, что бы при двойном подтверждении два раза не срабатывал резюм.
| Код | 
|---|
| function bots()
   PrintDbgStr("В BOTS скрипте даем команду на продажу")
   PrintDbgStr(tostring(coroutine.status(co)))
   --_SellOpt(TRID_TRADE,2000,QTY,MODE,COMMENT_ALL)
   flag = true
   _SellOpt(TRID_TRADE,2000,QTY,MODE,COMMENT_ALL)
   PrintDbgStr("BOTS залип после продажи")
   coroutine.yield()
   PrintDbgStr("BOTS отлип после продажи")
   --sleep (5000)
   PrintDbgStr("приступаем к удалению")
   PrintDbgStr(tostring(coroutine.status(co)))
   --sleep(1000)
   
   num2 = _GetActiveOrdersNum()[1]
   PrintDbgStr("Выставлена заявка №".. tostring(num2))
   flag = true
   _KillOrder(num2,TRID_KILL)
   PrintDbgStr("BOTS залип после удаления")
   coroutine.yield()
   PrintDbgStr("BOTS отлип после удаления")
   --coroutine.resume(co)
end
is_run=true
flag = true
PrintDbgStr(COMMENT_ALL..": Инициализация прошла")
co = coroutine.create(bots)
function main( ... )
first = true
PrintDbgStr(tostring(coroutine.status(co)))
   while is_run do   
      PrintDbgStr("В основном скрипте пошел прогон")
      PrintDbgStr(tostring(coroutine.status(co)))
      if first then coroutine.resume(co)
         first = false
         end
      if coroutine.status(co) == "dead" then 
         co = coroutine.create(bots)
      end
      
      PrintDbgStr(tostring(coroutine.status(co)))
      sleep(200)
   end
end
  | 
и лог в итоге:
| Скрытый текст | 
|---|
| 00000001    0.00000000    [9384] SR6500BF5//SCRYPT: Инициализация прошла 00000002    0.00055721    [9384] suspended
 00000003    0.00062351    [9384] В основном скрипте пошел прогон
 00000004    0.00070361    [9384] suspended
 00000005    0.00077565    [9384] В BOTS скрипте даем команду на продажу
 00000006    0.00083352    [9384] running
 00000007    0.00097225    [9384] SR6500BF5//SCRYPT: Проверка цены на существенный выход. Цена в установленных пределах _VerifyPriceToTheor(price,direction)
 00000008    0.00130182    [9384] SR6500BF5//SCRYPT: Отправляю команду в терминал на Продажу _SellOpt(trid,price,qty,mode,comment)
 00000009    0.00482790    [9384] BOTS залип после продажи
 00000010    0.00490033    [9384] suspended
 00000011    0.20509318    [9384] В основном скрипте пошел прогон
 00000012    0.20515488    [9384] suspended
 00000013    0.20520814    [9384] suspended
 00000014    0.36994475    [9384] В онордере прошло событие flag =true
 00000015    0.37005705    [9384] статус в онордере suspended
 00000016    0.37009996    [9384] Прошли по условию в онордер
 00000017    0.37016127    [9384] BOTS отлип после продажи
 00000018    0.37022066    [9384] приступаем к удалению
 00000019    0.37028122    [9384] running
 00000020    0.37132820    [9384] В онордере прошло событие flag =false
 00000021    0.37138492    [9384] статус в онордере dead
 00000022    0.40539524    [9384] В основном скрипте пошел прогон
 00000023    0.40549716    [9384] dead
 00000024    0.40567231    [9384] suspended
 00000025    0.60553598    [9384] В основном скрипте пошел прогон
 00000026    0.60559422    [9384] suspended
 00000027    0.60565478    [9384] suspended
 00000028    0.80577093    [9384] В основном скрипте пошел прогон
 00000029    0.80582190    [9384] suspended
 00000030    0.80587631    [9384] suspended
 00000031    1.00597680    [9384] В основном скрипте пошел прогон
 00000032    1.00604546    [9384] suspended
 00000033    1.00611746    [9384] suspended
 00000034    1.21077490    [9384] В основном скрипте пошел прогон
 00000035    1.24667192    [9384] suspended
 00000036    1.26349628    [9384] suspended
 .
 .
 .
 .
 00000085    4.54232550    [9384] SR6500BF5//SCRYPT: Скрипт остановлен пользователем
 | 
вот это место:
00000017    0.37016127    [9384] BOTS отлип после продажи    
00000018    0.37022066    [9384] приступаем к удалению    
00000019    0.37028122    [9384] running    
00000020    0.37132820    [9384] В онордере прошло событие flag =false    
00000021    0.37138492    [9384] статус в онордере dead    
с чего вдруг когда отлипает BOTS, скрипт проходит дальше,статус руннинг, и как заходит в num2 = _GetActiveOrdersNum()[1], появляется событие в онордере, flag пустить не должен на резюм, а статус уже DEAD. Что может два раза резюмировать или даже три!!! чтобы корутина померла так досрочно..