この戦略は,移動平均値,ATR指標,およびウィリアムズ指標を組み合わせて,日々のFX取引を行う.まず移動平均値を通じて価格動向と潜在的な逆転点を判断し,その後,トレーディング信号をさらに確認するためにウィリアムズ指標を使用し,ストップ損失とポジションサイズを計算するためにATR指標を利用する.
移動平均期間の調整,より多くの指標の組み合わせ,手動的介入などの方法により戦略をさらに最適化し改善することができます.
この戦略は,トレンド判断とインジケーターフィルターを組み合わせて日々の取引を行う.また,ダイナミックストップ・ロスト,リスクコントロール,および他の手段を活用して取引リスクを制御する.戦略のパフォーマンスをさらに向上させるために,パラメータチューニングと方法の組み合わせによって最適化する余地が多く存在する.
/*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)