Избранное трейдера protorus
--
--СКРИПТ Niki для smart-lab.ru 260321 ревизия
---------------------------------------
-- Флаг для поддержания работы функции main
is_run=true
fut_limit_old =0
fut_limit_max =0
kgo_old =0.5
function main( ... ) -- чудотворная функция внутри которой все работает
--"r": режим чтения (по умолчанию);
--"w": режим записи;
--"a": режим добавления;
--"r+": режим обновления, все предыдущие данные сохраняются;
--"w+": режим обновления, все предыдущие данные стираются;
--"a+": режим добавления и обновления, предыдущие данные сохраняются, запись разрешена только в конец файла. b бинарные файлы
-- Пытается открыть файл в режиме "чтения/записи"
f = io.open(getScriptPath().."\\Limits.txt","a");
-- Если файл не существует
if f == nil then
-- Создает файл в режиме "записи"
f = io.open(getScriptPath().."\\Limits.txt","w");
-- Закрывает файл
f:close();
-- Открывает уже существующий файл в режиме "чтения/записи"
f = io.open(getScriptPath().."\\Limits.txt","a");
end;
while is_run do
sleep(1000) -- 1000 = 1 секунда --волшебная пауза в работе скрипта
if getFuturesLimit("A111", "A111111", 0, "SUR") ~= nil then -- защита от пустых таблиц -- впишите ваши данные из Квика
-- %c - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11)
-- %x - дата (пример, 09/16/98)
-- %X - время (пример, 23:48:10)
seconds = os.time(); -- в seconds будет значение 1427052491
date1 = os.date("%x",seconds); -- %c - дата (по-умолчанию) (пример, 03/22/15 22:28:11)
time1 = os.date("%X",seconds); -- %c - время (по-умолчанию) (пример, 03/22/15 22:28:11)
--[[
liquidity_coef --NUMBER Коэффициент ликвидности
cbp_prev_limit --NUMBER Предыдущий лимит открытых позиций на спот-рынке»
cbplimit --NUMBER Лимит открытых позиций
cbplused --NUMBER Текущие чистые позиции
cbplplanned --NUMBER Плановые чистые позиции
varmargin --NUMBER Вариационная маржа
accruedint --NUMBER Накопленный доход
cbplused_for_orders --NUMBER Текущие чистые позиции (под заявки)
cbplused_for_positions --NUMBER Текущие чистые позиции (под открытые позиции)
options_premium --NUMBER Премия по опционам
ts_comission --NUMBER Биржевые сборы
kgo --NUMBER Коэффициент клиентского гарантийного обеспечения
currcode --STRING Валюта, в которой транслируется ограничение
real_varmargin --NUMBER Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены
--]]
fut_limit = getFuturesLimit("A111", "A111111", 0, "SUR").cbplused_for_positions -- NUMBER Текущие чистые позиции (под открытые позиции) -- впишите ваши данные из Квика
varmargin = getFuturesLimit("A111", "A111111", 0, "SUR").varmargin -- впишите ваши данные из Квика
accruedint = getFuturesLimit("A111", "A111111", 0, "SUR").accruedint -- впишите ваши данные из Квика
ts_comission = getFuturesLimit("A111", "A111111", 0, "SUR").ts_comission -- впишите ваши данные из Квика
kgo = getFuturesLimit("A111", "A111111", 0, "SUR").kgo -- впишите ваши данные из Квика
profit = varmargin + accruedint;
--if math.abs(fut_limit-fut_limit_old) > 10000 then -- каждые 10000 рублей изменения ГО, слишком частый файл печати
if math.abs(fut_limit-fut_limit_old) > 100000 then -- каждые 100000 рублей изменения ГО, настраиваем под себя.
open_lim = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit --NUMBER Лимит открытых позиций
f:write( tostring(date1).." "..tostring(time1).." ".."ГО: "..tostring(fut_limit).." ".."Профит: "..tostring(profit).." ".."Комис: "..tostring(ts_comission).." ".. "КГО: "..tostring(kgo).." Lim: "..tostring(open_lim).. "\n"); -- "\n" признак конца строки
--f:write( tostring(date1).. " " ..tostring(time1).. " " .. "BID: " .. tostring(res_trans) .. " " .. "ASK: " .. tostring(MXU8ask_vol) .. "\n"); -- "\n" признак конца строки
-- Сохраняет изменения в файле на диск
f:flush();
fut_limit_old = fut_limit;
end
if fut_limit_max == 0 then
fut_limit_max = fut_limit;
end
if ( math.abs(fut_limit-fut_limit_max) > 1000000 and fut_limit>0 ) then -- настраиваем под себя
message( tostring(fut_limit) ) ----сообщение в Квик--
--message( tostring(time1) )
---------------------------------------- отправляем сообщение в Телеграмм--
pos_free = getFuturesLimit("A111", "A111111", 0, "SUR").cbplplanned --NUMBER ГО свободных денег от позы без пониженного ГО
open_lim = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit --NUMBER Лимит открытых позиций
tg_message = tostring(open_lim).." ГО:"..tostring(fut_limit).." Поза:"..tostring(open_lim-pos_free)
os.execute('curl "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ') -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
----------------------------------------
-- Пример строки https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text= + Привет Квик!
----------------------------------------
fut_limit_max = fut_limit;
end
if math.abs(kgo-kgo_old) > 0 then
---------------------------------------- отправляем сообщение в телеграмм
tg_message = tostring(kgo).." Внимание! Изменился коэффициент КГО"
os.execute('curl "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ') -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм
----------------------------------------
-- Пример строки https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text= + Привет Квик!
----------------------------------------
kgo_old = kgo;
end
end
end
f:close(); -- закрываем файл печати.
end
-- Остановка скрипта из Квика
function OnStop(stop_flag)
is_run=false
end
--[[
MA volumn up down
--]]
Settings=
{
Name = "MAV2_m", -- indicator name
per=10, -- period
line=
{
{
Name = "MA",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,0)
},
{
Name = "MA2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,255)
}
}
}
function Init()
mav1 = {}
mav2 = {}
return 2
end
function OnCalculate(index)
per = Settings.per
if index > 1 then
curv = C(index)
prevv = C(index-1)
else
curv = C(index)
prevv = C(index)
end
if curv - prevv > 0 then
if index > 1 then
mav1[index] = mav1[index-1] + V(index)
mav2[index] = mav2[index-1]
else
mav1[index] = V(index)
mav2[index] = 0
end
else
if index > 1 then
mav1[index] = mav1[index-1]
mav2[index] = mav2[index-1] + V(index)
else
mav1[index] = 0
mav2[index] = V(index)
end
end
if index > per then
vv1 = mav1[index] - mav1[index-per]
vv2 = mav2[index] - mav2[index-per]
else
vv1 = 0
vv2 = 0
end
return 0, vv1 - vv2
end
--[[
MA volumn up down
--]]
Settings=
{
Name = "MAV2", -- indicator name
per=10, -- period
line=
{
{
Name = "MA",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0,255)
},
{
Name = "MA2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(255,0,0)
}
}
}
function Init()
mav1 = {}
mav2 = {}
return 2
end
function OnCalculate(index)
per = Settings.per
if index > 1 then
curv = C(index)
prevv = C(index-1)
else
curv = C(index)
prevv = C(index)
end
if curv - prevv > 0 then
if index > 1 then
mav1[index] = mav1[index-1] + V(index)
mav2[index] = mav2[index-1]
else
mav1[index] = V(index)
mav2[index] = 0
end
else
if index > 1 then
mav1[index] = mav1[index-1]
mav2[index] = mav2[index-1] + V(index)
else
mav1[index] = 0
mav2[index] = V(index)
end
end
if index > per then
vv1 = mav1[index] - mav1[index-per]
vv2 = mav2[index] - mav2[index-per]
else
vv1 = 0
vv2 = 0
end
return vv1, vv2
end






