Избранное трейдера HARES
1. Основа
(стоп, соотношение, вероятность)
3 правила соблюдение которых обязательно.
Стоплосс.
Стопы надо ставить всегда!
Соотношение риск к прибыли.
Минимальное соотношение — 1 к 2. Это значит что рискуя 5 пунктами твоя потенциальная прибыль должна быть минимум 10, лучше больше.
Это продолжение статьи, о том как определить качество точки входа, которую я писал здесь:
https://smart-lab.ru/blog/542337.php

Ещё раз задумаемся, как можно оценить даёт ли точка входа какое-то преимущество при её использовании или нет. Для этого можно применить следующий тест.
Предположим, что мы входим в определённой точке ценового графика в длинную или короткую позицию и выставляем стоп-заявку и заявку тейк-профит равноудалённо от точки входа, как показано на рисунке ниже.




С мая месяца не торгую на срочном рынке. Option-Lab отобрали, возвращать для работы с сертифицированным российским брокером, похоже, не собираются. А набирать вручную по сотне контрактов несколько ног позиции как-то не серьезно.
За рынком наблюдаю, как там несчастная Алроса поживает вместе с менее несчастным Сургутом.
В общем, скучно. Решил немного размяться внутридневной торговлей RI. День торгую, два, копеечки собираю.
А тут раз и неудача. Купил 14 августа контракт на RIU9 по цене 129350, поставил близкий тейк и ушел. А оно как полетит вниз. Прихожу, уже 126000, убыток больше 4000 руб., и что делать? Фиксировать убыток жалко. Пирамидиться не хочется. Подумал не долго, посчитал, да и продал 4 колла RIU9 страйка 130000, экспирация 19.09.2019. Средняя цена получилась 1830 за контракт.
На следующий день RI пошел ниже 125000, купил еще контракт фьючерса по цене 124870 и продал контракт колла 125000 страйка той же датой экспирации по цене 3440. Получилась синтетика, проданный пут 125000 страйка. Рынок уходил еще ниже, планировал повторить операцию, если уйдет ниже 122500, но не ушло.

--[[
параметры:
Procent - процент зигзага
--]]
Settings={
Name="ZIGZAGPROF",
Procent=1,
line=
{
{
Name = "cur1",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 0)
},
{
Name = "cur2",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 255)
}
}
}
function Init()
y1 = nil
y2 = nil
x1 = 1
x2 = 1
return 1
end
function OnCalculate(index)
de = Settings.Procent
delt = 0.01
vl = C(index)
if index == 1 then
y1 = vl
y2 = vl
else
if C(index) > y1*(1+de/100) and y1 < y2 then
x2 = x1
y2 = y1
x1 = index
y1 = C(index)
end
if C(index) > y1 and C(index) > y2 then
x1 = index
y1 = C(index)
end
if C(index) < y1*(1-de/100) and y1 > y2 then
x2 = x1
y2 = y1
x1 = index
y1 = C(index)
end
if C(index) < y1 and C(index) < y2 then
x1 = index
y1 = C(index)
end
end
if x1 ~= index then
curfrom = x1
curto = index
else
curfrom = x2
curto = x1
end
--[[
if curto ~= curfrom and curfrom ~= nil and curto ~= nil then
if C(curto) ~= nil and C(curfrom) ~= nil then
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, index do
curv = i*k + C(curto) - curto*k
SetValue(i, 1, curv)
end
end
end
--]]
lev = nil
if x1 ~= x2 then
k = (C(x1)- C(x2))/(x1- x2)
maxd = 0
for i = x2, x1 do
lev = i*k + C(x1) - x1*k
if C(x2) > C(x1) and lev <= H(i)
then
if maxd < H(i) - lev then
maxd = H(i) - lev
end
--maxd = 0.5
end
if C(x2) < C(x1) and lev >= L(i)
then
if maxd > L(i) - lev then
maxd = L(i) - lev
end
--maxd = -0.5
end
end
lev = nil
--[[if x1 < index
and
(
C(x2) > C(x1) and C(x1) < C(index)
or
C(x2) < C(x1) and C(x1) > C(index)
)
then --]]
lev =
index*k + C(x1) - x1*k +
maxd
--end
--[[
map = 10
lev = 0
if index-map+1 > 0 then
for i = index-map+1, index do
lev = lev + C(i)
end
lev = lev/map
ma = lev
end
map = 30
lev2 = 0
if index-map+1 > 0 then
for i = index-map+1, index do
lev2 = lev2 + C(i)
end
lev2 = lev2/map
ma2 = lev2
end
if
C(x2) > C(x1) and C(x1) < C(index) and C(index) > lev and C(index) - C(x1) > C(index)*delt
or
C(x2) > C(x1) and C(x1) < C(index) and C(index) > lev2
then
lev = C(x1)--*(1-delt)
prev = lev
else
if
C(x2) < C(x1) and C(x1) > C(index) and C(index) < lev and C(x1) - C(index) > C(index)*delt
or
C(x2) < C(x1) and C(x1) > C(index) and C(index) < lev2
then
lev = C(x1)--*(1+delt)
prev = lev
else
lev = lev2
end
end
if
C(x1) > C(x2) and ( lev < C(index) or prev == C(x2) )
then
lev = C(x2)--*(1+delt)
prev = lev
end
if
C(x1) < C(x2) and ( lev > C(index) or prev == C(x2) )
then
lev = C(x2)--*(1-delt)
prev = lev
end
if C(x1) < C(x2) and ( lev < C(index) or prev == C(x1) )
then
lev = C(x1)
prev = lev
end
if C(x1) > C(x2) and ( lev > C(index) or prev == C(x1) )
then
lev = C(x1)
prev = lev
end
--]]
end
return lev
endпривет!
у меня в квике стояла камарилла аж с 2014 года, когда вы выложили здесь этот индикатор.
квик обновился до 8 и камарилла пропала.
это не исправить?
-- Camarilla.lua
Settings={
Name = "Camarilla",
period = 'D',
line =
{
{Name = "S5", Color = RGB(255, 0, 0), Type = 1, Width = 2},
{Name = "S4", Color = RGB(255, 165, 0), Type = 1, Width = 2},
{Name = "S3", Color = RGB(255, 255, 0), Type = 1, Width = 2},
{Name = "PP", Color = RGB(0, 255, 0), Type = 1, Width = 2},
{Name = "R3", Color = RGB(0, 191, 255), Type = 1, Width = 2},
{Name = "R4", Color = RGB(0, 0, 255), Type = 1, Width = 2},
{Name = "R5", Color = RGB(139, 0, 255), Type = 1, Width = 2},
}
}
local math_floor = math.floor
local levels = 0
local ydH, ydL, ydC, ydO = {},{},{},{}
local PP, R3, R4, R5 = 0,0,0,0
local S3, S4, S5 = 0,0,0
local delta = 0
local cl = 0
local predThisDay=0
local function dTs(t) return 100*(100*t.year+t.month)+t.day; end
local OldDay = '' -- для выделения начала торгового дня
function Init ()
local t=getDataSourceInfo()
local tt = t.interval
if tt == -3 then
message('Месячный график не обрабатывается.',1)
return
end
return 7
end
function OnCalculate (index)
local time tt=T(index); ---время из свечи
--local ThisDay=dTs(tt) -- дата в формате yyyyMMdd
local tDay=dTs(tt) -- дата в формате yyyyMMdd
local ThisDay = tDay
if Settings.period == 'W' then
ThisDay=tt.week_day -- номер недели
end
if index == 1 then
--message('First ThisDay = '..tostring(ThisDay),1)
local t=getDataSourceInfo()
--7.2.5 Функция предназначена для получения информации об источнике данных для индикатора.
local scale = getSecurityInfo(t.class_code, t.sec_code).scale -- NUMBER, Количество значащих цифр после запятой
mul = 10^scale -- возведение в степень
local tt = t.interval
if tt == -3 then tt = 'месяц'
elseif tt == -2 then tt = 'неделя'
elseif tt == -1 then tt = 'день'
else
tt = tt..' мин.'
end
--message(t.sec_code..'('..t.class_code..'), цифр после запятой: '..scale..', mul = '..mul..', дата = '..ThisDay,1)
levels = levels + 1
if ThisDay ~= OldDay then
OldDay = ThisDay
end
predThisDay = ThisDay
--
delta = H(index) - L(index)
cl = C(index)
R5 = (H(index) / L(index))*cl
calcLevels(index)
local per = 'daily'
if Settings.period == 'W' then
per = 'weekly'
end
message('Camarilla '..per..', Т = '..tt..', © xsharp.ru 20.06.2015', 1)
return
end
if Settings.period == 'W' then
if ThisDay < OldDay then -- для неделек
OldDay = OldDay + 1
if OldDay ~= ThisDay then
OldDay = ThisDay
end
levels = levels + 1
delta = ydH[levels-1] - ydL[levels-1]
cl = ydC[levels-1]
R5 = (ydH[levels-1] / ydL[levels-1])*cl
calcLevels(index)
--if index<120 then
--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
--end
predThisDay = ThisDay
else
if ThisDay ~=predThisDay then
--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
predThisDay = ThisDay
OldDay = OldDay + 1
end
ThisDayF(index)
end
elseif Settings.period == 'D' then
if ThisDay ~= OldDay then -- для дневок
OldDay = OldDay + 1
if OldDay ~= ThisDay then
OldDay = ThisDay
end
levels = levels + 1
delta = ydH[levels-1] - ydL[levels-1]
cl = ydC[levels-1]
R5 = (ydH[levels-1] / ydL[levels-1])*cl
calcLevels(index)
--if index<120 then
--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
--end
predThisDay = ThisDay
else
if ThisDay ~=predThisDay then
--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
predThisDay = ThisDay
OldDay = OldDay + 1
end
ThisDayF(index)
end
elseif Settings.period == 'H4' then
if ThisDay ~= OldDay then -- для дневок
OldDay = OldDay + 1
if OldDay ~= ThisDay then
OldDay = ThisDay
end
levels = levels + 1
delta = ydH[levels-1] - ydL[levels-1]
cl = ydC[levels-1]
R5 = (ydH[levels-1] / ydL[levels-1])*cl
calcLevels(index)
--if index<120 then
--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
--end
predThisDay = ThisDay
else
if ThisDay ~=predThisDay then
--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
predThisDay = ThisDay
OldDay = OldDay + 1
end
ThisDayF(index)
end
end
return S5, S4, S3, cl, R3, R4, R5
end
function round(value)
return math_floor(value*mul + 0.5) / mul
end
function ThisDayF(index)
ydC[levels] = C(index)
if H(index) > ydH[levels] then
ydH[levels] = H(index)
end
if L(index) < ydL[levels] then
ydL[levels] = L(index)
end
end
function calcLevels(index)
ydO[levels] = O(index)
ydH[levels] = H(index)
ydL[levels] = L(index)
ydC[levels] = C(index)
--
R3 = cl + delta * 1.1/4
R4 = cl + delta * 1.1/2
--
S3 = cl - delta * 1.1/4
S4 = cl - delta * 1.1/2
S5 = cl - (R5-cl)
--
R5 = round(R5)
R4 = round(R4)
R3 = round(R3)
S3 = round(S3)
S4 = round(S4)
S5 = round(S5)
end
