Блог им. bitAndrey
is_run = true CLIENT_CODE = "СЮДА СВОЁ" SEC_CODE="RIU0" CLASS_CODE="SPBFUT" ACCOUNT_CODE="СЮДА СВОЁ" Otstup=20 -- отступ для выставления лимитки StopLoss=150 -- размер стоплосс function OnInit() t_id = AllocTable(); AddColumn(t_id, 0, "BUY", true, QTABLE_STRING_TYPE, 12); AddColumn(t_id, 1, "SELL", true, QTABLE_STRING_TYPE, 12); t = CreateWindow(t_id); SetWindowCaption(t_id, "Turbo Stop"); SetWindowPos(t_id, 400, 300, 220, 160); InsertRow(t_id,1) InsertRow(t_id,2) InsertRow(t_id,3) InsertRow(t_id,4) InsertRow(t_id,5) InsertRow(t_id,6) SetCell(t_id,1,0,'Buy 1') SetCell(t_id,1,1,'Sell 1') SetCell(t_id,2,0,'Buy 2') SetCell(t_id,2,1,'Sell 2') SetCell(t_id,3,0,'Buy 4') SetCell(t_id,3,1,'Sell 4') SetCell(t_id,4,0,'Buy 8') SetCell(t_id,4,1,'Sell 8') SetCell(t_id,5,0,'Buy 16') SetCell(t_id,5,1,'Sell 16') SetCell(t_id,6,0,'Buy 32') SetCell(t_id,6,1,'Sell 32') SetTableNotificationCallback(t_id, OnTableEvent) end -- Функция обрабатывает события в таблице function OnTableEvent(t_id, msg, par1, par2) -- Если был клик левой кнопкой if msg == QTABLE_LBUTTONDBLCLK then if par1 == 1 and par2 == 0 then DoFire(true,1) end if par1 == 1 and par2 == 1 then DoFire(false,1) end if par1 == 2 and par2 == 0 then DoFire(true,2) end if par1 == 2 and par2 == 1 then DoFire(false,2) end if par1 == 3 and par2 == 0 then DoFire(true,4) end if par1 == 3 and par2 == 1 then DoFire(false,4) end if par1 == 4 and par2 == 0 then DoFire(true,8) end if par1 == 4 and par2 == 1 then DoFire(false,8) end if par1 == 5 and par2 == 0 then DoFire(true,16) end if par1 == 5 and par2 == 1 then DoFire(false,16) end if par1 == 6 and par2 == 0 then DoFire(true,32) end if par1 == 6 and par2 == 1 then DoFire(false,32) end end end function GetLastPrice(TickerName) local NL=getNumCandles("MYSTOP_PRICE") tL, nL, lL = getCandlesByIndex ("MYSTOP_PRICE", 0, NL-1, 1) -- last свеча local aCurrentPrice=tL[0].close -- получили текущую цену (ЦПС) return aCurrentPrice end function DoFire(BuyFlag, LotSize) if BuyFlag then Operat="B" StopOperat="S" Condi=4 Revers=1 else Operat="S" StopOperat="B" Condi=5 Revers=-1 end t = { ["CLASSCODE"]=CLASS_CODE, ["SECCODE"]=SEC_CODE, ["ACTION"]="NEW_ORDER", -- новая сделка. ["ACCOUNT"]=ACCOUNT_CODE, ["CLIENT_CODE"]=CLIENT_CODE, ["TYPE"]="L", ["OPERATION"]=Operat, -- направление сделки, "B" или "S" ["QUANTITY"]=tostring(LotSize), -- объем, (акции - в лотах, а не штуках). ["PRICE"]=string.format("%i", GetLastPrice(SEC_CODE)-Otstup*Revers), -- цену лимитки ставим для мгновенного исполнения. ["TRANS_ID"]=tostring(LotSize) } res1 = sendTransaction(t) -- ... передаем сделку по рынку. message("ZAYAVKA="..res1) if res1=="" then message("OK. Need STOP") t2 = { ['ACTION'] = "NEW_STOP_ORDER", ['PRICE'] = string.format("%i", GetLastPrice(SEC_CODE)-(Otstup+StopLoss+100)*Revers), ['EXPIRY_DATE'] = "TODAY", ['STOPPRICE'] = string.format("%i", GetLastPrice(SEC_CODE)-(Otstup+StopLoss)*Revers), ['STOP_ORDER_KIND'] = "SIMPLE_STOP_ORDER", ['TRANS_ID'] = "11", ['CLASSCODE'] = CLASS_CODE, ['SECCODE'] = SEC_CODE, ['ACCOUNT'] = ACCOUNT_CODE, ['CLIENT_CODE'] = CLIENT_CODE, ['TYPE'] = "L", ['OPERATION'] = StopOperat, ['CONDITION'] = Condi, -- Направленность стоп-цены. Возможные значения: «4» - меньше или равно, «5» – больше или равно ['QUANTITY'] = tostring(LotSize) } res2 = sendTransaction(t2) message("STOP="..res2) end end function main() while is_run do sleep(100) end end function OnStop() DestroyTable(t_id) is_run = false return 1000 end
Полезно — используй, не нужно — пройди мимо.
Есть критика или пожелания — выкладывай.
Ни то, ни другое, ни третье — иди… Не скажу куда.
Да, этот коммент с третьего акка Турбопаскаля. )))
VladMih, потому что это плагиат.
smart-lab.ru/blog/640630.php