Избранное трейдера klimvv
Обычно я не принимаю на веру все, что говорят в инвестициях и стараюсь перепроверять утверждения. На конференции прошедшей в Питере 25 июня было обсуждено много торговых идей, поэтому в этой части разберём зарубежный портфель Василия Олейника, который он формировал на текущий откат. Вася говорит что он растёт у него в 5 раз быстрее чем рынок, а вот падает со скоростью рынка. Ну ок. Меня как человека который 6 лет проработал в хедж фонде квантом и копал неэффективности на рынке (в том числе и такие) подобное заявление вызвало определённых скептицизм ибо в долгосрочное перспективе акции обладающие подобными характеристиками тяжело найти (ну грааль же). Но может быть на коротких периодах такое возможно?
Чтобы проверить все это с точки зрения статистики нужна небольшая справка из финансовой математики и в частности из модели CAPM. Данная модель связывает актив (или портфель) с рынком через линейное уравнение, в частности через коэффициент бета. Бета = 1, движемся со скоростью рынка. Бета>1 движемся быстрее рынка. Бета<1 движемся медленнее рынка. Естественно разные акции ещё и могут реагировать с разной степенью на рост/падение рынка. Для этого и создали показатели: бычью и медвежью бету. Идеальные активы — те у которых бычья бета>>1, а медвежья << 1 (но такие на долгосрочном периоде тяжело найти, ибо рынок эффективный). См. поясняющий рисунок.
В течение апреля домашние хозяйства снизили запасы наличной национальной валюты на 305,9 млрд рублей, в то время как в марте отток составил 77 млрд рублей.
Впервые с февраля 2022 года отрицательные операции были зафиксированы и с иностранной наличной валютой (-5,2 млрд рублей).
'========= Перемещение заявки FUNC MORDER(FTRID,FON,FONQ,FONP) NEW_GLOBAL("TRANS_PARAMS", "") NEW_GLOBAL("TRANS_RESULT", "") TRANS_PARAMS = "" TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID",FTRID) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "MOVE_ORDERS") TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "MODE",0) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", "SPBFUT") TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "FIRST_ORDER_NUMBER",FON) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "FIRST_ORDER_NEW_QUANTITY",FONQ) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "FIRST_ORDER_NEW_PRICE",FONP) TRANS_RESULT = SEND_TRANSACTION (300, TRANS_PARAMS) RESULT=GET_VALUE(TRANS_RESULT, "DESCRIPTION") MESSAGE (RESULT,1) END FUNC '========= Операция перестановки IF MPRICE < LOW MORDER(MTRANS_ID,MNUMBER,MBALANCE,LOW+STEP) END IF '====================================== 'MTRANS_ID - номер заявки на бирже 'MNUMBER - номер заявки в таблицах 'MBALANCE - объем 'LOW - минимум свечи 'STEP - отступ для лимитки 'MPRICE - последняя цена
protected override void Execute() { var d1 = (Close >> 1) - (Close >> 2); var d2 = (Close >> 2) - (Close >> 3); var d3 = (Close >> 3) - (Close >> 4); var d4 = (Close >> 4) - (Close >> 5); for (int i = 5; i < Bars.Count-2; i++) { double A = d1[i]*d4[i] - d2[i]*d3[i]; double B = d2[i]*d2[i] - d1[i]*d3[i]; double id = A*d1[i] + B*d2[i]; int posDir = (! IsLastPositionActive) ? 0 : LastPosition.PositionType == PositionType.Long ? 1 : -1; if (id >= 0 && posDir != 1) { if (posDir == -1) ExitAtClose (i, LastPosition); BuyAtClose (i); } else if (id < 0 && posDir != -1) { if (posDir == 1) ExitAtClose (i, LastPosition); ShortAtClose (i); } } // for (int i } // Execute()даёт результаты на минутках на 68 днях от 10:00 до 18:44 для сделок без комиссии и проскальзывания
Все это работает на коротком таймфрейме (1 min и ниже).
Любой резидент СЛ за 5 мин в Excel может проверить, что этот индикатор работает в плюс на любом активе. Более того, если ему лично претит Excel, он может проверить тот же факт в C#, Python, R, Matlab etc. В любом случае, много времени такой тест не занимает.
Далее кумулятивные эквити на минутках за 2020 год с данных мосбиржи без учета издержек.if(sys==«id»)
{
h1=cls[n-1]-cls[n-2]
h2=cls[n-2]-cls[n-3]
h3=cls[n-3]-cls[n-4]
h4=cls[n-4]-cls[n-5]
i=h1*(h1*h4-h2*h3) + h2*(h2*h2-h1*h3)
if(i>=0) inl=T
if(i<0) outl=T
}