이 전략은 EMA, VWAP, MACD, 볼링거 밴드 및 샤프 트렌드 사이클을 포함한 5 가지 주요 지표를 통합하여 가격이 특정 범위 내에서 역전되는 전환점을 식별하고 구매 및 판매 신호를 생성합니다. 이 전략의 장점은 잘못된 신호를 줄이고 수익성을 향상시키기 위해 다양한 시장 조건에 따라 다른 지표를 결합하는 유연성입니다. 그러나 신호 식별 및 부적절한 매개 변수 조정의 위험도 있습니다. 전반적으로 전략은 명확한 논리 흐름과 강력한 실용적 가치를 가지고 있습니다.
EMA는 전체적인 트렌드 방향을 판단하고, 트렌드에 따라만 구매합니다.
VWAP는 기관의 현금 흐름을 판단합니다. 기관이 구매할 때만 구매합니다.
MACD는 단기 트렌드 및 동력 변화를 판단합니다. MACD 라인 크로스오버 신호 라인은 구매/판매 신호입니다.
볼링거 밴드는 과잉 구매 및 과잉 판매 조건을 판단합니다.
샤프 트렌드 사이클은 단기 범위형 구조를 판단하고, 높은/저한 임계점을 초과하면 구매/판매 신호를 제안합니다.
모든 5개 지표가 신호에 동의할 때 구매/판매 명령을 보내십시오.
자본 관리를 최적화하기 위해 손해를 멈추고 이익을 취하십시오.
EMA, VWAP, MACD, BB 및 STC와 같은 지표의 조합을 사용하면 교차 검증이 모든 개별 지표에서 잘못된 신호를 제거하여 신뢰성을 향상시킵니다.
표시기를 켜고 끄는 기능으로 다양한 제품과 시장 환경에 대한 이상적인 표시기를 결합하여 적응력을 향상시킬 수 있습니다.
스톱 로스 및 취득은 단일 거래 손실을 제한하고 이익을 고정하여 더 나은 자본 관리를 가능하게합니다.
간단한 직관적 인 지표와 자세한 코드 코멘트가 전체 전략 논리를 이해하기 쉽고 수정 할 수 있습니다.
합리적인 조정으로 널리 사용되는 지표는 광범위한 최적화 없이 즉시 괜찮은 결과를 얻을 수 있습니다.
EMA, MACD 등은 가격 변화를 식별하는 데 지연되어 가장 좋은 입시 시기를 놓칠 수 있습니다.
나쁜 지표 매개 변수는 과도한 잘못된 신호를 생성하고 전략을 깨뜨릴 것입니다.
다중 지표 조합은 개선되지만 승률을 보장하지 않습니다. 시장 체제 변화는 승률 감소로 이어질 수 있습니다.
만약 스톱 로스가 너무 긴다면, 정상적인 가격 변동이 중단되어 불필요한 손실이 발생할 수 있습니다.
다중 지표 신호의 신뢰성을 측정하는 기차 모델, 거짓 신호를 필터링합니다.
가격 축적을 식별하기 위해 OBV와 같은 양적 지표를 추가하여 구매 포인트 확실성을 향상시킵니다.
이 전략을 위해 더 적합한 후속 정지 또는 이윤 취득 논리를 연구 더 나은 자본 관리를 최적화하기 위해.
더 체계적인 백테스트를 실시하여 각 지표에 대한 최적의 매개 변수를 찾아 내며 안정성을 향상시킵니다.
트레이딩 API에 연결하여 자동 주문 실행을 허용하여 완전히 자동화 된 손-オフ 전략 실행을 가능하게합니다.
이 전략은 여러 기술적 지표의 강점을 명확한 논리 흐름과 강력한 실용적 가치로 결합합니다. 자율적인 거래 의사 결정 지원 또는 직접 알고리즘 거래로 사용될 수 있습니다. 그러나 특정 제품 및 시장 환경에 기반한 최적화 및 조정은 일관성있는 수익성있는 라이브 거래 전에 위험을 줄이고 안정성을 향상시키는 데 필요합니다.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © MakeMoneyCoESTB2020 //*********************Notes for continued work*************** //3) add a Table of contents to each section of code //4) add candle stick pattern considerations to chart //5) add an input value for DTE range to backtest //7) add abilit to turn on/off MACD plot //9) //************************************************************ //Hello my fellow investors //After hours of reading, backtesting, and YouTube video watching //I discovered that 200EMA, VWAP, BB, MACD, and STC //produce the most consistent results for investment planning. //This strategy allows you to pick between the aforementioned indicators or layer them together. //It works on the pricipal of: //1) Always follow the market trend - buy/sell above/below 200EMA //2) Follow corporate investing trends - buy/sell above/below VWAP //3) Apply MACD check - buy--> MACD line above signal line // and corssover below histogram \\ sell --> MACD line below signal line // and crossover above histogram. //4) Check volitility with price against BB limits upper/Sell or lower/buy //5) When STC crosses about 10 buy and when it drops below 90 sell //6) Exit position when stop loss is triggered or profit target is hit. BB also provides a parameter to exit positions. //This code is the product of many hours of hard work on the part of the greater tradingview community. The credit goes to everyone in the community who has put code out there for the greater good. //Happy Hunting! //Title // strategy("WOMBO COMBO: 100/200EMA & VWAP & MACD", shorttitle="WOMBO COMBO", default_qty_type=strategy.percent_of_equity, default_qty_value=1.5, initial_capital=10000,slippage=2, currency=currency.USD, overlay=true) //define calculations price source price = input(title="Price Source", defval=close) //*************************** //Calculate 20/50/100/200EMA EMAlength = input(title="EMA_Length", defval=200) EMA=ema(price, EMAlength) //plot EMA ColorEMA=EMAlength==200?color.blue:EMAlength==100?color.aqua:EMAlength==50?color.orange:color.red plot(EMA, title = "EMA", color = ColorEMA) //***************************** //calculate VWAP ColorVWAP = (price > vwap) ? color.lime : color.maroon plot(vwap, title = "VWAP", color=ColorVWAP, linewidth=2) //***************************** //calculate MACD //define variables for speed fast = 12, slow = 26 //define parameters to calculate MACD fastMA = ema(price, fast) slowMA = ema(price, slow) //define MACD line macd = fastMA - slowMA //define SIGNAL line signal = sma(macd, 9) //plot MACD line //plot(macd, title = "MACD", color=color.orange) //plot signal line //plot(signal, title = "Signal", color=color.purple) //plot histogram //define histogram colors //col_grow_above = color.green //col_grow_below = color.red //col_fall_above = color.lime //col_fall_below = color.maroon //define histogram value //hist = macd - signal //plot histogram //plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) //*************************************** //Calculate Bollinger Bands //Define BB input variables //lengthBB = input(20, minval=1) //multBB = input(2.0, minval=0.001, maxval=50) lengthBB = 20 multBB = 2 //define BB average basisBB = sma(price, lengthBB) //define BB standar deviation devBB = multBB * stdev(price, lengthBB) //define BB upper and lower limits upperBB = basisBB + devBB lowerBB = basisBB - devBB //Plot BB graph ShowBB = input(title="Show BB", defval="Y", type=input.string, options=["Y", "N"]) transP = (ShowBB=="Y") ? 0 : 100 plot (upperBB, title = "BB Upper Band", color = color.aqua, transp=transP) plot (basisBB, title = "BB Average", color = color.red, transp=transP) plot (lowerBB, title = "BB Lower Band", color = color.aqua, transp=transP) //************************************************* //Calculate STC //fastLength = input(title="MACD Fast Length", type=input.integer, defval=12) //slowLength = input(title="MACD Slow Length", type=input.integer, defval=26) fastLength = 23 slowLength = 50 cycleLength = input(title="Cycle Length", type=input.integer, defval=10) //d1Length = input(title="1st %D Length", type=input.integer, defval=3) //d2Length = input(title="2nd %D Length", type=input.integer, defval=3) d1Length = 3 d2Length = 3 srcSTC = close macdSTC = ema(srcSTC, fastLength) - ema(srcSTC, slowLength) k = nz(fixnan(stoch(macdSTC, macdSTC, macdSTC, cycleLength))) d = ema(k, d1Length) kd = nz(fixnan(stoch(d, d, d, cycleLength))) stc = ema(kd, d2Length) stc := stc > 100 ? 100 : stc < 0 ? 0 : stc upperSTC = input(title="Upper STC limit", defval=90) lowerSTC = input( title="Lower STC limit", defval=10) ma1length=35 ma1 = ema(close,ma1length) ma2 = ema(close,EMAlength) //STCbuy = crossover(stc, lowerSTC) and ma1>ma2 and close>ma1 //STCsell = crossunder(stc, upperSTC) and ma1<ma2 and close<ma1 STCbuy = crossover(stc, lowerSTC) STCsell = crossunder(stc, upperSTC) //************************************************* //Candle stick patterns //DojiSize = input(0.05, minval=0.01, title="Doji size") //data=(abs(open - close) <= (high - low) * DojiSize) //plotchar(data, title="Doji", text='Doji', color=color.white) data2=(close[2] > open[2] and min(open[1], close[1]) > close[2] and open < min(open[1], close[1]) and close < open ) //plotshape(data2, title= "Evening Star", color=color.red, style=shape.arrowdown, text="Evening\nStar") data3=(close[2] < open[2] and max(open[1], close[1]) < close[2] and open > max(open[1], close[1]) and close > open ) //plotshape(data3, title= "Morning Star", location=location.belowbar, color=color.lime, style=shape.arrowup, text="Morning\nStar") data4=(open[1] < close[1] and open > close[1] and high - max(open, close) >= abs(open - close) * 3 and min(close, open) - low <= abs(open - close)) //plotshape(data4, title= "Shooting Star", color=color.red, style=shape.arrowdown, text="Shooting\nStar") data5=(((high - low)>3*(open -close)) and ((close - low)/(.001 + high - low) > 0.6) and ((open - low)/(.001 + high - low) > 0.6)) //plotshape(data5, title= "Hammer", location=location.belowbar, color=color.white, style=shape.diamond, text="H") data5b=(((high - low)>3*(open -close)) and ((high - close)/(.001 + high - low) > 0.6) and ((high - open)/(.001 + high - low) > 0.6)) //plotshape(data5b, title= "Inverted Hammer", location=location.belowbar, color=color.white, style=shape.diamond, text="IH") data6=(close[1] > open[1] and open > close and open <= close[1] and open[1] <= close and open - close < close[1] - open[1] ) //plotshape(data6, title= "Bearish Harami", color=color.red, style=shape.arrowdown, text="Bearish\nHarami") data7=(open[1] > close[1] and close > open and close <= open[1] and close[1] <= open and close - open < open[1] - close[1] ) //plotshape(data7, title= "Bullish Harami", location=location.belowbar, color=color.lime, style=shape.arrowup, text="Bullish\nHarami") data8=(close[1] > open[1] and open > close and open >= close[1] and open[1] >= close and open - close > close[1] - open[1] ) //plotshape(data8, title= "Bearish Engulfing", color=color.red, style=shape.arrowdown, text="Bearish\nEngulfing") data9=(open[1] > close[1] and close > open and close >= open[1] and close[1] >= open and close - open > open[1] - close[1] ) //plotshape(data9, title= "Bullish Engulfing", location=location.belowbar, color=color.lime, style=shape.arrowup, text="Bullish\nEngulfling") upper = highest(10)[1] data10=(close[1] < open[1] and open < low[1] and close > close[1] + ((open[1] - close[1])/2) and close < open[1]) //plotshape(data10, title= "Piercing Line", location=location.belowbar, color=color.lime, style=shape.arrowup, text="Piercing\nLine") lower = lowest(10)[1] data11=(low == open and open < lower and open < close and close > ((high[1] - low[1]) / 2) + low[1]) //plotshape(data11, title= "Bullish Belt", location=location.belowbar, color=color.lime, style=shape.arrowup, text="Bullish\nBelt") data12=(open[1]>close[1] and open>=open[1] and close>open) //plotshape(data12, title= "Bullish Kicker", location=location.belowbar, color=color.lime, style=shape.arrowup, text="Bullish\nKicker") data13=(open[1]<close[1] and open<=open[1] and close<=open) //plotshape(data13, title= "Bearish Kicker", color=color.red, style=shape.arrowdown, text="Bearish\nKicker") data14=(((high-low>4*(open-close))and((close-low)/(.001+high-low)>=0.75)and((open-low)/(.001+high-low)>=0.75)) and high[1] < open and high[2] < open) //plotshape(data14, title= "Hanging Man", color=color.red, style=shape.arrowdown, text="Hanging\nMan") data15=((close[1]>open[1])and(((close[1]+open[1])/2)>close)and(open>close)and(open>close[1])and(close>open[1])and((open-close)/(.001+(high-low))>0.6)) //plotshape(data15, title= "Dark Cloud Cover", color=color.red, style=shape.arrowdown, text="Dark\nCloudCover") //**********Long & Short Entry Calculations*********************************** //Define countback variable countback=input(minval=0, maxval=5, title="Price CountBack", defval=0) //User input for what evaluations to run: EMA, VWAP, MACD, BB EMA_Y_N=input(defval = "N", title="Run EMA", type=input.string, options=["Y", "N"]) VWAP_Y_N=input(defval = "N", title="Run VWAP", type=input.string, options=["Y", "N"]) MACD_Y_N=input(defval = "N", title="Run MACD", type=input.string, options=["Y", "N"]) BB_Y_N=input(defval = "N", title="Run BB", type=input.string, options=["Y", "N"]) STC_Y_N=input(defval = "Y", title="Run STC", type=input.string, options=["Y", "N"]) //long entry condition dataHCLB=(iff(STC_Y_N=="Y", STCbuy, true) and iff(EMA_Y_N=="Y", price[countback]>EMA, true) and iff(VWAP_Y_N=="Y", price[countback]>vwap, true) and iff(MACD_Y_N=="Y", crossunder(signal[countback], macd[countback]), true) and iff(MACD_Y_N=="Y", macd[countback]<0, true) and iff(BB_Y_N=="Y", crossunder(price[countback], lowerBB), true)) plotshape(dataHCLB, title= "HC-LB", color=color.lime, style=shape.circle, text="HC-LB") strategy.entry("HC-Long", strategy.long, comment="HC-Long", when = dataHCLB) //short entry condition dataHCSB=(iff(STC_Y_N=="Y", STCsell, true) and iff(EMA_Y_N=="Y", price[countback]<EMA, true) and iff(VWAP_Y_N=="Y", price[countback]<vwap, true) and iff(MACD_Y_N=="Y", crossunder(macd[countback], signal[countback]), true) and iff(MACD_Y_N=="Y", signal[countback]>0, true) and iff(BB_Y_N=="Y", crossover(price[countback], upperBB), true)) plotshape(dataHCSB, title= "HC-SB", color=color.fuchsia, style=shape.circle, text="HC-SB") strategy.entry("HC-Short", strategy.short, comment="HC-Short", when=dataHCSB) //******************Exit Conditions****************************** // Profit and Loss Exit Calculations // User Options to Change Inputs (%) stopPer = input(5, title='Stop Loss %', type=input.float) / 100 takePer = input(10, title='Take Profit %', type=input.float) / 100 // Determine where you've entered and in what direction longStop = strategy.position_avg_price * (1 - stopPer) shortStop = strategy.position_avg_price * (1 + stopPer) shortTake = strategy.position_avg_price * (1 - takePer) longTake = strategy.position_avg_price * (1 + takePer) //exit position conditions and orders if strategy.position_size > 0 or crossunder(price[countback], upperBB) strategy.exit(id="Close Long", stop=longStop, limit=longTake) if strategy.position_size < 0 or crossover(price[countback], lowerBB) strategy.exit(id="Close Short", stop=shortStop, limit=shortTake)