(Загружаются из QUIK, выбираем меню «Система» — «Загрузить настройки из файла» где и выбираем файл «140519ФондовыйАлор.wnd»)
drive.google.com/file/d/1knSJvbaKrdqUysC_XRqmrfXlwjL-eJ5B/view?usp=sharing — ссылка на файл настроек
В этом посте я выкладываю свои настройки торгового терминала QUIK для …условно назовем «фондовой торговли» (акции, облигации, опционы, фьючи – не внутридневка). Эти настройки могут на первый взгляд показаться слегка сложноватыми, но к ним крайне быстро привыкаешь, так как они позволяют снизить «хаотичную активность» и отслеживать рынок комплексно, а рынок – это единая структура.
Это уже профессиональные настройки и рассчитаны они на два монитора (можно ноутбук+монитор – легко соединяются через шнур). В настройках рабочее пространство разбито на ряд вкладок логика которых следующая: «Карта» — это основная просмотровая зона – ваша капитанская рубка – на этой вкладке размещены новости, лидеры роста и снижения по акциям, облигациям и фьючам (для арбитража), отраслевые индексы, а так же выведены основные индикативы нашего рынка (РТС, доллар, евро, фьюч на золото и на нефть). Везде прочерчены тренды и ценовые уровни – т.е. через время их нужно будет корректировать.
Здравствуйте!
Это мой первый пост на смартлабе, поэтому прошу строго не судить мои начинания.
Торгую на финансовых рынках уже довольно долгое время. Первое время торговал руками, но из-за работы пропускал кучу сигналов. В чатах трейдеров частенько читал сообщения, в которых люди также жаловались на эту проблему. Потом перешел на алготорговлю. Но тут уже наткнулся на другую проблему — невозможность контроля торгов. Не знаю, сможете ли вы меня понять, но это просто невероятный стресс, когда за 10 километров от тебя работает программа, которая в любой момент может дать сбой и слить весь твой депозит, а ты даже об этом не узнаешь. От алготорговли я решил отказаться, так как во время работы это слишком сильно забивало мне голову.
Но спустя какое-то время мне пришла в голову идея — разработать систему, кот
орая позволит дистанционно контролировать торговлю своих роботов, или же просто торговать дистанционно, если же робота нет или не требуется. Я разработал и тщательно протестировал свою систему контроля торгов. Теперь я могу просто взять и посмотреть — что же там у меня происходит и по возможности самому закрыть позицию или закрыть ее. Также могу временно отключать своего робота — данный параметр называется «автопилот».
Если вы хотите себе такую же панель для своего робота, или же просто хотите дистанционно открывать и закрывать позиции с выставлением стопов и тейков — пишите, буду рад вам помочь: )
Прикреплю фото с интерфейсом своей разработки:

Проблема: На текущий момент наиболее удобным и полноценным программным обеспечением (далее ПО) для автоматизации торговли на российском биржевом рынке является небезызвестный ТСЛАБ. Несмотря на несомненные плюсы в виде удобного визуального редактора для написания торговых скриптов, который позволяет писать роботов даже без знания языков программирования, есть ряд недостатков, которые делают использование данного ПО для меня крайне не практичным. И думаю не только для меня, учитывая, что средний размер счёта на Мосбирже как правило не превышает 500 тыс.р… Читать полностью по ссылке...Теперь у данного проекта появился отдельный сайт, где можно скачать актуальную версию программы, ознакомиться с инструкциями по настройке программы и запуске своего первого робота.

Settings=
{
Name = "Zigzag5", -- название индикатора
delta=2, -- параметр индикатора
deltaY=1, -- параметр индикатора
linedeltaY=0.75, -- параметр индикатора
line=
{
{
Name = "zigzagline3",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,255, 0)
},
{
Name = "upline",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "lowline",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 255)
},
{
Name = "declineline",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "upline2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(255,0, 0)
},
{
Name = "lowline2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0, 255)
},
{
Name = "declineline2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(255,0, 0)
}
}
}
function getradius(x, y)
return math.sqrt(Settings.deltaY*y*y+x*x)
end
function koef(val)
return 1 - 1/(1-1/val)
end
function Init()
vMin = 0
vMax = 0
vMinindex = 0
vMaxindex = 0
voldMinindex = 0
voldMaxindex = 0
upval = 0
lowval = 0
upindex = 1
lowindex = 1
veu = nil
vel = nil
curfrom = 1
curto = 1
return 7
end
function OnCalculate(index)
local printz = 0
vsize = Size()
ve = nil
veu = nil
vel = nil
curv = nil
veu2 = nil
vel2 = nil
curv2 = nil
if index == 1 then
vMin = C(index)
vMax = C(index)
vMinindex = index
vMaxindex = index
voldMinindex = index
voldMaxindex = index
ve = C(index)
else
if voldMaxindex >= voldMinindex then
if C(index) > (1 + Settings.delta/100)*vMin then
vMin = C(index)
vMax = C(index)
vMaxindex = index
voldMinindex = vMinindex
vFrom = voldMaxindex
vTo = vMinindex
printz = 1
if (C(vMinindex) > C(vsize)) and (upval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
upval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
upindex = vMinindex
end
if (C(vMinindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
lowval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
lowindex = vMinindex
end
curfrom = voldMaxindex
curto = voldMinindex
else
if vMin > C(index) then
vMin = C(index)
vMinindex = index
vFrom = voldMaxindex
vTo = index
printz = 0
curto = index
else
vFrom = vMinindex
vTo = index
printz = 0
end
curfrom = voldMaxindex
end
else
if voldMaxindex <= voldMinindex then
if C(index) < (1 - Settings.delta/100)*vMax then
vMax = C(index)
vMin = C(index)
vMinindex = index
voldMaxindex = vMaxindex
vFrom = voldMinindex
vTo = vMaxindex
printz = 1
if (C(vMaxindex) > C(vsize)) and (upval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
upval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
upindex = vMaxindex
end
if (C(vMaxindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
lowval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
lowindex = vMaxindex
end
curfrom = voldMinindex
curto = voldMaxindex
else
if vMax < C(index) then
vMax = C(index)
vMaxindex = index
vFrom = voldMinindex
vTo = index
printz = 0
curto = index
else
vFrom = vMaxindex
vTo = index
printz = 0
end
curfrom = voldMinindex
end
end
end
if (printz == 1) or (Size() == index) then
for i = vFrom, vTo do
k = (C(vTo)- C(vFrom))/(vTo- vFrom)
v = i*k + C(vTo) - vTo*k
SetValue(i, 1, v)
ve = v
end
if (Size() == index) then
ve = C(index)
if voldMaxindex >= voldMinindex then
vFrom = voldMaxindex
vTo = vMinindex
end
if voldMaxindex <= voldMinindex then
vFrom = voldMinindex
vTo = vMaxindex
end
for i = vFrom, vTo do
k = (C(vTo)- C(vFrom))/(vTo- vFrom)
v = i*k + C(vTo) - vTo*k
SetValue(i, 1, v)
end
-- up level line
if upindex ~= nil then
if C(upindex) > C(index) then
for i = upindex, index do
SetValue(i, 2, C(upindex))
SetValue(i, 5, C(upindex)-Settings.linedeltaY*C(vsize)/100)
end
veu = C(upindex)
end
end
-- low level line
if lowindex ~= nil then
if C(lowindex) < C(index) then
for i = lowindex, index do
SetValue(i, 3, C(lowindex))
SetValue(i, 6, C(lowindex)+Settings.linedeltaY*C(vsize)/100)
end
vel = C(lowindex)
end
end
if voldMaxindex >= voldMinindex then
vsign = -1
if curfrom == voldMinindex then
vsign = -1
end
if curfrom == voldMaxindex then
vsign = 1
end
-- inclined line
if curto- curfrom > 0 then
maxcurv = 0
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, curto do
curv = i*k + C(curto) - curto*k
if vsign == -1 then
if L(i) < curv then
if maxcurv < curv - L(i) then
maxcurv = curv - L(i)
end
end
else
if H(i) > curv then
if maxcurv < H(i) - curv then
maxcurv = H(i) - curv
end
end
end
end
for i = curfrom, index do
curv = i*k + C(curto) - curto*k + vsign*maxcurv
SetValue(i, 4,curv)
curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
SetValue(i, 7,curv2)
end
end
curv = nil
end
if voldMaxindex <= voldMinindex then
vsign = -1
if curfrom == voldMaxindex then
vsign = 1
end
if curfrom == voldMinindex then
vsign = -1
end
-- inclined line
if curto- curfrom > 0 then
maxcurv = 0
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, curto do
curv = i*k + C(curto) - curto*k
if vsign == -1 then
if L(i) < curv then
if maxcurv < curv - L(i) then
maxcurv = curv - L(i)
end
end
else
if H(i) > curv then
if maxcurv < H(i) - curv then
maxcurv = H(i) - curv
end
end
end
end
for i = curfrom, index do
k = (C(curto)- C(curfrom))/(curto- curfrom)
curv = i*k + C(curto) - curto*k + vsign*maxcurv
SetValue(i, 4,curv)
curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
SetValue(i, 7,curv2)
end
end
curv = nil
end
end
end
end
return ve, veu, vel, curv, veu2, vel2, curv2
end