아시아 세션 높은 낮은 브레이크업 전략

저자:차오장, 날짜: 2024-03-29 17:12:49
태그:

img

전반적인 설명

이 전략의 주요 아이디어는 아시아 세션의 높은 점과 낮은 점을 브레이크아웃 포인트로 사용하는 것입니다. 유럽과 미국 시장이 열린 후 몇 시간 이내에 가격이 아시아 세션의 높은 점을 넘으면 길게 갈 것이고 아시아 세션의 낮은 점을 넘으면 짧게 갈 것입니다. 스톱 손실과 수익을 취하는 것은 위험을 제어하도록 설정됩니다. 전략은 하루에 한 거래만 열고 최대 100,000 개의 동시에 포지션을합니다.

전략 원칙

  1. 아시아 세션의 거래 시간을 결정합니다. 사용자는 시작 및 종료 시간을 사용자 정의 할 수 있습니다.
  2. 아시아 세션을 통해 하루의 가장 높은 가격과 가장 낮은 가격을 기록합니다.
  3. 특정 시간 (사용자 정의 오프셋 시간) 에 유럽 및 미국 시장이 열린 후, 가격이 아시아 세션 최고 이상으로 넘어지면, 길게; 아시아 세션 최저 아래로 넘어지면, 짧게.
  4. 스톱 로스 및 리프트를 설정합니다. 스톱 로스 및 리프트를 위한 포인트 수는 사용자 정의 할 수 있습니다.
  5. 하루 한 번만 새로운 트레이드를 열고 최대 100,000개의 동시 포지션을 가질 수 있습니다
  6. 만약 거래가 이미 하루 동안 열렸다면 새로운 거래는 열리지 않습니다.

이점 분석

  1. 아시아 세션의 비교적 평온한 특성을 활용하고 아시아 세션의 높고 낮은 지점을 브레이크 포인트로 사용하여 유럽 및 미국 세션의 트렌드 기회를 더 잘 파악 할 수 있습니다.
  2. 스톱 로스 및 영업 수익을 설정하면 위험을 효과적으로 제어할 수 있으며 수익성있는 거래가 실행되고 수익성이없는 거래에서 손실을 신속하게 중지 할 수 있습니다.
  3. 하루에 한 거래만 하고 최대 다수의 동시에 거래하면 과잉 거래와 과도한 자금 사용을 피할 수 있습니다.
  4. 사용자는 자신의 필요에 따라 아시아 세션 시간 및 오프셋 시간과 같은 매개 변수를 유연하게 설정할 수 있습니다.

위험 분석

  1. 아시아 세션의 고도와 하위점은 하루의 진정한 고도와 하위점이 아닐 수 있습니다. 유럽과 미국 시장이 돌파 한 후에 손실을 초래하여 빠르게 재회 할 수 있습니다.
  2. 고정 포인트 스톱 러스 및 취득은 시장의 큰 변동에 대처할 수 없을 수 있습니다. 때로는 스톱 러스가 너무 일찍, 때로는 취득이 너무 일찍 발생할 수 있습니다.
  3. 트렌드가 명백하지 않거나 시장 변동성이 높은 상황에서는 전략은 빈번한 개시 및 중지 손실을 경험할 수 있습니다.

최적화 방향

  1. 다른 시장 조건에 적응하기 위해 ATR과 같은 변동성 지표에 기초하여 스톱 로스 및 수익을 취하기 위한 포인트 수를 동적으로 조정하는 것을 고려하십시오.
  2. MA와 같은 트렌드 판단 지표를 추가하고 큰 트렌드가 상승할 때만 길게, 성공률을 높이기 위해 하락할 때만 짧게 이동합니다.
  3. 다른 기간에 다른 매개 변수를 설정하는 것을 고려하십시오. 예를 들어 유럽 및 미국 거래 세션의 시작에서 더 작은 스톱 로스를 사용하고 트렌드가 명백하면 스톱 로스를 증가시키고 수익을 취하십시오.

요약

이 전략은 아시아 세션의 높고 낮은 점을 브레이크아웃 포인트로 사용하여 유럽 및 미국 시장에서 명백한 트렌드를 가진 품종에서 사용할 수 있습니다. 그러나 고정 포인트 스톱 로스 및 영업 및 표준 브레이크아웃 엔트리 방법 또한 몇 가지 제한이 있습니다. 일부 동적이고 트렌드 기반 지표를 도입함으로써 전략을 최적화하여 더 나은 결과를 얻을 수 있습니다.


/*backtest
start: 2024-02-27 00:00:00
end: 2024-03-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Asia Session", overlay=true)

var hourSessionStart = input(19, "Asia session start hour", minval=0, maxval=23)
var hourSessionStop  = input(1, "Asia session end hour", minval=0, maxval=23)
var offsetHours = input(3, "Offset hours after Asia session end")

var float hi              = na
var float lo              = na
var float plotHi          = na
var float plotLo          = na

var bool  inSession       = na
var bool  enteringSession = na
var bool  exitingSession  = na

inSession       := (hour >= hourSessionStart or hour < hourSessionStop)
enteringSession := inSession and not inSession[1]
exitingSession  := not inSession and inSession[1]

if enteringSession
    plotLo := na
    plotHi := na

if inSession
    lo := min(low,  nz(lo, 1.0e23))
    hi := max(high, nz(hi))

if exitingSession
    plotLo := lo
    plotHi := hi
    lo     := na
    hi     := na

bgcolor(inSession ? color.blue : na)

plot(plotLo, "Asia session Low",  color.red,   style=plot.style_linebr)
plot(plotHi, "Asia session High", color.green, style=plot.style_linebr)

// Implementazione delle condizioni di entrata
var float asiaSessionLow = na
var float asiaSessionHigh = na
var int maxTrades = 100000 // Impostiamo il massimo numero di operazioni contemporanee
var int tradesOpened = 0 // Variabile per tenere traccia del numero di operazioni aperte
var bool tradeOpened = false
var bool operationClosed = false // Nuova variabile per tenere traccia dello stato di chiusura dell'operazione

// Calcolo del range asiatico
if (inSession)
    asiaSessionLow := lo
    asiaSessionHigh := hi

// Apertura di un solo trade al giorno
if (enteringSession)
    tradeOpened := false

// Condizioni di entrata
var float stopLoss = 300 * syminfo.mintick
var float takeProfit = 300 * syminfo.mintick

if (not tradeOpened and not operationClosed and close < asiaSessionLow and tradesOpened < maxTrades and hour >= hourSessionStop + offsetHours)
    strategy.entry("Buy", strategy.long)
    tradeOpened := true
    tradesOpened := tradesOpened + 1 // Incrementiamo il contatore delle operazioni aperte

if (not tradeOpened and not operationClosed and close > asiaSessionHigh and tradesOpened < maxTrades and hour >= hourSessionStop + offsetHours)
    strategy.entry("Sell", strategy.short)
    tradeOpened := true
    tradesOpened := tradesOpened + 1 // Incrementiamo il contatore delle operazioni aperte

// Impostazione dello stop loss e del take profit
strategy.exit("Stop Loss / Take Profit", "Buy", stop=close - stopLoss, limit=close + takeProfit)
strategy.exit("Stop Loss / Take Profit", "Sell", stop=close + stopLoss, limit=close - takeProfit)


더 많은