Избранное трейдера Егор Коняхин
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
Хорошая новость. Вчера Минфин разместил ОФЗ на рекордную дневную сумму – на 91,4 млрд.р. Время рекордов: предыдущий максимум состоялся всего 2 недели назад и был скромнее: 27 февраля было размещено ОФЗ а 57 млрд.р. 450-миллиардный план заимствований 1 квартала почти выполнен (сейчас привлечено 382 млрд.р.).
Рост спроса на ОФЗ, во-первых, постепенно снижает кривую доходности. Короткие бумаги уже дают мене 7,5% годовых. А это в перспективе марта-апреля может привести к снижению ключевой ставки до тех же 7,5%. Запас ставки к инфляции есть (по итогам февраля, уровень инфляции – 5,2%), деньги на рынок идут и стимулировать их бОльшими процентами не требуется. Плюсы для широкого облигационного рынка и нынешних держателей российских облигаций в развитии этого сценария очевидны.
По данным Минфина.
Во-вторых, высокий спрос на ОФЗ – это и отражение отработанной схемы. Россия не может и, похоже, уже не хочет занимать деньги на внешнем рынке. И Россия – 6-я экономика мира, причем со смехотворным уровнем долга (внешний и внутренний госдолг всего около 200 млрд.долл.). Отличный заемщик. Иностранные деньги научились пользоваться отечественными долгами. Как бы драматичен не был прошлогодний исход иностранного капитала, он оказался не ужасающим. И в марте, судя по ситуации, процент иностранных покупателей отечественного госдолга вновь приблизится к 30%. А наработанные механизмы покупки рублевых облигаций и, считайте, рублей – это и залог хотя бы временной устойчивости самого рубля. В прошлом году рубли активно продавались, в текущем, несмотря на традиционны отток капитала, покупаются. И вряд ли эта покупка завершена.
--Массив с Тикерами, добавьте нужные тикеры aTickerList = {"MSNG", "GAZP", "LKOH", "SIBN", "GMKN","ROSN", "SBER", "TATN", "NVTK", "IRAO", "RSTI", "SBERP", "PHOR", "SNGS", "TRNFP", "VTBR", "FEES", "MVID", "RASP", "MFON", "AFLT", "MAGN", "ALRS", "MTSS", "MOEX", "RTKM", "MGNT", "NLMK", "SNGSP", "CHMF", "MTLR", "HYDR", "MFON", "RSTI", "PLZL", "BANEP", "POLY" }; --Функция поиска цены function fGetPrice(sTickerName, sNum) --Подключаемся к источнику данных local ds=CreateDataSource("TQBR", sTickerName, INTERVAL_D1); while (Error=="" or Error == nil) and ds:Size() ==0 do sleep(10) end; if Error ~="" and Error ~=nil then message("Error: "..Error, 1) end; local sSize=ds:Size(); local sCurrentPrice=ds:O(sSize); local sLastWeekPrice7=0; local sLastWeekPrice14=0; --Берем цену закрытия свечи неделю назад sLastWeekPrice7=ds:C(sSize-4); --Берем цену закрытия свечи 2 недели назад sLastWeekPrice14=ds:C(sSize-8); --Вычисляем проценты local sPrc7=math.floor((100-((sLastWeekPrice7*100)/sCurrentPrice))*100)/100; local sPrc14=math.floor((100-((sLastWeekPrice14*100)/sCurrentPrice))*100)/100; --Заполняем таблицу значениями SetCell(t_id, sNum, 0, tostring(sTickerName)); SetCell(t_id, sNum, 1, tostring(sCurrentPrice),sCurrentPrice); SetCell(t_id, sNum, 2, tostring(sLastWeekPrice7),sLastWeekPrice7); SetCell(t_id, sNum, 3, tostring(sLastWeekPrice14),sLastWeekPrice14); SetCell(t_id, sNum, 4, tostring(sPrc7),sPrc7); SetCell(t_id, sNum, 5, tostring(sPrc14),sPrc14); --Текущая цена больше цены прошлой недели - раскрашиваем зеленым if sCurrentPrice>sLastWeekPrice7 then fGreen(sNum); end; --Текущая цена меньше цены прошлой недели - раскрашиваем красным if sCurrentPrice<sLastWeekPrice7 then fRed(sNum); end; --Текущая цена больше цены прошлой недели и цена прошлой недели больше цены позапрошлой недели --раскрашиваем желтым if sCurrentPrice>sLastWeekPrice7 and sLastWeekPrice7>sLastWeekPrice14 then fYellow(sNum); end; end; --- Функция создает таблицу function CreateTable() -- Получает доступный id для создания t_id = AllocTable(); -- Добавляет 6 колонок AddColumn(t_id, 0, "Тикер", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 1, "Сегодня", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 2, "Неделя", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 3, "2 Недели", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 4, "Неделя (%)", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 5, "2 Недели (%)", true, QTABLE_INT_TYPE, 15); -- Создаем t = CreateWindow(t_id); -- Даем заголовок SetWindowCaption(t_id, "7 Days"); -- Добавляем строки for k,v in pairs(aTickerList) do InsertRow(t_id, k); end; end; --- Функции раскрашивают ячейки таблицы function fRed(col) SetColor(t_id, col, -1, RGB(255,168,164), RGB(0,0,0), RGB(255,168,164), RGB(0,0,0)); end; function fGreen(col) SetColor(t_id, col, -1, RGB(157,241,163), RGB(0,0,0), RGB(157,241,163), RGB(0,0,0)); end; function fYellow(col) SetColor(t_id, col, -1, RGB(249,247,172), RGB(0,0,0), RGB(249,247,172), RGB(0,0,0)); end; --Основная функция function main() -- Создаем таблицу CreateTable(); --Пробегаемся по массиву тикеров for k,v in pairs(aTickerList) do fGetPrice(v, k); end; end;как выглядит в квике:
Добрый день лудоманы !
Ввиду отсутствия прав публикации в разделе алготрейдинга опубликую пост здесь.
В свое время я разработал и написал программку для парного трейдинга на форекс — математическая идея была правда не моя но я в свое время пришел к этой идее независимо от команды использовавшей этот принцип в своем софте.
Принцип на самом деле классический, который состоит в использовании более быстрого инструмента и более медленного с измерением расхождения и отклонении такового относительно среднего значения. Расхождение более установленного (опытным путем) определенного порога следует принимать как сигнал входа в сделку на отстающем инструменте в ожидании что система придет в равновесии (расхождение нормализуется) выход из сделки осуществляется по расхождению в другую сторону также с установленным опытным путем значением.
Я использовал это на форекс беря «быстрый инструмент» на СМЕ — фьючерс на валюту с котировок Rithmic, а «медленный» спот цену на
Дискуссии о правильных и неправильных методах вычисления дельты опциона. Дошел до темы «Липкая денежность» против «липкого страйка».
Больше всего смущает то, что в работе Блэка и Шолеса, на которую постоянно ссылаются оппоненты, нет вообще никаких упоминаний о «кривой волатильности», волатильность у БШ есть константа. Чем «кривее» кривая IV для конкретного рынка, тем меньше модель БШ подходит для его описания, это вся информация, которую кривая IV в себе содержит.
Спор о том, следует ли учитывать ее наклон при вычислении дельты, подобен спору о количестве чертей, способных уместиться на острие иголки. Мне кажется, правильнее изменить модель БШ, чем стараться подогнать ее неверные результаты под реальные рынки.
Напомню об одном из возможных подходов к такой модификации.
1. Собираем статистику — набор исторических пар {d(Fut),d(ImpVol)};
Где d(Fut) – дневное приращение БА
d(ImpVol) – приращение волатильности опционов на центральном страйке за тот же день.