Блог им. krivozub

Робот для автоматического выставления стопа

В своё время активно пользовался. Робот для выставления стопа и тейк профита. 
Как только видит открытые позиции. Выставляет стоп. Может кому надо. Пользуйтесь

Нужно заполнить только
cAccount=«7600lll» ВАШ СЧЕТ
cClassName=«SPBFUT» ЧТО ТОРГУЕТЕ
cProfit=7500 ТЕЙК ПРОФИТ
cProfShift=100 ОТСТУП ОТ ЦЕНЫ

cProfSpr=500 СПРЕД
cStopLoss=400 ЗНАЧЕНИЕ СТОПА
cSLSpr=500 СПРЕД
Файл:

PORTFOLIO_EX VFAutoStop;
DESCRIPTION VFAutoStop;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;

PROGRAM

New_Global(«CurLogLine»,1)
New_Global(«gLastPos»,CREATE_MAP ()) 'коллекция крайних позиций

ClassesList = get_classes_list()

cAccount=«7600lll»
cClassName=«SPBFUT»
cProfit=7500
cProfShift=100
cProfSpr=500
cStopLoss=400
cSLSpr=500

cLogFile=«C:\VFAutoStop.log»

FUNC WriteLog (pTitle, pMessage)
writeln(cLogFile, get_value(GET_DATETIME(), «Datetime») & " " & pTitle & " > " & pMessage)
END FUNC

func SendTrans(pTransParams)
trans_result = SEND_TRANSACTION (30, pTransParams)
'LogData(pTransParams,trans_result)
if get_value (trans_result, «RESULT»)+0.0=0 then
' WriteLog(pTransParams,get_value (trans_result, «RESULT_EX») & "|" & get_value (trans_result, «DESCRIPTION»))
WriteLog(pTransParams,trans_result)
end if
end func

Func ActiveStopOrder(pSecCode)
nOrd=Get_number_of(«STOP_ORDERS»)
result=CREATE_MAP ()
for iOrd from 1 to nOrd
asoOrder = get_item(«STOP_ORDERS», iOrd)
if get_value(asoOrder, «STATUS»)=«ACTIVE» and get_value(asoOrder, «SECCODE»)=pSecCode
result = asoOrder
end if
end for
End Func

FUNC SendStopOrderTPSL (pSecCode, pClassCode, pOper, pProfPrice, pProfOffs, pProfSprm, pStopPrice,pPrice,pSize)
trans_params = ""
trans_params = set_value (trans_params, «TRANS_ID», 1)
trans_params = set_value (trans_params, «ACTION», «NEW_STOP_ORDER»)
trans_params = set_value (trans_params, «STOP_ORDER_KIND», «TAKE_PROFIT_AND_STOP_LIMIT_ORDER»)
trans_params = set_value (trans_params, «OFFSET_UNITS», «PRICE_UNITS»)
trans_params = set_value (trans_params, «SPREAD_UNITS», «PRICE_UNITS»)
trans_params = set_value (trans_params, «CLASSCODE», pClassCode)
trans_params = set_value (trans_params, «SECCODE», pSecCode)
trans_params = set_value (trans_params, «ACCOUNT», cAccount)
trans_params = set_value (trans_params, «OPERATION», pOper)
trans_params = set_value (trans_params, «STOPPRICE», pProfPrice)
trans_params = set_value (trans_params, «STOPPRICE2», pStopPrice)
trans_params = set_value (trans_params, «PRICE», pPrice)
trans_params = set_value (trans_params, «OFFSET», pProfOffs)
trans_params = set_value (trans_params, «SPREAD», pProfSprm)
trans_params = set_value (trans_params, «QUANTITY», pSize)
trans_params = set_value (trans_params, «EXPIRY_DATE», «GTC»)
SendTrans(trans_params)
end func

Func LogData(Prm1,Prm2)
output = CREATE_MAP ()
output = SET_VALUE (output, «Param0», GET_INFO_PARAM(«SERVERTIME»))
'GET_VALUE(GET_DATETIME(), «DATETIME»)
output = SET_VALUE (output, «Param1», Prm1)
output = SET_VALUE (output, «Param2», Prm2)
ADD_ITEM (CurLogLine, output)
CurLogLine=CurLogLine+1
End Func

nLimPos=GET_NUMBER_OF(«FUTURES_CLIENT_HOLDINGS»)

FOR iLP FROM 1 to nLimPos
LimPos= GET_ITEM («FUTURES_CLIENT_HOLDINGS», iLP)
nTotNet=GET_VALUE(LimPos,«TOTAL_NET»)+0
cSecCode=GET_VALUE(LimPos,«SECCODE»)
if nTotNet<>0 then ' есть открытые позиции
ASO=ActiveStopOrder(cSecCode)
cLastPrice=GET_PARAM(ClassesList, cSecCode, «LAST»)+0
if get_value(ASO, «STATUS»)<>«ACTIVE» ' есть стоп-заявки?
if get_value(gLastPos,cSecCode) & "!" <>nTotNet & "!"
nDir=nTotNet/abs(nTotNet)
if nDir>0
cOPer=«S»
else
cOper=«B»
end if
nProfit=cLastPrice+nDir*cProfit
nStop=cLastPrice-nDir*cStopLoss
SendStopOrderTPSL(cSecCode, cClassName, cOper, nProfit, cProfShift, cProfSpr, nStop, cLastPrice-nDir*(cStopLoss+cSLSpr), abs(nTotNet))
LogData(nTotNet,nProfit & "/" & nStop)
gLastPos=set_value(gLastPos,cSecCode,nTotNet)
end if
end if
else
gLastPos=set_value(gLastPos,cSecCode,nTotNet)
end if
end for

END_PROGRAM

PARAMETER Param0;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING (200);
END

PARAMETER Param1;
PARAMETER_TITLE Кол-во;
PARAMETER_DESCRIPTION Кол-во;
PARAMETER_TYPE STRING (200);
END

PARAMETER Param2;
PARAMETER_TITLE Цена;
PARAMETER_DESCRIPTION Цена;
PARAMETER_TYPE STRING (200);
END

END_PORTFOLIO_EX





★20
18 комментариев
шикаааарно)
спасибо!
а это в .lua сохранить и в папку lua?
где и как сохранить?))
kirilles, Это старый добрый QPILE.
avatar
Я добавлял QPile. 

 А еще если в квике РУКА нажата то можно двигать СТОП или Тейк профит вниз или вверх
надо же, моими скриптами до сих пор пользуюутся!
хоть бы кто 100 рублей задонатил :)
avatar
vfreeman, ПЛЮСАНУЛ КАРМУ!!+++
а как в квик то добавить? сие чудо 
kirilles, Ctrl-F11
avatar
vfreeman, а по какому принципу выставляется стоп?
% от депо?
avatar
Да я его в лохматые годы нашел на смарт лабе. СПАСИБО тебе большое. Работал без сбоев
Иван Кривозуб,  величина стопа в пунктах?
как тогда выставит для Сишки и Ришки если у них совершенно разные величины в пунктах?
avatar
У ри свои пункты у Си свои. Нужно пробовать.
Там инструмент нельзя выбрать. робот выставляет стоп на любую открытую позицию, а настройки стопов и профитов одинаковые. То есть можно торговать только одним инструментом. А если откроете другой, а робот забудете выключить, то ждите сюрпризов
avatar
Иван Собакин, все верно за ним следить нужно.
Иван Кривозуб, хорошо бы допилить, что бы в % выставлял, тогда и следить не надо)
А автостопов на 1 инструмент куча по сети и на луа
avatar
Tema, Я раньше пользовался. Сейчас вообще торгую без стопов. Стопы для моего стиля торговли не подходят. 
Маркидоновой на почту скиньте
avatar
У kbrobot на сайте есть автостоп, отлаженный годами. Его достаточно.
avatar

теги блога Иван Кривозуб

....все тэги



UPDONW
Новый дизайн