यह रणनीति दैनिक विदेशी मुद्रा व्यापार के लिए चलती औसत, एटीआर संकेतक और विलियम्स संकेतक को जोड़ती है। यह पहले चलती औसत के माध्यम से मूल्य प्रवृत्ति और संभावित उलट बिंदुओं का न्याय करती है, फिर ट्रेडिंग संकेतों की पुष्टि करने के लिए विलियम्स संकेतक का उपयोग करती है, और स्टॉप लॉस और स्थिति आकार की गणना करने के लिए एटीआर संकेतक का लाभ उठाती है।
चलती औसत अवधि के समायोजन, अधिक संकेतकों के संयोजन, मैन्युअल हस्तक्षेप आदि जैसे तरीकों से रणनीति को और अनुकूलित करने और सुधारने में मदद मिल सकती है।
यह रणनीति दैनिक व्यापार के लिए प्रवृत्ति निर्णय और संकेतक फ़िल्टर को जोड़ती है। यह गतिशील स्टॉप लॉस, जोखिम नियंत्रण और व्यापार जोखिम को नियंत्रित करने के अन्य साधनों का भी लाभ उठाती है। रणनीति प्रदर्शन में और सुधार के लिए पैरामीटर ट्यूनिंग और विधि संयोजन द्वारा अनुकूलन के लिए बहुत जगह मौजूद है।
/*backtest start: 2023-12-29 00:00:00 end: 2024-01-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("GBPJPY DAILY FX",initial_capital = 1000,currency="USD", overlay=true) UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations") // // === /INPUTS === // === BASE FUNCTIONS === haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low //INDICATOR--------------------------------------------------------------------- //Average True Range (1. RISK) atr_period = 2 atr = atr(atr_period) //Ichimoku Cloud - Kijun Sen (2. BASELINE) ks_period = 20 kijun_sen = (highest(haHigh,ks_period) + lowest(haLow,ks_period))/2 base_long = haOpen < kijun_sen and haClose > kijun_sen base_short = haOpen > kijun_sen and haClose < kijun_sen //Williams Percent Range (3. Confirmation#1) use_wpr = true wpr_len = 4 wpr = -100*(highest(haHigh,wpr_len) - haClose)/(highest(haHigh,wpr_len) - lowest(haLow,wpr_len)) wpr_up = -35 wpr_low = -70 conf1_long = wpr >= wpr_up conf1_short = wpr <= wpr_low if(use_wpr == false) conf1_long := true conf1_short := true //TRADE LOGIC------------------------------------------------------------------- //Long Entry //if -> WPR crosses below -39 AND MACD line is less than signal line l_en = base_long and conf1_long //Long Exit //if -> WPR crosses above -14 l_ex = haClose < kijun_sen //Short Entry //if -> WPR crosses above -39 AND MACD line is greater than signal line s_en = base_short and conf1_short //Short Exit //if -> WPR crosses under -14 s_ex = haClose > kijun_sen strategy.initial_capital = 50000 //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss isTwoDigit = input(true,"Is this a 2 digit pair? (JPY, XAU, XPD...") risk = input(50,"Risk %")/100 //risk % per trade equity_protector = input(30,"Equity Protection %")/100 //equity protection % stop = atr*100000*input(1,"Average True Range multiplier") //Stop level if(isTwoDigit) stop := stop/100 target = input(100, "Target TP in Points") //TP level //Calculate current DD and determine if stopout is necessary equity_stopout = false if(floating<0 and abs(floating/balance)>equity_protector) equity_stopout := true //Calculate the size of the next trade temp01 = balance * risk //Risk in USD temp02 = temp01/stop //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 1) size := 1 //Set min. lot size //TRADE EXECUTION--------------------------------------------------------------- strategy.close_all(equity_stopout) //Close all trades w/equity protector is_open = strategy.opentrades > 0 fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true if(time_cond) strategy.entry("l_en",true,1,oca_name="a",when=l_en and not is_open) //Long entry strategy.entry("s_en",false,1,oca_name="a",when=s_en and not is_open) //Short entry strategy.exit("S/L","l_en",loss=stop, profit=target) //Long exit (stop loss) strategy.close("l_en",when=l_ex) //Long exit (exit condition) strategy.exit("S/L","s_en",loss=stop, profit=target) //Short exit (stop loss) strategy.close("s_en",when=s_ex) //Short exit (exit condition)