아시아 세션 하이 앤 로우 브레이크아웃 전략


생성 날짜: 2024-03-29 17:12:49 마지막으로 수정됨: 2024-03-29 17:12:49
복사: 0 클릭수: 1395
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

아시아 세션 하이 앤 로우 브레이크아웃 전략

개요

이 전략의 주요 아이디어는 아시아 상장의 높은 낮은 점을 뚫는 포인트로 이용하고, 유로아메리카 상장 개장 후 몇 시간 안에, 가격이 아시아 상장 높은 점을 뚫면 더 많이 하고, 아시아 상장 낮은 점을 뚫면 공백을 한다. 동시에 중지 손실과 중지 스톱을 설정하고, 위험을 통제한다. 이 전략은 하루에 한 거래만 하고, 최대 동시에 열 수 있는 포지션은 100000이다.

전략 원칙

  1. 아시아 디스크의 거래 시간을 설정하여, 사용자가 사용자 지정된 시작 및 종료 시간을 설정할 수 있습니다.
  2. 아시아판 기간 동안 하루 최고 가격과 최저 가격을 기록했다.
  3. 유럽과 미국의 거래가 개시된 후의 일정 시간 (사용자가 사용자 정의한 편향 시간) 에서, 가격이 아시아 거래 상위점을 돌파하면 더 많은 것을 하고, 아시아 거래 상위점을 돌파하면 더 적은 것을 한다.
  4. 스톱 및 스톱을 설정하고 스톱 및 스톱의 점수를 사용자 정의 할 수 있습니다.
  5. 매일 한 개의 거래만 가능하며, 최대 100,000개의 포지션을 동시에 열 수 있다.
  6. 그 날 이미 포지션이 열렸다면, 새로운 거래는 더 이상 열리지 않습니다.

우위 분석

  1. 아시아 지표의 비교적 평온한 특성을 활용하여, 아시아 지표의 높은 낮은 점으로 하루의 돌파점을 활용하여, 유로-미국 지표의 트렌드 기회를 더 잘 포착할 수 있다.
  2. 스톱로즈와 스톱 스을 설정하여 리스크를 효과적으로 제어하여 수익을 충분히 얻을 수 있고 손실을 빨리 막을 수 있습니다.
  3. 하루에 한 개의 거래와 동시에 열 수 있는 포지션의 최대 수를 제한하여 과도한 거래와 자금의 과도한 사용을 방지할 수 있습니다.
  4. 사용자는 자신의 필요에 따라 아시아 디스크 시간 및 편향 시간 등의 파라미터를 유연하게 설정할 수 있다.

위험 분석

  1. 아시아 시장의 하위/높은 지점은 반드시 당일 실제 하위/높은 지점일 필요는 없으며, 유로/미국 시장의 돌파 이후 급격히 물러나고 손실을 초래할 수도 있다.
  2. 고정 점수의 스톱 및 스톱은 시장의 큰 변동에 대처할 수 없으며, 때로는 너무 일찍 스톱하거나, 때로는 너무 일찍 스톱 할 수 있습니다.
  3. 트렌드가 보이지 않거나 시장의 변동이 심한 경우, 이 전략은 자주 상쇄되는 경우가 발생할 수 있습니다.

최적화 방향

  1. ATR과 같은 변동성 지표에 따라 다른 상황에 맞게 스톱 및 스톱의 점수를 동적으로 조정하는 것을 고려할 수 있습니다.
  2. 트렌드를 판단하는 지표들 중 MA와 같은 것을 추가할 수 있으며, 큰 트렌드가 상승할 때만 더 많이 하고, 하향할 때 공백을 두어 성공률을 높일 수 있다.
  3. 분기별로 다른 파라미터를 설정하는 것을 고려할 수 있습니다. 예를 들어, EURUSD 상장 초기에는 작은 스톱 스톱을 사용하지만, 추세가 분명할 때 스톱 스톱을 증가시킵니다.

요약하다

이 전략은 아시아 디스크의 높고 낮은 점을 뚫고 거래하기 위해 사용되며, 유로아메리카 디스크의 추세가 더 뚜렷한 품종에 적합하다. 그러나 고정된 포인트 수 스톱로스 스톱과 표준의 뚫고 들어가는 방식에도 몇 가지 제한이 있다. 몇 가지 역동적이고 추세적인 지표를 도입하여 이 전략에 최적화를 할 수 있으며, 더 나은 효과를 얻을 수 있다.

전략 소스 코드
/*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)