Эта стратегия применяет принципы золотых крестов и мертвых винтов простых движущихся средних, чтобы осуществить длинные и короткие позиции на акции. Когда быстрая линия прорывает медленную линию с нижнего направления, делайте больше; когда быстрая линия падает с верхнего направления и прорывает медленную линию, делайте больше.
Эта стратегия сначала определяет время начала и окончания отсчета, а затем устанавливает параметры вычисления для двух средних, включая тип средних и длину цикла.
Вычислить значение двух средних значений с помощью функции getMAType ((), где fastMA - это среднее значение короткого периода, а slowMA - среднее значение длительного периода.
Основная логика этой стратегии заключается в следующем:
При использовании быстрого МА на медленном МА выделяется многосигнал long;
Когда fastMA проходит через slowMA, появляется сигнал short.
В конце концов, в течение периода отсчета, при наличии сигнала “сделай больше” следует использовать стратегию “продолжай” и при наличии сигнала “сделай меньше” - стратегию “сделай больше”.
В зависимости от риска, можно оптимизировать следующие аспекты:
Добавить фильтры для других технических показателей, чтобы определить тенденции.
Повышение стратегии сдерживания убытков, контроль одноразовых потерь.
Введение количественных показателей энергии и т.д., чтобы избежать арбитража на колеблющихся рынках.
Создание механизмов оптимизации параметров, автоматическое поиск оптимальных комбинаций параметров
Эта стратегия может быть улучшена в следующих аспектах:
Добавление стратегий остановки убытков, таких как установка фиксированной точки остановки убытков или отслеживание остановки убытков, контроль убытков.
Добавление стратегий управления позициями, таких как фиксированные позиции, динамические позиции, контроль риска торгов.
Добавление фильтров, в сочетании с другими техническими показателями, поможет определить тенденции и повысить коэффициент успеваемости.
Оптимизация параметров, поиск оптимальных параметров с помощью методов сетчатого поиска, линейного регрессирования и т. д.
Расширяйте стратегию торговли, используя множество дискортирующих стратегий, таких как дебилизация, реверсирование, строительство опционов по партиям и т. Д.
Повышение энергопоказателей, чтобы избежать попадания в ловушку при землетрясении.
Повышение ассортимента сделок, расширение до более широкого спектра, включая фондовые индексы, фьючерсы, валюту и цифровые валюты.
Эта стратегия основана на принципе пересечения движущихся средних. Стратегия проста, понятна, широко используется, адаптивна и имеет некоторую практическую ценность. Но у этой стратегии также есть определенные недостатки, такие как задержка и невозможность эффективного фильтрации колебаний. В будущем ее можно оптимизировать, улучшая стоп-лосс, оптимизируя параметры и добавляя фильтры, чтобы сделать стратегию более преимущественной.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)
source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
res
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)
long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)
/////////////// Plotting ///////////////
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)