이 전략은 트렌드 방향과 거래 기회를 결정하기 위해 여러 지표의 조합을 사용하여 거래의 승률을 높이기 위해 압력 균형 접근 방식을 채택합니다. 판단을 위해 주로 MACD, PSAR 및 EMA 지표를 활용하고 효과적인 수익성을 달성하기 위해 스톱 로스를 구현하고 이익을 취합니다.
전체 트렌드 방향을 결정하기 위해 이동 평균을 계산하기 위해 EMA를 사용하십시오. 더 큰 EMA 값은 상승 추세를 나타냅니다. 더 작은 EMA 값은 하락 추세를 나타냅니다.
MACD를 사용하여 빠른 평균과 느린 이동 평균의 차이를 계산하십시오. 차이가 0보다 크면 상승 추세를 나타냅니다. 0보다 작으면 하락 추세를 나타냅니다.
연속 변수점을 계산하기 위해 PSAR를 사용하십시오. PSAR 값이 크면 하락 추세를 나타냅니다. PSAR 값이 작으면 상승 추세를 나타냅니다.
위의 세 가지 지표를 결합하여 동향의 일관성을 결정합니다. 세 가지 지표의 판단이 일관되면 진입 거래를 허용하는 명확한 동향을 나타냅니다.
구매 및 판매 기준에 따라 거래를 입력하고 스톱 로스 및 취리 포인트를 설정합니다. 수익을 실현하기 위해 스톱 로스 또는 취리 조건이 충족되면 거래를 종료합니다.
구체적인 규칙은 다음과 같습니다.
트렌드를 결정하기 위해 여러 지표를 사용하는 것은 정확성을 향상시킵니다.
압력 균형에 의해 확인된 확실한 추세에 기반한 거래를 시작하면 이기는 비율이 증가합니다.
손해를 멈추고 수익을 취하면 손실을 제한하고 수익을 확보할 수 있습니다.
명확하고 체계적인 거래 규칙은 알고리즘 거래에 적합합니다.
매개 변수는 다양한 제품과 시간대에 적응하도록 최적화 할 수 있습니다.
트렌드 판단이 잘못되어 잘못된 거래 방향이 발생할 수 있습니다.
극심한 시장 움직임은 지표에서 잘못된 신호를 생성할 수 있습니다.
너무 큰 스톱 손실을 설정하고, 적시에 종료 할 수 없습니다.
부적절한 매개 변수 조정으로 인해 거래가 지나치게 많거나 빠집니다.
유동성 없는 상품은 스톱 로스 (stop loss) 및 수익 계획 (take profit) 을 충족시킬 수 없습니다.
위험은 매개 변수를 최적화하고, 정지점을 조정하고, 액체 제품을 선택함으로써 줄일 수 있습니다.
트렌드 정확성을 최적화하기 위해 EMA 기간을 조정합니다.
감수성을 높이기 위해 MACD 빠른 기간과 느린 기간을 조정합니다.
최적화 스톱 로스 및 수익 비율을 취하여 최적의 균형을 찾습니다.
출입 시기를 개선하기 위해 다른 보조 지표를 추가하십시오.
유동성이 좋고 큰 변동이 있는 상품을 선택하세요.
다른 제품 특성에 맞게 시간 프레임을 조정합니다.
이 전략은 트렌드 분석을 위한 여러 지표를 통합하고, 사전 설정된 스톱 로스로 수익을 취하여, 시장 움직임을 효과적으로 파악하고 일정 수익성을 보장하면서 좋은 수익을 얻을 수 있는 확실한 트렌드를 기반으로 거래를 수행한다. 파라미터 튜닝과 추가 지표를 통해 안정성과 수익성에 대한 추가적인 개선이 이루어질 수 있다. 명확한 거래 규칙은 이 전략을 알고리즘 거래에 매우 적합하게 만든다.
/*backtest start: 2023-10-13 00:00:00 end: 2023-11-12 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/ // © exlux99 //@version=4 strategy(title = "Crypto Scalper", overlay = true, pyramiding=1,initial_capital = 100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03) len = input(60, minval=1, title="Length EMA") src = input(close, title="Source") out = ema(src, len) // fast_length = input(title="Fast Length MACD", type=input.integer, defval=12) slow_length = input(title="Slow Length MACD", type=input.integer, defval=26) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Oscillator MA Type MACD", type=input.string, defval="EMA", options=["SMA", "EMA"]) sma_signal = input(title="Signal Line MA Type MACD", type=input.string, defval="EMA", options=["SMA", "EMA"]) // Calculating fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal start = input(0.02) increment = input(0.02) maximum = input(0.2) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := min(AF + increment, maximum) else if low < EP EP := low AF := min(AF + increment, maximum) if uptrend SAR := min(SAR, low[1]) if bar_index > 1 SAR := min(SAR, low[2]) else SAR := max(SAR, high[1]) if bar_index > 1 SAR := max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) tplong=input(0.245, step=0.005) sllong=input(1.0, step=0.005) tpshort=input(0.055, step=0.005) slshort=input(0.03, step=0.005) if (uptrend and hist >0 and close < out) strategy.entry("short", strategy.short, stop=nextBarSAR, comment="short") strategy.exit("short_tp/sl", "short", profit=close * tpshort / syminfo.mintick, loss=close * slshort / syminfo.mintick, comment='SHORT EXIT', alert_message = 'closeshort') if (not uptrend and hist <0 and close > out) strategy.entry("long", strategy.long, stop=nextBarSAR, comment="long") strategy.exit("short_tp/sl", "long", profit=close * tplong / syminfo.mintick, loss=close * sllong / syminfo.mintick, comment='LONG EXIT', alert_message = 'closelong')