Избранное трейдера Георгий Харитонов
(Загружаются из QUIK, выбираем меню «Система» — «Загрузить настройки из файла» где и выбираем файл «140519ФондовыйАлор.wnd»)
drive.google.com/file/d/1knSJvbaKrdqUysC_XRqmrfXlwjL-eJ5B/view?usp=sharing — ссылка на файл настроек
В этом посте я выкладываю свои настройки торгового терминала QUIK для …условно назовем «фондовой торговли» (акции, облигации, опционы, фьючи – не внутридневка). Эти настройки могут на первый взгляд показаться слегка сложноватыми, но к ним крайне быстро привыкаешь, так как они позволяют снизить «хаотичную активность» и отслеживать рынок комплексно, а рынок – это единая структура.
Это уже профессиональные настройки и рассчитаны они на два монитора (можно ноутбук+монитор – легко соединяются через шнур). В настройках рабочее пространство разбито на ряд вкладок логика которых следующая: «Карта» — это основная просмотровая зона – ваша капитанская рубка – на этой вкладке размещены новости, лидеры роста и снижения по акциям, облигациям и фьючам (для арбитража), отраслевые индексы, а так же выведены основные индикативы нашего рынка (РТС, доллар, евро, фьюч на золото и на нефть). Везде прочерчены тренды и ценовые уровни – т.е. через время их нужно будет корректировать.
4 мая состоится обновление решения Ethereum Name Service (ENS) и запуск нового реестра доменных имен. Все существующие домены будут конвертированы в невзаимозаменяемые токены (NFT-токены), которые можно будет хранить и переводить другим пользователям.
ENS Is Upgrading on May 4th — Here’s What You Need to Do —> https://t.co/G6AFYzeIXK #ENS #ethereum
— Ethereum Name Service (@ensdomains) April 16, 2019
Апгрейд коснется 300 тысяч доменов .eth, а также .xyz и .luxe. Миграция доменных имен будет проходить вплоть до 4 мая 2020 года.
ENS позволяет привязывать адреса в сети Ethereum к вышеуказанным доменам для того, чтобы они были более «читабельными». Решение призвано сделать доступ к блокчейн-активам, децентрализованным приложениям и смарт-контрактам удобным с точки зрения пользовательского опыта.
Ранее регистрация доменов происходила посредством слепых аукционов, однако в новом реестре, утверждают разработчики, процесс значительно ускорится. Пользователям необходимо будет совершить две транзакции: первой выразить намерение зарегистрировать имя и второй непосредственно осуществить это.
Алгоритм данной торговли был описан уважаемым Гном (https://smart-lab.ru/blog/499606.php) и, поскольку я являюсь любителем различных теорий Мартингейла и усреднения, написал робота по этой стратегии.
Подробно на алгоритме останавливаться не буду — читайте по ссылке у Гнома, там очень хорошо всё расписано.
Здесь — немного измененная реализация. Отличие в том, что позиции открываются не через равные промежутки цены, а чуть шире: еще должно прийти хотя бы минимальное подтверждение, что дальше не полетит (в данном случае использован вход обратно в канал Боллинджера, но это несложно поменять на что угодно).
Если полетит против нас вертикально, мы хотя бы не будет бессмысленно открывать кучу сделок на мгновенной длинной вертикальной палке.
Итак, представляю: «Судак-Тудак» Универсальный (одновременно для акций и фьючерсов).
Если хотите добавить инструменты (а они добавляются в массив aTickerList), не забудьте вписать их данные в массивы:
Поскольку рынок опционов на 100% прозрачно то там относительно легко выявит и отследит крупные сделки.
Крупные сделки обычно совершают инсайдеры, крупные игроки, те которые случайно нажали не ту кнопочку и по другими причинам.
Хотя все они могут ошыбатся, но мы исходим из предположения что большинство из них владеет корректной информацией пока недоступной или пока не заметной открытой публике.
И так наша цель следовать за крупным игроком.
Нам интересны только такие варианты крупных сделок.
1. Покупка акции и покупка Put опционов в качестве страховки (здесь Put опцион это стоп лосс).
2. Покупка Call-ов
3. Продажа акций и покупка Call опционов (здесь Call опцион это стоп лосс)
4. Покупка Put опционов
Отследит крупные опционные сделки можно много где, я пользуюсь бесплатной версией этого сервиса https://marketchameleon.com, там надо зарегистрироваться. Каждый день, за пол часа до закрытия рынка я открою https://marketchameleon.com/Reports/UnusualOptionVolumeReport
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