Стратегия прорыва импульса, основанная на внутренней амплитуде стоп-потери

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

img

Обзор

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

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

Эта стратегия в основном рассматривает формирование аномально стремительно растущих линий K. Когда появляется линия K с закрытием> открытием и высоким<высоким[1] и низким>низким[1] показателями, она считает, что существует текущий период аномально стремительно растущего рынка. Будет генерироваться длинный сигнал входа, при этом цена входа будет близка к самой высокой цене текущей линии K. Стоп-лосс также устанавливается близко к самой низкой цене предыдущей линии K, чтобы сформировать модель контроля риска с высоким рычагом. Контроль риска достигается путем непрерывного мониторинга ценового прорыва линии стоп-лосса.

Анализ преимуществ

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

Анализ рисков

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

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

Стратегия может быть оптимизирована в следующих аспектах:

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

  2. Установка позиций стоп-лосса может подвергаться большому количеству статистического и оптимизационного анализа для поиска лучших позиций стоп-лосса для сбалансирования рисков торговли и уровней доходности.

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

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

Резюме

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


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 08:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
// I needed to test/verify the functionality for canceling an open limit order in a strategy and also work thru the pieces needed to set the position sizing so each loss is a set amount. 
// This is not meant to be dropped into a chart but rather gives the code/logic in order to use in your own script w/alerts or strategy. Hope it helps. 
 
//@version=4
strategy("Strategy Test - Cancel Limit Order and Position Sizing", overlay=true, precision=4)
 
/////////////////
// Backtest Period Selection
 
testStartYear = input(2020, "Backtest Start Year",minval=1980)
testStartMonth = input(2, "Backtest Start Month",minval=1,maxval=12)
testStartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
 
testStopYear = input(2020, "Backtest Stop Year",minval=1980)
testStopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
 
testPeriod() => time >= true
 
//////////////
// Inside Bar
bull_inside_bar = close>open and high<high[1] and low>low[1]

// Set Levels
bull_inside_bar_sl = valuewhen(bull_inside_bar, low[1], 0) - (1*syminfo.mintick)
bull_breakout_price = valuewhen(bull_inside_bar, high, 0) + (1*syminfo.mintick)
entry_buy   = high
inside_bar_dist = entry_buy - bull_inside_bar_sl
inside_bar_be = entry_buy + (inside_bar_dist * 1)
inside_bar_tgt = entry_buy + (inside_bar_dist * 2)

///////////////////
// Position Sizing 
//////////////////
// For each trade setup that fires in this scenario we want to set our total loss amount in USD, so every trade that loses is lets say $1 and the 2:1 target would be $2 in this example. 
// The math logic for this take the risk amount and divide by the stop percentage, take that number and divide by leverage amount chosen. Stop percentage is a variable below if questions on that. 
//
// Taken from @JoshuaMorris (shout out to the UK peeps) position sizing google doc so thank you sir. 
// Would be used if risking based on percentage of a portfolio. Leaving code snippets here in case that's the direction someone wants to go. 
// xbt_price = security("BITMEX:XBTUSD", "D", close)
// account_size_xbt = input(1, "Account Size (XBT)", type=input.float)
// account_size_usd = (account_size_xbt * xbt_price)
// percentage_risk = input(0.01, "Personal Risk Percent - Default is 1%", type=input.float)
// personal_risk = (account_size_usd * percentage_risk)
// position_size_usd = (personal_risk) / risk_percent
// leverage_req = position_size_usd / account_size_usd

// Will want to hard code leverage as 1x, 5x, 10x etc and dont need it to automagically be set as is above. If you're doing 100x you are gnarly haha. 
leverage_amount = input(title="Leverage Amount Desired", type=input.integer, defval=10, options=[1, 2, 3, 5, 10, 25, 50, 100])
risk_amount = input(title="Risk Total Per Trade in USD", type=input.integer, defval=1, minval=1, step=1)

// Reminder this is for Longs. Math needs to be changed a bit for Shorts. This is the information using the long/short tool would give us if doing manually. 
stop_percent = inside_bar_dist / (entry_buy)
pos_size_no_lev = risk_amount / stop_percent
pos_size_with_lev = pos_size_no_lev / leverage_amount 

//////////////
// Strategy Section

if testPeriod()
    strategy.entry(id="Long", long=true, qty=1, limit=9320.00, when=bull_inside_bar)
    strategy.cancel(id="Long", when = low < 9310)
// as a test swap the price to be above the limit or below to see the cancel in play.
 
//////////////
// Plot Section
plotchar(bull_inside_bar, title="bull_inside_bar", char="🐂", location=location.belowbar, offset=-0, color=color.green, transp=25)
plot(bull_inside_bar_sl, title="bull_inside_bar_sl", transp=100)
plot(entry_buy, title="entry_buy", transp=100)
plot(inside_bar_dist, title="inside_bar_dist", transp=100)
plot(stop_percent, title="stop_percent", transp=100)
plot(pos_size_no_lev, title="pos_size_no_lev", transp=100)
plot(pos_size_with_lev, title="pos_size_with_lev", transp=100)

// Hidden Plots // For Data Window Eyes Only // 
// plot(longCondition==true?1:0, title="Long Condition", transp=100)
// plot(xbt_price, title="XBT Price", transp=100)
// plot(account_size_usd, title="Account Size USD", transp=100)
// plot(risk_percent, title="risk_percent", transp=100)
// plot(position_size_usd, title="position_size_usd", transp=100)
// plot(leverage_req, title="leverage_req", transp=100)

// END //

Больше