Избранное трейдера besttrader
Нас часто спрашивают, как самостоятельно создать робота? И сложно ли это?
– Нет, не сложно, если у вас есть опыт и наработки. Но если вы начинающий алготрейдер, то перед вами встанет сразу несколько непростых задач.
Для начала вы должны определиться какую именно торговую стратегию будете автоматизировать.
Затем нужно четко формализовать эту стратегию: описать строгими условиями все входы и выходы из позиции.
Теперь нужно определиться под какой торговый терминал будем разрабатывать робота.
Изучаем функции алготрейдинга (выставление и снятие заявок, получение текущих данных из терминала, механизм взаимодействия скрипта и терминала).
Изучаем как устроена структура данных (таблиц) на сервере Мосбиржи, чтобы знать откуда что брать.
Важно иметь хотя бы базовое понимание о программировании: что такое переменные, условия, операции сравнения, циклы, функции, события, работа с файлами и т.п.
Settings= { Name = "Zigzag2", -- название индикатора delta=2, -- параметр индикатора line= { { Name = "zigzagline2", Type =TYPE_LINE, Width = 2, Color = RGB(120,90, 140) } } } function Init() vMin = 0 vMax = 0 vMinindex = 0 vMaxindex = 0 voldMinindex = 0 voldMaxindex = 0 return 1 end function OnCalculate(index) local printz = 0 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 else if vMin > C(index) then vMin = C(index) vMinindex = index vFrom = voldMaxindex vTo = index printz = 0 else vFrom = vMinindex vTo = index printz = 0 end 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 else if vMax < C(index) then vMax = C(index) vMaxindex = index vFrom = voldMinindex vTo = index printz = 0 else vFrom = vMaxindex vTo = index printz = 0 end 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 end end end return ve end
Settings={ Name="STATDIV3", period=50, line= { { Name="curve", Color=RGB(0,0,255), Type=TYPE_LINE, Width=1 }, { Name="line", Color=RGB(255,0,0), Type=TYPE_LINE, Width=1 }, { Name="MA", Color=RGB(0,0,255), Type=TYPE_LINE, Width=1 }, { Name="MA2", Color=RGB(0,128,128), Type=TYPE_LINE, Width=1 }, { Name="line2", Color=RGB(0,0,255), Type=TYPE_LINE, Width=1 }, { Name="line3", Color=RGB(0,128,128), Type=TYPE_LINE, Width=1 } } } function Init() cache_ind={} cache_ind2={} cache_ind3={} return 2 end function OnCalculate(index) if index < Settings.period then return nil else local sum1=0 local sum2=0 local sum0=0 local sum02=0 local sum03=0 for i=index-Settings.period+1, index do do if C(i) > O(i) then sum1 = sum1 + C(i) - O(i) sum2 = sum2 + C(i) - O(i) else sum2 = sum2 + O(i) - C(i) end end cache_ind[index] = sum1/sum2 if index > Settings.period+12 then --[[ sum0 = 1*cache_ind[index]+ (1)*cache_ind[index-1]+ (1)*cache_ind[index-2]+ (1)*cache_ind[index-3]+ (1)*cache_ind[index-4]+ (1)*cache_ind[index-5]+ (1)*cache_ind[index-6]+ (1)*cache_ind[index-7]+ (1)*cache_ind[index-8]+ (1/2)*cache_ind[index-9]+ (1/3)*cache_ind[index-10]+ (1/4)*cache_ind[index-11]+ (1/5)*cache_ind[index-12] --]] sum0 = 1*cache_ind[index]+ (1/2)*cache_ind[index-1]+ (1/3)*cache_ind[index-2]+ (1/4)*cache_ind[index-3]+ (1/5)*cache_ind[index-4]+ (1/6)*cache_ind[index-5]+ (1/7)*cache_ind[index-6]+ (1/8)*cache_ind[index-7]+ (1/9)*cache_ind[index-8]+ (1/10)*cache_ind[index-9]+ (1/11)*cache_ind[index-10]+ (1/12)*cache_ind[index-11]+ (1/13)*cache_ind[index-12] end --[[ sum0 = sum0/(1+1+1+1+1+1+1+1+1+1/2+1/3+1/4+1/5) --]] sum0 = sum0/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13) cache_ind2[index] = sum0 if index > Settings.period+50 then sum02 = 1*cache_ind2[index]+ (1)*cache_ind2[index-1]+ (1)*cache_ind2[index-2]+ (1)*cache_ind2[index-3]+ (1)*cache_ind2[index-4]+ (1)*cache_ind2[index-5]+ (1)*cache_ind2[index-6]+ (1)*cache_ind2[index-7]+ (1/2)*cache_ind2[index-8]+ (1/3)*cache_ind2[index-9]+ (1/4)*cache_ind2[index-10]+ (1/5)*cache_ind2[index-11]+ (1/6)*cache_ind2[index-12] --[[ sum02 = 1*cache_ind2[index]+ (1/2)*cache_ind2[index-1]+ (1/3)*cache_ind2[index-2]+ (1/4)*cache_ind2[index-3]+ (1/5)*cache_ind2[index-4]+ (1/6)*cache_ind2[index-5]+ (1/7)*cache_ind2[index-6]+ (1/8)*cache_ind2[index-7]+ (1/9)*cache_ind2[index-8]+ (1/10)*cache_ind2[index-9]+ (1/11)*cache_ind2[index-10]+ (1/12)*cache_ind2[index-11]+ (1/13)*cache_ind2[index-12] --]] end sum02 = sum02/(1+1+1+1+1+1+1+1+1/2+1/3+1/4+1/5+1/6) --[[ sum02 = sum02/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13) --]] cache_ind3[index] = sum0 - sum02 if index > Settings.period+50 then sum03 = 1*cache_ind3[index]+ (1/2)*cache_ind3[index-1]+ (1/3)*cache_ind3[index-2]+ (1/4)*cache_ind3[index-3]+ (1/5)*cache_ind3[index-4]+ (1/6)*cache_ind3[index-5]+ (1/7)*cache_ind3[index-6]+ (1/8)*cache_ind3[index-7]+ (1/9)*cache_ind3[index-8]+ (1/10)*cache_ind3[index-9]+ (1/11)*cache_ind3[index-10]+ (1/12)*cache_ind3[index-11]+ (1/13)*cache_ind3[index-12] end sum03 = sum03/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13) end if sum1/sum2 > 0.5 and sum03 > 0 then sum1 = sum03 else if sum1/sum2 < 0.5 and sum03 < 0 then sum1 = sum03 else sum1 = 0 end end return sum1, 0 end end
Названия строк |
Приветствую, коллеги.
Пока сберушка наш лег отдохнуть), давайте посмотрим, а нельзя ли нам извлечь из этого какую-то выгоду. Представляю на ваш суд небольшую внутридневную стратегию торговли в боковике.
Казалось бы, все просто – покупай от нижней границы и продавай от верхней, и выгода у тебя в кармане. Но тот, кто реально торгует, прекрасно знает, как психологически сложно, во-первых, дождаться этой границы, поскольку цена может развернуться либо не дойдя до нее, либо пробив уровень. А во-вторых, войти в сделку, ведь согласитесь, подсознательно мы всегда ожидаем, что, подойдя к границе, цена пробьет ее и, как здесь некоторые выражаются, «выстрелит ракетой»).
Начнем с простого, определим границы боковика и его середину. Для нынешнего сбера – это 201 – нижняя, 209 – верхняя, и 205 – середина. Теперь даем себе установку – продавать выше 207, покупать выше 203.
Сформулируем первое правило:
Внутренний Бар – это отличный сигнал о том, что предыдущий тренд собирается продолжить своё движение, но он так же может использоваться для выявления разворотных точек рынка.
Тем не менее, основным способом торговли по этому сетапу является торговля в направлении предыдущего движения рынка.
Давайте разберёмся с тем, что такое Внутренний Бар, и как он выглядит.
Внутренний Бар – это маленькая зона консолидации рынка. Обычно после такого сетапа следует его прорыв вверх или вниз. Но в этой статье мы разберём прорыв в направлении предыдущего движения рынка.
Если вы торгуете на бирже, то ваши акции учитываются у номинального держателя — депозитарии Мосбиржи (АО НРД), а не в реестре.
Депозитарий передает информацию о владельцах акций в реестр на день закрытия реестра.
На Мосбирже работает режим поставка акций на счёт-депо в Депозитарий на второй рабочий день после совершения сделки.
Поэтому чтобы получить дивиденды, вам надо быть в реестре на 2 рабочих дня раньше «отсечки».
Отсечка Ростела приходится на 13 января, воскресение (обычно кстати она все-таки в рабочий день).
Вам надо чтобы акции поступили на ваш счет-депо уже в пятницу 11 января, т.к. в выходные биржа не работает.
Для этого придется их купить на 2 рабочих дня раньше — 9 января.
Если вы купите акции Ростелекома 10 января, в четверг, то на ваш счет-депо они будут зачислены только в понедельник. К этому моменту закрытие реестра уже произойдет и вы останетесь без дивидендов.