В погоне за рынком — обложка TLAP

В погоне за рынком

Можно ли заработать после сильного движения вверх?

Перри Дж. Кауфман

Как и большинство трейдеров, я испытываю досаду, наблюдая, как акции подскакивают на 10% или даже 15%, когда у меня нет позиции. Значит ли это, что цены продолжат расти? Или это уже вершина и пора продавать?

Зависит ли ответ от величины движения? А от цены акции?

По моему опыту, акции дешевле $10 могут быть необычайно волатильными, поэтому я буду рассматривать их отдельно от акций дороже $10.

Чтобы найти ответ, я хочу проанализировать большое количество акций. Но я также понимаю, что усреднение по большой выборке сглаживает результаты, поэтому рассмотрю и отдельные бумаги, чтобы проверить, насколько они соответствуют общей закономерности.

ОБЩАЯ КАРТИНА

Используя собственный список из 400 акций, за которыми я слежу для торговли, я написал программу, собравшую данные о движениях цены закрытия от 5% до 30% с шагом 5%. Таблица значений приведена на рисунке 1, а график — на рисунке 2.

Категория

> 0,05

> 0,10

> 0,15

> 0,20

> 0,25

> 0,30

Дороже $10

4632

878

289

118

61

41

Дешевле $10

924

171

65

27

12

6

РИСУНОК 1. СКОЛЬКО РАЗ ЦЕНЫ АКЦИЙ ЗАКРЫВАЛИСЬ РОСТОМ. На основе базы из 400 акций, разделённых на две категории — дешевле и дороже $10, — подсчитано, сколько раз цена закрытия росла более чем на 5%, 10%, 15%, 20%, 25% и 30%.

Рисунок 2. Количество случаев роста выше порога

РИСУНОК 2. СКОЛЬКО РАЗ ЦЕНЫ АКЦИЙ ЗАКРЫВАЛИСЬ РОСТОМ. Те же данные, что и в таблице на рисунке 1, представлены графически. Программа подсчитала количество случаев, когда цена закрытия росла на 5–30% с шагом 5%. Акции дороже $10 рассматривались отдельно от акций дешевле $10, поскольку недорогие бумаги более волатильны и сложнее в торговле.

ЧТО ПРОИСХОДИТ ПОСЛЕ СИЛЬНОГО ДВИЖЕНИЯ?

Сначала рассмотрим акции дороже $10. На рисунке 3 показана их доходность в следующие 10 дней. Самые сильные скачки — на 25% и 30% — дают наиболее заметную картину. На следующий день после скачка (день 1) доходность составляет 2% и около 0,75%. По сравнению с первоначальным движением это немного. С другой стороны, значительного отката тоже нет — лишь неопределённость.

Через 10 дней цены большинства акций остаются примерно на уровне экстремального закрытия или немного ниже него. Наибольшую возможность, по-видимому, даёт продажа при возврате цены к максимумам. Покупка на минимумах не приносит сопоставимой доходности — за исключением случаев первоначального скачка на 30%.

Теперь рассмотрим акции дешевле $10 (рисунок 4). В выборке из шести случаев роста на 30% наблюдалось одно крупное последующее движение, но после сильного подъёма большинство акций менялись незначительно. Недорогие бумаги обычно более волатильны, однако после большого скачка дальнейшее движение свыше 5% встречается редко.

Рисунок 3. Акции дороже 10 долларов

РИСУНОК 3. 10 ДНЕЙ ПОСЛЕ СИЛЬНОГО ДВИЖЕНИЯ ВВЕРХ (АКЦИИ ДОРОЖЕ $10). Что обычно происходит с ценой акции дороже $10 после сильного скачка вверх? Здесь показана доходность за следующие 10 дней. На следующий день после экстремального движения (день 1) прирост составляет 2% и около 0,75% — немного по сравнению с первоначальным скачком.

Рисунок 4. Акции дешевле 10 долларов

РИСУНОК 4. 10 ДНЕЙ ПОСЛЕ СИЛЬНОГО ДВИЖЕНИЯ ВВЕРХ (АКЦИИ ДЕШЕВЛЕ $10). Что обычно происходит с ценой акции дешевле $10 после сильного скачка вверх? Здесь показана доходность за следующие 10 дней. После крупного роста цены большинства акций менялись незначительно.

АНАЛИЗ БОЛЬШИХ МАССИВОВ ДАННЫХ НЕ ВСЕГДА ВЫЯВЛЯЕТ ВОЗМОЖНОСТИ

Проблема усреднения по большому числу акций в том, что оно может скрывать торговые возможности в отдельных бумагах. Ведут ли себя Nvidia или Tesla так же, как показывает среднее значение?

Применив ту же логику в программе TradeStation (см. врезку «Анализ скачков цены на исторических данных в EasyLanguage») к одной акции за раз, можно проверить, соответствуют ли отдельные бумаги среднему результату или дают больше возможностей.

Я выбрал несколько потенциально интересных акций. На рисунке 5 показано число резких скачков цены закрытия. У всех этих бумаг были скачки более 10%, у некоторых — более 15%. DJTWW является исключением.

Кол-во крупных движений

Диапазон роста

>5%

>10%

>15%

>20%

>25%

AAPL

11

1

0

0

0

AMZN

17

1

1

0

0

BAC

20

1

0

0

0

COIN

20

4

1

0

0

CRWD

4

1

0

0

0

DJTWW

23

8

7

1

2

LLY

8

2

0

0

0

NVDA

52

5

1

0

0

PLTR

23

5

0

2

0

РИСУНОК 5. ЧИСЛО КРУПНЫХ ДВИЖЕНИЙ ПО ДИАПАЗОНАМ РОСТА (ОТДЕЛЬНЫЕ АКЦИИ). На рисунках 1–4 рассматривалась база из 400 акций и число движений на 5–30%. Могут ли отдельные бумаги давать больше возможностей или в основном соответствуют ранее полученным средним значениям? Здесь показано число экстремальных закрытий по выбранным акциям. У всех были скачки более 10%, у некоторых — более 15%.

МОЖНО ЛИ ЗАРАБОТАТЬ, ВОЙДЯ ПОСЛЕ СКАЧКА?

Это главный вопрос. Следует ли входить по цене закрытия дня сильного движения, подождать более выгодной возможности или вообще отказаться от сделки? На рисунках 6 и 7 показаны результаты следующих пяти дней для акций, открывшихся соответственно на 5% и 10% выше. Были и акции, открывшиеся выше более чем на 15%, но таких случаев слишком мало, поэтому я их не показываю. При желании результаты можно получить, запустив программу из врезки.

Сначала рассмотрим движение после скачка на 5%. Рисунок 6 показывает, что в среднем позиция выходит в прибыль только на пятый день. Некоторые акции, например COIN, хорошо растут сразу, но большинство остаются в убытке следующие четыре дня.

Если же акция открывается на 10% выше, результаты лучше. Возможно, роста на 5% недостаточно, чтобы считать событие особенным, тогда как скачок на 10% встречается реже и явно указывает на неожиданное событие. На рисунке 7 прибыль наблюдается в дни 1, 3, 4 и 5. Убыток показала только одна акция — Bank of America (BAC).

Доходность после роста на 5% или более

День после скачка

1

2

3

4

5

AAPL

-1,38%

-1,16%

-2,06%

-3,58%

2,40%

AMZN

-0,13%

-0,66%

0,22%

-0,43%

6,72%

BAC

-1,15%

-2,76%

-1,32%

-1,61%

5,10%

COIN

1,06%

2,22%

5,14%

4,91%

12,89%

CRWD

-1,49%

-2,42%

-2,56%

-2,63%

3,03%

DJTWW

3,42%

4,40%

0,96%

3,14%

15,09%

LLY

-1,68%

-1,97%

-0,44%

0,52%

6,92%

NVDA

-0,68%

0,04%

-0,09%

-1,05%

5,86%

PLTR

-2,96%

-3,57%

-2,42%

-2,52%

5,68%

Среднее значение

-0,55%

-0,65%

-0,29%

-0,36%

7,08%

РИСУНОК 6. ДОХОДНОСТЬ ЗА ПЯТЬ ДНЕЙ ПОСЛЕ СКАЧКА ЦЕНЫ НА 5%. Анализ отдельных акций после скачка на 5% показывает, что в среднем прибыль появляется лишь на пятый день. Некоторые бумаги показали хорошие результаты раньше, но большинство оставались в убытке следующие четыре дня.

Доходность после роста на 10% или более

День после скачка

1

2

3

4

5

AAPL

-0,20%

-5,45%

-3,88%

-5,26%

3,01%

AMZN

-2,37%

1,10%

2,61%

5,56%

11,69%

BAC

-1,55%

-5,12%

-11,17%

-10,59%

-4,91%

COIN

-0,59%

0,45%

1,38%

1,92%

8,86%

CRWD

2,99%

1,13%

3,26%

5,14%

10,99%

DJTWW

-1,17%

-9,70%

-2,21%

8,77%

23,73%

LLY

2,07%

3,66%

2,64%

3,89%

10,81%

NVDA

6,69%

8,00%

8,31%

7,26%

13,58%

PLTR

0,08%

-1,36%

0,78%

5,04%

14,77%

Среднее значение

0,66%

-0,81%

0,19%

2,41%

10,28%

РИСУНОК 7. ДОХОДНОСТЬ ЗА ПЯТЬ ДНЕЙ ПОСЛЕ СКАЧКА ЦЕНЫ НА 10%. Для сравнения с рисунком 6 здесь показана доходность за пять дней после скачка на 10%. Результаты лучше — возможно, потому, что такие скачки встречаются реже, чем рост на 5%. В этом исследовании прибыль наблюдалась в дни 1, 3, 4 и 5. Убыток показала только одна акция — Bank of America (BAC).

ИТОГИ

В целом после сильного движения цены ведут себя крайне неустойчиво. Тем не менее отдельные акции всё ещё дают возможности — но только если цена закрытия выросла на 10% или больше. Входить следует на закрытии, хотя результаты первого дня неоднозначны. Наибольшая прибыль, по-видимому, появляется на четвёртый и пятый дни, когда рынок уже успевает совершить несколько хаотичных колебаний.

Во врезке «Анализ скачков цены на исторических данных в EasyLanguage» приведён код, создающий таблицы отдельно для каждой акции. Вы можете проверить его на бумагах, которыми торгуете.

Перри Дж. Кауфман — трейдер и финансовый инженер. Он автор многих книг по трейдингу и анализу рынков, включая шестое издание книги «Trading Systems and Methods» (2020; первое издание 1978 года стало основополагающей работой в области технического анализа), а также «Kaufman Constructs Trading Systems» (2020) и «Learn To Trade» (2022). Вопросы и комментарии можно оставить на сайте www.kaufmansignals.com.

Код из статьи доступен в разделе Article Code на сайте Traders.com.

ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА

Kaufman, Perry J. (2022). Learn To Trade. Amazon.

Kaufman, Perry J. (2020). Trading Systems and Methods, 6-е изд. Wiley.

Kaufman, Perry J. (2020). Kaufman Constructs Trading Systems. Amazon.

АНАЛИЗ СКАЧКОВ ЦЕНЫ НА ИСТОРИЧЕСКИХ ДАННЫХ В EASYLANGUAGE

Эта программа для TradeStation собирает данные о скачках цены закрытия от 5% до 30% с шагом 5% и формирует таблицу отдельно для каждой акции.

// PJK В погоне за рынком
// Авторское право 2024 г., П. Дж. Кауфман. Все права защищены.
// Накопление движений свыше 5% и доходностей за следующие 10 дней
// Отдельный анализ акций дешевле и дороже $10
vars: skiprecords(0), skipped(0), returns(0), ix(0), iy(0), lastincrement(0);
arrays:increments[6](0), events[6](0), totalreturns[6](0), avgreturn[6](0), forecast5[5](0), forecast10[5](0), forecast15[5](0), forecast20[5](0),
forecast25[5](0), forecast30[5](0), avgforecast[5](0);
once begin
increments[1] = 0.05; increments[2] = 0.10; increments[3] = 0.15;
increments[4] = 0.20; increments[5] = 0.25; increments[6] = 0.30;
end;
returns = close/close[1] - 1;
if returns > increments[1] then begin
if skiprecords > 0 then
skiprecords = skiprecords - 1;
if skiprecords = 0 then begin
// вернуться на 5 дней назад
for iy = 1 to 5 begin
ix = 5 - iy;
if lastincrement = 1 then begin
forecast5[iy] = forecast5[iy] + close[ix]/close[5] - 1;
end
else if lastincrement = 2 then begin
forecast10[iy] = forecast10[iy] + close[ix]/close[5] - 1;
end
else if lastincrement = 3 then begin
forecast15[iy] = forecast15[iy] + close[ix]/close[5] - 1;
end
else if lastincrement = 4 then begin
forecast20[iy] = forecast20[iy] + close[ix]/close[5] - 1;
end
else if lastincrement = 5 then begin
forecast25[iy] = forecast25[iy] + close[ix]/close[5] - 1;
end
else if lastincrement = 6 then begin
forecast30[iy] = forecast30[iy] + close[ix]/close[5] - 1;
end;
end;
end;
if skiprecords <= 0 then begin
// найти нужный диапазон
lastincrement = 0;
for ix = 2 to 6 begin
// должен быть предыдущий диапазон
if returns < increments[ix] and returns > increments[ix-1] then begin
events[ix-1] = events[ix-1] + 1;
totalreturns[ix-1] = totalreturns[ix-1] + returns;
skiprecords = 5;
lastincrement = ix - 1;
end;
end;
if lastincrement = 0 then lastincrement = 6;
end
// пропускаем 10 записей после нахождения точки входа
else begin
skiprecords = skiprecords - 1;
end;
end;
if lastbaronchart then begin
print(file("c:\tradestation\ChasingTheMarket.csv"),"Increments,",
increments[1]:5:2, ",", increments[2]:5:2, ",", increments[3]:5:2, ",",
increments[4]:5:2, ",", increments[5]:5:2, ",", increments[6]:5:2);
print(file("c:\tradestation\ChasingTheMarket.csv"),"Occurences,",
events[1]:5:2, ",", events[2]:5:2, ",", events[3]:5:2, ",", events[4]:5:2, ",", events[5]:5:2, ",", events[6]:5:2);
for ix = 1 to 6 begin
avgreturn[ix] = 0;
if events[ix] <> 0 then avgreturn[ix] = returns[ix]/ events[ix];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Avg Returns,",
avgreturn[1]:5:4, ",", avgreturn[2]:5:4, ",",
avgreturn[3]:5:4, ",", avgreturn[4]:5:4, ",",
avgreturn[5]:5:4, ",", avgreturn[6]:5:4);
print(file("c:\tradestation\ChasingTheMarket.csv")," ");
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast,1,2,3,4,5");
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[ix] <> 0 then avgforecast[ix] = forecast5[ix]/ events[ix];
end;
// print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 5-10,",
// avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",",
// avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",",
// avgforecast[5]:5:4);
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[1] <> 0 then avgforecast[ix] = forecast5[ix]/events[1];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 5-10,",
avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",", avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",", avgforecast[5]:5:4);
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[2] <> 0 then avgforecast[ix] = forecast10[ix]/events[2];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 10-15,",
avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",", avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",", avgforecast[5]:5:4);
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[3] <> 0 then avgforecast[ix] = forecast15[ix]/events[3];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 15-20,",
avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",", avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",", avgforecast[5]:5:4);
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[4] <> 0 then avgforecast[ix] = forecast20[ix]/events[4];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 20-25,",
avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",", avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",", avgforecast[5]:5:4);
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[5] <> 0 then avgforecast[ix] = forecast25[ix]/events[5];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 25-30,",
avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",", avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",", avgforecast[5]:5:4);
for ix = 1 to 5 begin
avgforecast[ix] = 0;
if events[6] <> 0 then avgforecast[ix] = forecast30[ix]/events[6];
end;
print(file("c:\tradestation\ChasingTheMarket.csv"),"Forecast 30+,",
avgforecast[1]:5:4, ",", avgforecast[2]:5:4, ",", avgforecast[3]:5:4, ",", avgforecast[4]:5:4, ",", avgforecast[5]:5:4);
end;

Перри Дж. Кауфман

Переведено для TLAP