
이 전략은 단지 다단계로 하는 이치모쿠 클라우드 거래 전략이다. 이 전략은 전환선 상에서 기준선을 통과할 때 상장을 하고, 기준선 아래에서 전환선을 통과할 때 평점을 한다. 또한, 상장을 개시하고 상장을 평점으로 할 때 미지수 스펀을 검출한다. 미지수 스펀이 클라우드보다 높으면 상장을 개시하고, 클라우드보다 낮으면 평점을 한다.
이 전략은 이치모쿠 기술 지표의 몇 가지 선을 사용합니다.
전환선: 최근 9일간의 최고 가격과 최저 가격의 평균값으로, 한 기간 동안의 트렌드 전환을 나타냅니다.
기준선: 최근 26일 동안의 최고 가격과 최저 가격의 평균값, 한 기간 동안의 평균 가격 변화를 나타냅니다.
전선 A: 전환선과 기준선의 평균
전선 B: 최근 52일 동안의 최고 가격과 최저 가격의 평균값, 중·장기 추세를 나타내는 선전 지표
뒤떨어진 Span: 26일 뒤떨어진 현재의 종전 가격. △ 동향의 힘을 나타냅니다.
포지션을 개시할 때, 전환선에서 기준선과 지연Span이 구름층보다 높다는 조건을 동시에 충족해야 한다. 이것은 단기 및 중장기 경향은 모두 상향 신호를 의미한다.
평정시에는 기준선 아래의 전환선과 뒤떨어진 Span이 구름층 아래의 조건을 동시에 충족해야 한다. 이는 트렌드가 역전되는 것을 의미하며, 포지션에서 빠져나가야 한다.
이치모쿠 (Ichimoku) 클라우드 지표를 사용하여 트렌드를 판단하는 것은 정확도가 높습니다.
그리고 여러 선의 판단을 결합하여 잘못된 신호를 생산하지 않도록 한다.
하지만, 대부분의 디지털 화폐의 긴 선의 상승 추세에 부합합니다.
조건 필터링은 상대적으로 엄격하며, 높은 품질의 신호를 구현한다.
포지션은 풀 포지션 또는 빈 포지션으로만 가능하며 포지션 크기를 조정할 수 없습니다.
이 시장은 불시장에서 좋은 성적을 거뒀지만, 곰시장에서 손실 위험이 크다.
파라미터는 암호화폐에 대한 기본 설정으로, 다른 품종에 적합하도록 조정할 필요가 있다.
거래 신호가 적어서 일부 기회를 놓칠 수 있습니다.
포지션 조정 기능을 추가하여 손실이 일정 비율에 도달했을 때 일부 포지션을 닫습니다.
매매 신호를 추가하고, 핵심 지원 아래의 평준화를 통해 손실을 줄인다.
더 많은 품종에 적응할 수 있도록 파라미터 설정을 최적화하여 안정성을 높였습니다.
손실을 막는 기능이 추가되어 손실이 절정에 도달했을 때 손실을 막습니다.
이 전략은 하나의 다단계 이치모쿠 클라우드 거래 전략으로서, 추세를 판단하는 데 높은 정확성을 갖는다. 이 전략은 동시에 여러 개의 이치모쿠 선을 필터링 조건으로 결합하여, 추세 전환점을 비교적 안정적으로 판단할 수 있다. 이 전략은 특히 암호화폐와 같은 긴 줄에서 상승하는 품종에 적합하다.
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
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/
// Simple long-only Ichimoku Cloud Strategy
// Enter position when conversion line crosses base line up, and close it when the opposite happens.
// Additional condition for open / close the trade is lagging span, it should be higher than cloud to open position and below - to close it.
//@version=4
strategy("Ichimoku Cloud Strategy Long Only", shorttitle="Ichimoku Cloud Strategy (long only)", overlay=true )
conversion_length = input(9, minval=1, title="Conversion Line Periods"),
base_length = input(26, minval=1, title="Base Line Periods")
lagging_length = input(52, minval=1, title="Lagging Span 2 Periods"),
delta = input(26, minval=1, title="Delta")
average(len) => avg(lowest(len), highest(len))
conversion_line = average(conversion_length) // tenkan sen - trend
base_line = average(base_length) // kijun sen - movement
lead_line_a = avg(conversion_line, base_line) // senkou span A
lead_line_b = average(lagging_length) // senkou span B
lagging_span = close // chikou span - trend / move power
plot(conversion_line, color=color.blue, linewidth=2, title="Conversion Line")
plot(base_line, color=color.white, linewidth=2, title="Base Line")
plot(lagging_span, offset = -delta, color=color.purple, linewidth=2, title="Lagging Span")
lead_line_a_plot = plot(lead_line_a, offset = delta, color=color.green, title="Lead 1")
lead_line_b_plot = plot(lead_line_b, offset = delta, color=color.red, title="Lead 2")
fill(lead_line_a_plot, lead_line_b_plot, color = lead_line_a > lead_line_b ? color.green : color.red)
// Strategy logic
long_signal = crossover(conversion_line,base_line) and ((lagging_span) > (lead_line_a)) and ((lagging_span) > (lead_line_b))
short_signal = crossover(base_line, conversion_line) and ((lagging_span) < (lead_line_a)) and ((lagging_span) < (lead_line_b))
strategy.entry("LONG", strategy.long, when=strategy.opentrades == 0 and long_signal, alert_message='BUY')
strategy.close("LONG", when=strategy.opentrades > 0 and short_signal, alert_message='SELL')
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(true, "Custom Backtesting Dates")
testStartYear = input(2021, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2021, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testStopHour = input(0, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() => true
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()