Избранное трейдера Манул Кот
1. Самая популярная теория Сороса может быть упрощена до трех пунктов:
• Мы пытаемся понять мир, а также изменить его для извлечения выгоды
• Наше действие по осознанию мира, является частью этого мира, частью реальности, которую мы пытаемся понять
• Поэтому, полностью понять окружающий мир – невозможно
2. Это означает то, что никто не может обладать полноценным знанием, что делает все наши действия и решения несовершенными.
3. Наше видение реальности оказывает влияние на наши действия, что меняет реальность, делая наше изначальное знание о ней, неверным.
4. Все это приводит к разрыву между реальностью и нашим представлением о ней. Мир слишком сложен и многогранен, чтобы один человек смог полностью его осознать. Поэтому мы все используем упрощения – теории и обобщения.
5. На финансовых рынках эта разница между реальностью и мнением о ней к разрыву между ценами и фундаментальными факторами, что создает возможности для заработка. Эту теорию хорошо видно на картинке ниже:
«Другой же из учеников Его сказал Ему: Господи! позволь мне прежде пойти и похоронить отца моего. Но Иисус сказал ему: иди за Мною, и предоставь мертвым погребать своих мертвецов» (Мат. 8: 21-22).
Краткое резюме, самая общая модель по игре в «инвестиции». В случае трейдинга картина будет наиболее очевидна, ибо все быстро и на виду, однако покупка «хороших акций», «инвестиционных идей» — по сути та же модель. Прозвучит жестоко (а новичку вообще не очень понятно), но близко к правде.
Пара оговорок. Под «игрой на ничью» понимается согласие на доходность в районе инфляции, может быть на 2-3% выше, но не более.
Также напомним, что индустрия инвестирования живет с того, что различными способами переписывает часть состояния инвесторов на себя.В глобальном масштабе премия индустрии это то, что она изъяла у всех инвесторов планеты Земля. При этом владельцы и работники индустрии могут сами выступать как инвесторы, но давайте не путать роли.
Есть еще две трубы, связывающие «биржу» с «реальным миром». Первую трубу любят переоценивать, это доходность, которая образуется где-то, в туманной дымке реального сектора, от того, что капитал же работает. Но не будем переоценивать – на весь класс долговых активов это околонулевая реальная доходность, на долевые в пределах 5%, на коммодити отрицательная. Вторую трубу недооценивают, оттуда, наоборот, выливается – это налоги и черные лебеди а ля рейдеры, социалисты и т.п. Какая труба сыграет большую роль, зависит от класса активов, лютости конкретного государства и просто от удачи. Можно упростить, и даже считать систему закрытой, без этих труб: в такой модели проще выделить нашу циничную правду.
Тема на самом деле охватывает не только молодых (те самые на пенсию в 25) пенсионеров, а всех, кто планирует перестать работать хотя бы в 65. Но при этом либо не рассчитывает на государственное пенсионное обеспечение, либо оно даже в сладких снах не будет замещать всех необходимых расходов. Таких большинство по всему миру, коэффициент замещения среднего дохода в 40% считается хорошим результатом даже в процветающих странах. У нас же на такой коэффицент могут рассчитывать только люди с белым доходом тысяч до 40 рублей в сегодняшних деньгах. Если вы зарабатываете сегодняшние тысяч 80, то это дай бог будет 30%. А если больше сотни, то там есть потолок пенсионных прав (тысяч 40-45) и нужно что-то делать самому.
Вроде это понимают даже смартлабовцы ;)
Наверное кто-то слышал про правило 4%. Снимаем значит по 4% от портфеля и капитал никогда не кончится. Эта же цифра называется SWR (Safe Withdrawal Rate) — безопасная ставка снятия.
Простите за банальность, работа с данными начинается с их получения из внешнего источника. Мы будем получать их из CSV-файла архива котировок, скачанного с сайта Финам. Для работы с другими источниками вам надо будет немного изменить программу.
Я уже давно не работаю непосредственно с CSV, и храню все данные в БД SQLite. Поначалу я хотел написать программу чтения CSV с нуля, но выяснилось, что я уже подзабыл как это делается, однако нашелся рояль в кустах — моя старая библиотека читающая данные из CSV-файла непосредственно в программу. Ее мы и будем использовать.
Собственно, Python и ориентирован на работу с библиотеками, и не нужно знать что там внутри, важно только уметь с ними работать, а сами программы с использованием библиотек станут очень простыми.
Для начала качаем с Финам историю в формате CSV-файла следующего вида:
<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL> SPFB.Si-12.20,1,04/05/20,10:00:00,76900.0000000,76990.0000000,76900.0000000,76990.0000000,3 SPFB.Si-12.20,1,04/05/20,10:06:00,77695.0000000,77695.0000000,77400.0000000,77400.0000000,8 SPFB.Si-12.20,1,04/05/20,10:08:00,77781.0000000,77781.0000000,77700.0000000,77750.0000000,30 SPFB.Si-12.20,1,04/05/20,10:13:00,78088.0000000,78098.0000000,78088.0000000,78098.0000000,6 SPFB.Si-12.20,1,04/05/20,10:14:00,78100.0000000,78100.0000000,78100.0000000,78100.0000000,1
Settings= { Name = "Zigzag_MNK", -- название индикатора delta=1.0, -- дельта зигзага showperiod=5000,--колич баров за которые строится line= { { Name = "zigzagline2", Type =TYPE_LINE, Width = 2, Color = RGB(255,0, 0) } } } function Init() vMin = 0 vMax = 0 vMinindex = 0 vMaxindex = 0 voldMinindex = 0 voldMaxindex = 0 a1 = 0 a2 = 0 a3 = 0 a4 = 0 cind = 0 v = null vFrom=0 vsl = 0 return 1 end function calcmnk(index, vFrom, a1, a2, a3, a4, cind, vMinindex, vMaxindex) v = null v2 = null showperiod = Settings.showperiod if index-1 > 1 and vFrom > 1 and index > Size()-showperiod then --[[ for i=vFrom, index-1 do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end for i=index, index do a01 = a1+i*C(i) a02 = a2+i a03 = a3+C(i) a04 = a4+i*i end n = index - vFrom + 1 if((n*a04 - a02*a02) ~= 0) then a = (n*a01 - a02*a03)/(n*a04 - a02*a02) b = (a03 - a*a02)/n v = a*index + b end --]] a1 = 0 a2 = 0 a3 = 0 a4 = 0 vto = index if vMinindex < vMaxindex then vto = vMaxindex end if vMinindex > vMaxindex then vto = vMinindex end for i=vFrom, vto do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end n = vto - vFrom + 1 if((n*a4 - a2*a2) ~= 0) then a = (n*a1 - a2*a3)/(n*a4 - a2*a2) b = (a3 - a*a2)/n v = a*index + b end vmindel = 0 for i=vFrom, vto do y = a*i + b if vMinindex < vMaxindex and y - C(i) > vmindel then vmindel = y - C(i) end if vMinindex > vMaxindex and C(i) - y > vmindel then vmindel = C(i) - y end end y = a*index + b if vMinindex < vMaxindex then v2 = y - vmindel end if vMinindex > vMaxindex then v2 = y + vmindel end if vMinindex < vMaxindex and O(index) < v2 and vsl == 0 then vsl = C(vMaxindex) v2 = vsl end if vMinindex > vMaxindex and O(index) > v2 and vsl == 0 then vsl = C(vMinindex) v2 = vsl end if vsl ~= 0 then v2 = vsl end if vMinindex < vMaxindex and O(index) > vsl and vsl ~= 0 then vsl = 0 --v2 = y - vmindel end if vMinindex > vMaxindex and O(index) < vsl and vsl ~= 0 then vsl = 0 --v2 = y + vmindel end --[[ --]] cind = index end return v, v2 end function OnCalculate(index) v = null v2 = null if index < 3 then vMin = C(index) vMax = C(index) vMinindex = index vMaxindex = index voldMinindex = index voldMaxindex = index else --if index > 18000 then if voldMaxindex >= voldMinindex then if C(index) > (1 + Settings.delta/100)*vMin then vMin = C(index) vMax = C(index) vMaxindex = index voldMinindex = vMinindex vFrom = vMinindex vsl = 0 a1 = 0 a2 = 0 a3 = 0 a4 = 0 v, v2 = calcmnk(index, vFrom, a1, a2, a3, a4, cind, vMinindex, vMaxindex) --[[ for i=vFrom, index-1 do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end for i=index, index do a01 = a1+i*C(i) a02 = a2+i a03 = a3+C(i) a04 = a4+i*i end n = index - vFrom + 1 if((n*a04 - a02*a02) ~= 0) then a = (n*a01 - a02*a03)/(n*a04 - a02*a02) b = (a03 - a*a02)/n v = a*index + b end cind = index --]] else if vMin > C(index) then vMin = C(index) vMinindex = index vFrom = voldMaxindex -- else -- vFrom = vMinindex end v, v2 = calcmnk(index, vFrom, a1, a2, a3, a4, cind, vMinindex, vMaxindex) --[[ if cind ~= index then for i=index-1, index-1 do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end end for i=index, index do a01 = a1+i*C(i) a02 = a2+i a03 = a3+C(i) a04 = a4+i*i end n = index - vFrom + 1 if((n*a04 - a02*a02) ~= 0) then a = (n*a01 - a02*a03)/(n*a04 - a02*a02) b = (a03 - a*a02)/n v = a*index + b end cind = index --]] 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 = vMaxindex vsl = 0 a1 = 0 a2 = 0 a3 = 0 a4 = 0 v, v2 = calcmnk(index, vFrom, a1, a2, a3, a4, cind, vMinindex, vMaxindex) --[[ for i=vFrom, index-1 do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end for i=index, index do a01 = a1+i*C(i) a02 = a2+i a03 = a3+C(i) a04 = a4+i*i end n = index - vFrom + 1 if((n*a04 - a02*a02) ~= 0) then a = (n*a01 - a02*a03)/(n*a04 - a02*a02) b = (a03 - a*a02)/n v = a*index + b end cind = index --]] else if vMax < C(index) then vMax = C(index) vMaxindex = index vFrom = voldMinindex -- else -- vFrom = vMaxindex end v, v2 = calcmnk(index, vFrom, a1, a2, a3, a4, cind, vMinindex, vMaxindex) --[[ if cind ~= index then for i=index-1, index-1 do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end end for i=index, index do a01 = a1+i*C(i) a02 = a2+i a03 = a3+C(i) a04 = a4+i*i end n = index - vFrom + 1 if((n*a04 - a02*a02) ~= 0) then a = (n*a01 - a02*a03)/(n*a04 - a02*a02) b = (a03 - a*a02)/n v = a*index + b end cind = index --]] end end end -- end --[[ a1 = 0 a2 = 0 a3 = 0 a4 = 0 for i=vFrom, index do a1 = a1+i*C(i) a2 = a2+i a3 = a3+C(i) a4 = a4+i*i end n = index - vFrom + 1 if((n*a4 - a2*a2) ~= 0) then a = (n*a1 - a2*a3)/(n*a4 - a2*a2) b = (a3 - a*a2)/n v = a*index + b end --]] --[[ for i = vFrom, index do k = (C(index)- C(vFrom))/(index- vFrom); v = i*k + C(index) - index*k SetValue(i, 1, v) end --]] end return v2 end
Надеюсь, что информация, представленная ниже,
будет полезна и позволит
многим упорядочить свои хаотичные мысли.
ТЕОРИЯ ИГР.
Это математический Метод поиска
оптимального алгоритма Вашего поведения,
в условиях конфликта интересов,
с результатом больше или равным «0».
Неопределенность исхода игры -
вот основной мотив для участников и болельщиков.
1. КОМБИНАТОРНЫЕ ИГРЫ.
Признаки. Количество вариантов (комбинаций) огромно, но ограничено.
ПРИМЕРЫ:
ГО — количество комбинаций — 10 в 171 степени,
Шахматы — количество комбинаций — 10 в 120 степени,
Шашки — количество комбинаций — 10 в 20 степени,
Крестики-нолики — количество комбинаций — 49.
РЕШЕНИЕ. Комбинаторика (изучение всех комбинаций и перестановок фигур).
«Компьютеры смогли запомнить все комбинации и стали выигрывать у людей».
2. АЗАРТНЫЕ ИГРЫ (hasard — от фр. случай).
Признаки. Огромное количество случайных факторов.
Исход игры не зависит от действий игрока.