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


Дата создания: 2023-11-23 14:14:58 Последнее изменение: 2023-11-23 14:14:58
Копировать: 0 Количество просмотров: 675
1
Подписаться
1617
Подписчики

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

Обзор

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

Стратегический принцип

Эта стратегия основана на формировании аномально высоких K-линий, когда close>open и highlow[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 //