Количественная инвестиционная стратегия, основанная на месячной дате покупки

Автор:Чао Чжан, Дата: 2023-11-24 14:10:23
Тэги:

img

Обзор

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

Принцип стратегии

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

Логика для сигнала покупки такова: если это дата покупки, определенная пользователем, и в пределах диапазона действительной даты стратегии, делайте покупку.

Логика сигнала закрытия позиции такова: если дата продажи установлена и это дата продажи сейчас, закрыть позицию; если нет даты продажи, но после окончания стратегии, также закрыть позицию.

Преимущества стратегии

  1. Может найти дату наибольших колебаний цен каждый месяц, чтобы получить избыточную доходность с помощью высокочастотного внутридневного трейдинга
  2. Может определить оптимальную точку покупки, сравнивая модели прибыли с разных дат покупки
  3. Может определить, изменяется ли оптимальная дата покупки на основе ключевых событий месяца
  4. Может сбалансировать краткосрочную и долгосрочную торговлю, устанавливая разные даты продажи

Риски и решения

  1. Риск падения цен после покупки

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

    • Отслеживать историю изменений данных и своевременно корректировать оптимальную точку покупки
    • Сокращение размера позиции в периоды высокого риска
  3. Потери, вызванные неправильной установкой параметров

    • Проверьте различные параметры постепенно и сравните разницу прибыли
    • Выберите репрезентативный временной диапазон для испытания

Руководство по оптимизации

  1. Рассмотрим несколько факторов при определении точки входа

    • Рассмотреть влияние ключевых новостных событий месяца на цену
    • Анализировать ценовые тенденции связанных цифровых активов
    • Добавьте модели машинного обучения для определения оптимального времени
  2. Оптимизация механизма управления позициями

    • Установка динамической прибыли на закрытие позиции
    • Корректировка размера позиции на основе волатильности
    • Рассмотреть позицию, удерживаемую в течение периода
  3. Расширение на другие торговые рынки

    • Применяется для большего числа торговых пар цифровой валюты
    • Применяется для акций, валюты и т.д.
    • Создание стратегий межрыночного арбитража

Резюме

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


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dennis.decoene

//@version=4
strategy(title="Buy and Hold, which day of month is best to buy?", overlay=true)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Starting From")
     
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Starting From")
     
startYear = input(title="Start Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group="Starting From")

endDate = input(title="End Date", type=input.integer,
     defval=2, minval=1, maxval=31, group="Until")
endMonth = input(title="End Month", type=input.integer,
     defval=10, minval=1, maxval=12, group="Until")
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group="Until")

entryday = input(title="Entry Day", type=input.integer,
     defval=26, minval=1, maxval=31, tooltip="When to enter (buy the asset) each month")
exitday = input(title="Exit Day", type=input.integer,
     defval=6, minval=1, maxval=31, tooltip="When to exit (sell the asset) each month")
     
useExitDay= input(title="Close position on exit day?", type=input.bool, defval=false, tooltip="Use the Exit Day to close each months position it true or close at the end of the period (if false)")
     
isEntryDay= (dayofmonth(time)==entryday)
isExitDay= (dayofmonth(time)==exitday-1)


inDateRange = true

if (isEntryDay and inDateRange)
    strategy.entry(id="Buy", long=true)
    
if (isExitDay and useExitDay)
    strategy.close_all()


// Exit open market position when date range ends
if (not inDateRange and not useExitDay)
    strategy.close_all()
     

Больше