この戦略は,複数の主流の技術指標の優位性を統合している.パラメータ最適化と論理精製を通じて,取引シグナル品質とストップ損失をバランスする.一定の汎用性と安定した収益性.さらなる最適化は,勝利率と収益性を向上させる.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //study(title="@sentenzal strategy", shorttitle="@sentenzal strategy", overlay=true) strategy(title="@sentenzal strategy", shorttitle="@sentenzal strategy", overlay=true ) smoothK = input(3, minval=1) smoothD = input(3, minval=1) lengthRSI = input(14, minval=1) lengthStoch = input(14, minval=1) overbought = input(80, minval=1) oversold = input(20, minval=1) smaLengh = input(100, minval=1) smaLengh2 = input(50, minval=1) smaLengh3 = input(20, minval=1) src = input(close, title="RSI Source") testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testPeriod() => time >= testPeriodStart ? true : false rsi1 = rsi(src, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) crossBuy = crossover(k, d) and k < oversold crossSell = crossunder(k, d) and k > overbought dcLower = lowest(low, 10) dcUpper = highest(high, 10) heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close) heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open) heikinashi_low = security(heikinashi(syminfo.tickerid), timeframe.period, low) heikinashi_high = security(heikinashi(syminfo.tickerid), timeframe.period, high) heikinashiPositive = heikinashi_close >= heikinashi_open heikinashiBuy = heikinashiPositive == true and heikinashiPositive[1] == false and heikinashiPositive[2] == false heikinashiSell = heikinashiPositive == false and heikinashiPositive[1] == true and heikinashiPositive[2] == true //plotshape(heikinashiBuy, style=shape.arrowup, color=green, location=location.belowbar, size=size.tiny) //plotshape(heikinashiSell, style=shape.arrowdown, color=red, location=location.abovebar, size=size.tiny) buy = (crossBuy == true or crossBuy[1] == true or crossBuy[2] == true) and (heikinashiBuy == true or heikinashiBuy[1] == true or heikinashiBuy[2] == true) sell = (crossSell == true or crossSell[1] == true or crossSell[2] == true) and (heikinashiSell == true or heikinashiSell[1] == true or heikinashiSell[2] == true) mult = timeframe.period == '15' ? 4 : 1 mult2 = timeframe.period == '240' ? 0.25 : mult movingAverage = sma(close, round(smaLengh)) movingAverage2 = sma(close, round(smaLengh2)) movingAverage3 = sma(close, round(smaLengh3)) uptrend = movingAverage < movingAverage2 and movingAverage2 < movingAverage3 and close > movingAverage downtrend = movingAverage > movingAverage2 and movingAverage2 > movingAverage3 and close < movingAverage signalBuy = (buy[1] == false and buy[2] == false and buy == true) and uptrend signalSell = (sell[1] == false and sell[2] == false and sell == true) and downtrend takeProfitSell = (buy[1] == false and buy[2] == false and buy == true) and uptrend == false takeProfitBuy = (sell[1] == false and sell[2] == false and sell == true) and uptrend plotshape(signalBuy, style=shape.triangleup, color=green, location=location.belowbar, size=size.tiny) plotshape(signalSell, style=shape.triangledown, color=red, location=location.abovebar, size=size.tiny) plot(movingAverage, linewidth=3, color=orange, transp=0) plot(movingAverage2, linewidth=2, color=purple, transp=0) plot(movingAverage3, linewidth=1, color=navy, transp=0) alertcondition(signalBuy, title='Signal Buy', message='Signal Buy') alertcondition(signalSell, title='Signal Sell', message='Signal Sell') strategy.close("L", when=dcLower[1] > low) strategy.close("S", when=dcUpper[1] < high) strategy.entry("L", strategy.long, 1, when = signalBuy and testPeriod() and uptrend) strategy.entry("S", strategy.short, 1, when = signalSell and testPeriod() and uptrend ==false) //strategy.exit("Exit Long", from_entry = "L", loss = 25000000, profit=25000000) //strategy.exit("Exit Short", from_entry = "S", loss = 25000000, profit=25000000)