이치모쿠 긴코 효를 기반으로 한 추세 반전 거래 전략


생성 날짜: 2023-09-20 15:44:13 마지막으로 수정됨: 2023-09-20 15:44:13
복사: 0 클릭수: 649
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 초기 균형표 지표와 MACD 지표를 결합하여 트렌드 반전이 확인된 후 입문하여 트렌드 반전 클래스 거래 전략에 속한다.

전략 원칙

  1. 첫 번째 평형표의 전환선을 계산하여 트렌드 방향을 판단하는 지표로 사용한다. 가격은 전환선 위의 다목적 시장, 아래의 공백 시장이다.

  2. MACD 지표는 다면 시장이 사다리를 형성할 때 팔기 신호를 생성하고, 공수 시장이 금다리를 형성할 때 구매 신호를 생성한다.

  3. 첫눈의 균형표의 추세 판단과 MACD의 반전 신호를 결합하여 추세 반전 지점에서 역거래를 한다.

  4. 거래 시간 제어를 설정할 수 있습니다. 예를 들어, 저녁에 거래 종료, 주말에는 거래하지 않습니다. 특정 시간대의 위험을 피합니다.

  5. 적당히 손해배상 및 차단 전략을 사용하여 수익을 고정하고 위험을 통제하십시오.

우위 분석

  1. 일회성 평형표 지표는 직관적으로 추세와 지지 압력 수준을 나타냅니다.

  2. MACD 지표는 트렌드 반전을 더 민감하게 포착한다.

  3. 트렌드 판단과 역전 신호를 결합하여 가짜 신호를 필터링할 수 있다.

  4. 중요한 시간대에서의 위험을 피하기 위해 거래 시간대를 사용자 정의 할 수 있습니다.

  5. 스톱로스 스톱 전략을 세우는 것은 자금의 위험을 효과적으로 관리할 수 있다.

위험 분석

  1. 초점 평형표와 MACD 지표는 잘못된 판단 신호가 발생할 수 있다.

  2. “이런 일이 벌어질 수 있는 이유는, 우리가 이 문제를 해결하기 위해 노력할 수 있기 때문입니다.

  3. 거래 시간 통제는 거래 기회를 놓칠 수 있습니다.

  4. 손해 차단 장치가 잘못 설정되어 너무 일찍 손해 차단 또는 차단 될 수 있습니다.

  5. 매개 변수 최적화는 과잉 최적화되어 효과가 떨어질 수 있다.

최적화 방향

  1. 평형표와 MACD의 변수를 테스트하여 최적의 변수 조합을 찾습니다.

  2. 거래 신호를 확인하기 위해 다른 지표를 추가하십시오.

  3. 위험과 수익의 균형을 맞추는 손실을 막는 전략을 최적화하십시오.

  4. 거래 시간 통제의 필요성을 평가하고 적절한 완화.

  5. 트렌드 필터를 추가하여 반전 거래 손실을 방지하십시오.

  6. 역동의 강도와 잠재적인 회귀의 높이를 판단하는 방법을 연구한다.

요약하다

이 전략은 초기 균형 표의 트렌드 판단과 MACD의 역전 거래 신호를 통합하여 트렌드 역전이 확인된 후 거래 결정을 내립니다. 파라미터와 전략을 추가로 최적화함으로써 신호 오판 위험을 줄이고 안정적이고 효율적인 트렌드 역전 거래 시스템을 구축 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Revazi

//@version=5
strategy("The Impeccable by zyberal", overlay = true)

// Inputs {
// Strategy variables
IchimokuTenkanPeriod = input(9)
IchimokuKijunPeriod = input(190)
IchimokuSenkouPeriod = input(52)
MACDMainFast = input(3)
MACDMainSlow = input(10)
MACDMainSmooth = input(9)
ExitAfterBars = input(2)
ProfitTarget = input(135)
StopLoss = input(70)

// Trading Options
DontTradeOnWeekends = input(true)
ExitAtEndOfDay = input(true)
DayExitTimeHour   = input(23)
DayExitTimeMinute = input(04)

ExitOnFriday = input(true)
FridayExitTimeHour   = input(20)
FridayExitTimeMinute = input(40)

// }



// TRADING OPTIONS LOGIC {
OpenOrdersAllowed = true

// Dont trade on weekends {
if DontTradeOnWeekends
    if dayofweek == dayofweek.saturday or
       dayofweek == dayofweek.sunday
        OpenOrdersAllowed := false
// }

// Exit on close (end of day) {
if ExitAtEndOfDay
    if timeframe.isintraday and
       time >= timestamp(year(timenow), month(timenow), dayofmonth(timenow), DayExitTimeHour, DayExitTimeMinute)
        OpenOrdersAllowed := false
// }

// Exit on Friday {
if ExitOnFriday
    if timeframe.isintraday and
       time >= timestamp(year(timenow), month(timenow), dayofmonth(timenow), FridayExitTimeHour, FridayExitTimeMinute)
        OpenOrdersAllowed := false
// }


// Rule: Trading signals {
openW3 = request.security(syminfo.tickerid, "W", open)[3]

middleDonchian(Length) => math.avg(ta.highest(Length), ta.lowest(Length))
Tenkan = middleDonchian(IchimokuTenkanPeriod)[2]

[macdLine, signalLine, _] = ta.macd(close, MACDMainFast, MACDMainSlow, MACDMainSmooth)

LongEntrySignal = openW3 > Tenkan and ta.crossunder(macdLine, signalLine)[3] //macdLine[3] < signalLine[3]
ShortEntrySignal = openW3 < Tenkan and ta.crossover(macdLine, signalLine)[3] //macdLine[3] > signalLine[3]
// }



// Calculate conditions {
IsFlat() => strategy.position_size == 0
IsLong() => strategy.position_size > 0
IsShort() => strategy.position_size < 0

longCondition  = OpenOrdersAllowed and not IsLong() and LongEntrySignal
shortCondition = OpenOrdersAllowed and not IsShort() and ShortEntrySignal

// }

// Open positions based on conditions {
strategy.order(id = "buy", direction = strategy.long, qty = 1, when = longCondition)
strategy.order(id = "sell", direction = strategy.short, qty = 1, when = shortCondition)
// }