Статьи

Адаптированный перевод[1] статьи интернет-ресурса The Financial Hacker. Исходный материал - “Is “Scalping” Irrational?”. Оценка стратегии скальпинга алгоритмическим трейдером. Сильные и слабые стороны скальпинговой методики. Отступления и комментарии переводчика даны отдельными вставками по тексту.

 

Содержание:

 

Переводы-рерайты статей сайта The Financial Hacker, ранее размещенные на Rusforexclub, смотрите по ссылкам:

Индекс хладнокровия, The Cold Blood Index

Моделирование торговых стратегий. Часть 1 Модели

Моделирование торговых стратегий. Часть 2 Процесс

”17 торговых методов, которые я действительно не понимаю”

 

Изложение от первого лица (от автора переводимого текста)

 

Введение. Определение и этимология

 

Вставка переводчика

 

 

Википедия трактует скальпинг, как “сленговое название стратегии внутридневных спекулятивных операций” на финансовых рынках, состоящей в закрытии сделок при достижении минимальной (в несколько пунктов, пипсов) прибыли. Длительность таких операций обычно не превышает долей секунды, максимум - одной или нескольких секунд.

Английское Scalping обозначает снятие скальпа, срез верхней части. Этимологически родственным словом является наименование широко известного хирургического инструмента - скальпеля (латинское scalpellum - ножичек).

Ключевые условия для проведения успешного скальпинга - низкие комиссионные, небольшой спред по инструменту, его хорошая ликвидность и умеренная волатильность, а также высокая скорость обработки ордеров. Заметное развитие scalping получил в высокочастотной торговле. 

Введению в тему алгоритмов в скальпинге посвящено начало статьи “Основные виды торговых алгоритмов” нашего сайта.

 

Скальпинг и алготрейдинг. Постановка задачи

Клиенты часто спрашивают о стратегиях, которые эффективны на очень коротких временных интервалах[2]. Возможно, некоторые вдохновлены историями на форумах трейдеров из разряда “Я только что заработал 2000 долларов за 5 минут”. Другие слышали о высокочастотном трейдинге: чем выше частота, тем лучше должна быть торговля! 

К нашим разработчикам приставали годами, пока они, наконец, не реализовали тиковые истории и миллисекундные таймфреймы. Совершенно бесполезные функции? Или в краткосрочной алгоритмической торговле действительно заложены ощутимые выгоды? Эксперимент по изучению этого вопроса дал удивительный результат.

Конечно, есть соблазн получить прибыль за считанные минуты [тем более, секунды (примечание переводчика)]. Кроме того, небольшие таймфреймы дают больше баров и сделок, что является значительным преимуществом для создания стратегии. Правда, качество тестирования и обучения зависит от количества данных, а корректных данных о ценах всегда не хватает. 

В целом, алгоритмические трейдеры считают скальпинг занятием бессмысленным и нерациональным.

Приводятся четыре главные причины:

  1. Кратковременные рамки обуславливают высокие торговые издержки - проскальзывание, спред, комиссии.
  2. Малые торговые интервалы продуцируют излишние шумы,  случайности  и артефакты [случайные наводки (примечание переводчика)] на кривой цен, что снижает прибыль и увеличивает риск.
  3. Скальпинг-алгоритмы требуют индивидуальную адаптацию к брокеру или поставщику ценовых данных из-за особенностей потока цен на коротких таймфреймах.
  4. Алгоритмические стратегии имеют обыкновение переставать работать на периодах ниже определенного предела.

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

Я могу подтвердить действенность факторов №№ 3 и 4 на собственном опыте. На отрезках ниже 10 минут, бэктесты с историями цен от разных брокеров существенно отличались. И мне никак не удавалось построить стратегию с устойчиво положительным Walk-Forward Optimization (WFO) на барах менее 30 минут. Но это не значит, что такой стратегии не существует. Может быть, для коротких таймфреймов просто нужны специальные подходы в трейдинге? 

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

 

Торговые издержки

Первую часть опыта выполнить легко - надо взять статистику влияния торговых затрат. Очевидно, более высокие расходы требуют большей прибыли для их компенсации. Сколько сделок вы должны выиграть, чтобы преодолеть торговые издержки в разные отрезки времени? Вот краткий сценарий (на C, для Zorro[3]) для ответа на этот вопрос:

 

1 Скальпингскрипт 1

 

Приведенный скрипт вычисляет минимальный процент выигрыша для

компенсации торговых затрат на разных торговых интервалах. Параметры: барный период 1 минута, полный период бэктеста 1440 мин. (24 часа), комиссия 60 центов за 10 тысяч контрактов (средний показатель forex-сделки), спред - 0,5 пипса. 

Выигрыш или проигрыш равноправны - сделки выигрывают или проигрывают, в среднем, одинаковую сумму. Итог каждой операции разделяется на положительный и отрицательный, в соответствии с коэффициентом WinRate (коэффициент ”Выигрыша”), который рассчитывается следующим образом:

2 Скальпингформула 1

(формула 1)

 

Где: Cost - расходы на сделку, в нашем примере Cost=$0,6; 

Return - результат сделки;

0,5 - спред.

Формула 1 настраивается так, чтобы исполнялась ниже описанная математика.

Выигрышным сделкам отвечает произведение:

WinRate*Return=Cost/2+0,5Return.

Проигрышным - в некотором смысле, “зеркальная” величина:

(1-WinRate)*Return=- Cost/2 + 0,5Return.

Для безубыточной торговли, разница между выигрышами и проигрышами должна покрывать расходы, имеем:

WinRate*Return - (1-WinRate)*Return = Cost.

Конструкция “схлопывается”.

Процент выигрышей усредняется по всем барам и отображается на гистограмме. Продолжительность сделок от 1 минуты до 1 суток (1440 минут). Периодичность варьируется с шагом 1, 5, 30 и 60 минут. Позиция любой длины открывается каждую 101-ую минуту (строка - “Bar +=100” в скрипте).

С такими входными данными скрипт запускается на паре EUR/USD по истории 2015 года. Несколько секунд и скальпинг-гистограмма готова:

 

3 Скальпинггист 1

 

Здесь по оси абсцисс - периоды тестирования от 1 минуты до 1440 минут, по оси ординат - значение коэффициента WinRate в %. Он показывает какой процент сделок должен быть выигрышным на данном баре для покрытия расходов. 

Крайний правый столбец (1440 минут) дает 53%, крайний левый (1 минута) - целых 90%. Другими словами, чтобы выйти в ноль+ на 24-часовой торговой сессии вы обязаны обеспечить 53% выигрышных сделок, а на одноминутном скальпинге - 90%! Или получить соотношение вознаграждение/риск на уровне 9:1 при WinRate=50%. 

Ни одна торговая система не потянет такие показатели, что делает причину №1 более, чем убедительной для отказа от мыслей об алгоритмическом скальпинге.

 

Измерение случайности

Но как насчет причины №2 - повышенной генерации шума и ложных наводок? Может в реале возможна обратная ситуация, и какой-то эффект сделает короткие временные рамки гораздо более предсказуемыми?

Это проверить немного сложнее.

Шум часто идентифицируют с высокочастотными составляющими сигнала[4]. Естественно предположить, что малые интервалы производят больше высокочастотных компонентов, чем длинные периоды. Их можно обнаружить с помощью фильтра верхних частот или устранить с помощью фильтра нижних частот. Но есть проблема - шум кривой цены не всегда связан с высокими частотами. Шум - всего лишь часть кривой, он не содержит информацию о торговом сигнале. 

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

Нам нужны лучшие критерии для определения торгуемости (tradeability) кривой цен. Таковым представляется случайность. Вы не можете торговать на случайном рынке, но потенциально в силах торговать всем, что отличается от случайности[5]. 

Случайность измеряется с помощью информационного содержания (information content) кривой цен. Хорошим показателем информационного содержания является информационная энтропия Шеннона H(S):

4 Скальпингформула 2

(формула 2)

 

Где: si - i-ый паттерн сигнала S;

P(si) - относительная частота появления i-го паттерна. 

Смысл формулы 2 следующий.

Энтропия/случайность максимальна, когда все паттерны распределены равномерно и P(si) имеют примерно одинаковое значение. Если одни паттерны возникают чаще, чем другие, энтропия понижается. Тогда сигнал будет менее случайным и более предсказуемым. Энтропия Шеннона измеряется в битах[6].

Ниже - скрипт исходного кода энтропии Шеннона, ShannonEntropy:

 

5 Скальпингскрипт 2

 

Символ имеет 8 бит (1 байт), поэтому в строке может отображаться 28=256 разных символов. Частота каждого символа рассчитывается и сохраняется в массиве Hist. Частоты умножаются на свой двоичный логарифм и суммируются. Итоговая сумма берется с обратным знаком. Получаем энтропию Шеннона H(S).

Символ - образец сигнала. Нам нужно преобразовать ценовую кривую в символьные шаблоны. Для этого задействуется вторая функция ShannonEntropy, вызывающая первую[7]:

 

6 Скальпингскрипт 3

 

PatternSize разбивает ценовую кривую и задается числом изменений цены. Та или иная цена либо выше предыдущей, либо нет, и отображается, как двоичная информация, составляющая один бит шаблона[8]. Шаблон содержит до 8 бит (1 байта), что эквивалентно 256 комбинациям изменения цен. Хранятся шаблоны в строке символов. 

Их энтропия определяется путем вызова первой функции ShannonEntropy с данной строкой (обе функции ShannonEntropy имеют одно и то же имя, но компилятор различает их по параметрам). Паттерны генерируются из любой выбранной цены и дальнейших цен PatternSize, затем процедура повторяется со следующей ценой. Таким образом, шаблоны перекрываются.

 

Неожиданный результат

Теперь построим гистограмму энтропии Шеннона, подобную гистограмме для WinRate,

размещенную выше.

Для этого создадим скрипт:

 

7 Скальпингскрипт 4

 

Энтропия рассчитывается для всех таймфреймов на каждом 101-м баре. (Почему 101? Я использую нечетные числа для предотвращения эффектов синхронизации). Функция берется по модулю. У меня не получится применить здесь хак с пропуском примыкающих 100 баров, как в предыдущем скрипте, так как это помешает правильному смещению ценового ряда. Вот почему данный скрипт действительно должен отработать любую минуту за 3 года [у автора LookBack=1440*300 (примечание переводчика)]. Для его прогона требуется несколько минут.

Две строки обсуждаемого кода требуют дополнительных комментариев. Они критично необходимы для измерения энтропии для дневных свечей по отрезкам менее суток.

Первая строка:

StartWeek=10000.

Позволяет начинать торговую неделю в полночь понедельника.  

1 = понедельник, 00 00 = полночь, вместо 23.00 воскресенья. Когда эта строка отсутствовала, энтропия дневных свечей оказалась выше ожидаемой. Причина в том, что единственный воскресный час 23.00-24.00 засчитывался программой как полноценный торговый день, что заметно увеличивало случайность дневных свечей. 

Вторая строка:

TimeFrame=frameSync(Duration)

Вторая строчка синхронизирует таймфреймы до полных часов соответствующих дней. Без этого элемента энтропия Шеннона для дневных свечей вновь становилась слишком высокой, поскольку у свечей не было посуточной синхронизации. Из-за выходных и нарушений в массивах исторических данных, в течение дня могло быть меньше 1440 одноминутных баров.

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

Однако получил следующую интересную гистограмму (EUR / USD, 2013-2015, ценовые данные FXCM[9]):

 

8 Скальпинггист 2

Энтропия Шеннона в зависимости от минутных таймфреймов

 

Все значения энтропии не достигают 3 битов. Более того, на ряде таймфреймов энтропия Шеннона существенно ниже 3 битов. Подтверждение того факта, что ценовые модели не суть абсолютно случайны. 

У периода 1440 минут самая низкая энтропия - около 2,9 бита. Показатель вполне объясним, поскольку дневной цикл оказывает сильное влияние на ценовую кривую, и дневные свечи  регулярнее, чем свечи других таймфреймов. По этой причине алгоритмы ценового действия или ценовых паттернов часто используют дневные свечи. 

Как и ожидалось, с уменьшением таймфрейма энтропия увеличивается. Но тенденция имеет место только до интервала в десять минут. При движении ниже 10 минут энтропия уменьшается. Короткие бары характеризуются меньшей случайностью!

Неожиданный результат. 

Чем ниже таймфрейм, тем меньше в нем котировок цен, и влияние случая должно быть выше. Но дело обстоит наоборот. Итоги были бы аналогичными для иных шаблонов (например, для 4 и 5 бит), а также для прочих активов.

Чтобы убедиться в своих выводах, я продолжил эксперимент с другой историей цен, и даже с таймфреймами до одной минуты: 2, 5, 10, 15, 30, 45 и 60 секунд:

 

9 Скальпинггист 3

Энтропия Шеннона на секундных таймфреймах

 

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

Одно из объяснений состоит в повышении детализации цены на низких таймфреймах из-за меньшего количества тиков. 

[Ниже автор объясняет свою мысль (примечание переводчика)]

Сделки с большим объемом часто дробят на множество мелких частей (айсберг-заявки), что вызывает последовательность схожих ценовых котировок на коротких промежутках времени. Данный процесс снижает ценовую энтропию малых таймфреймов. Но не обязательно увеличивает торговые возможности. Серия идентичных котировок имеет нулевую энтропию и на 100% предсказуема, но не может быть продана. 

Конечно, айсберг-трейдинг представляет интересную неэффективность, которой теоретически можно было бы воспользоваться, если бы не присущие ему значительные торговые издержки. Разумный вариант, если у вас есть прямой доступ к рынку и нет комиссий брокера.

 

Выводы

  • Скальпинг - не совсем безумие. Очень низкие таймфреймы демонстрируют определенную закономерность.
  • Какой бы ни была причина, эта закономерность не может быть использована розничными трейдерами из-за высокой стоимости краткосрочных сделок.
  • На таймфреймах выше 60 минут цены становятся менее случайными и более регулярными. Хороший аргумент для алгоритмической торговли на длинных интервалах. 
  • Самые регулярные ценовые паттерны появляются на однодневных барах. Кроме того, им сопутствуют наименьшие торговые издержки.

 

перевод и обработка Владимира Наливайского

 

В основе изложения - материал “Is “Scalping” Irrational?”, The Financial Hacker,  09.10.2015. 

Источник изображения на заставке - Depositphotos

Первоисточниками определений терминов, понятий, явлений, вводимых по тексту, являются профильные статьи Википедии/Wikipedia, указанные в Списке источников к публикации (для переводов - возможны трактовки автора исходного материала) если не оговорено иное.

Примечания

  1. Под адаптированным переводом понимается достаточно точное следование исходному материалу с возможными отступлениями и пояснениями. Конкретные вещи - формулы, скрипты, графики и пр. (а также комментарии к ним) изложены максимально близко к оригиналу (скопированы). Ответственность за их корректность и ясность интерпретации несет автор исходника. 
  2. По тексту автор использует понятия “период или интервал (времени)”, “таймфрейм”, а также “бар, барный период”, как синонимы. 
  3. О языках программирования и математическом обеспечении, используемых автором, смотрите источник 3.
  4. Отметим, что, согласно Википедии (белый) Шум - “Стационарный шум, спектральные составляющие которого равномерно распределены по всему диапазону задействованных частот”. Смотрите источник 4.
  5. Разумная торговля невозможна на полностью эффективном рынке, цены на котором формируются согласно гипотезе случайного блуждания.
  6. Подробнее об информационной энтропии, формулах Хартли и Шеннона смотрите источник 5. 
  7. Скриншоты скриптов автора для обеих (первой и второй) функций ShannonEntropy идентичны.
  8. “Шаблон” и “паттерн” - синонимы. Шаблон - один из вариантов перевода английского слова “Pattern”.
  9. FXCM, Forex Capital Markets - розничный форекс-брокер. По состоянию на март 2018 г. занимает вторую позицию за пределами Японии. Смотрите источник 6. 

Список источников (Википедия/Wikipedia, если не оговорено иное)

  1. “Скальпинг”.
  2. “Скальпель”.
  3. “Hacker’s Tools”, The Financial Hacker, 03.10.2015.
  4. “Белый шум”.
  5. “Информационная энтропия”.
  6. “FXCM”.

Список формул

формула 1 Коэффициент WinRate

формула 2 Энтропия Шеннона