Запускаем, будет окошко. Нажимаем куда надо. Не мучаемся больше с F2 и F6.
Выставил лотность удвоением от 1 до 32. Можно маргингейлить, можно усреднять, можно пирамидить, можно входить частями — это уж как вам надо. Расписал до 32 контрактов — это по ришке, кажется, лям — для почти всех достаточно.
ВНИМАНИЕ!!!
Для запуска нужно зайти в график торгуемого инструмента, и в цене, на вкладке «Дополнительно», проставить идентификатор «MYSTOP_PRICE».
В начале скрипта параметры. Комментарии там добавил, хитростей нет.
Всё бесплатно. Качайте, правьте, используйте целиком или частями для своих скриптов.
Ну, не совсем бесплатно. Интереса ради проведем эксперимент: если у кого возникнет жгучее желание оплатить столь скромную работу, пишите в ЛС, дам номер карты. Самому интересно, поделится ли кто-нибудь хоть стольником за, как мне кажется, полезный скрипт. Об этом потом тоже напишу. Собранные деньги на благотворительность не пойдут, а будут пропиты :)
Ставьте стопы и не сливайте! Курсов не веду, телеграфа нет, в ДУ не беру, всё пофигу.
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