Strategi ini menggunakan moving average (SMA) sederhana dan beberapa perhitungan matematika untuk menentukan titik beli/jual. Kami menyimpan garis SMA 100 hari sebagai dasar kami. Jika harga penutupan di bawah garis ini, kami menentukan posisi pembukaan berdasarkan persentase harga di bawah garis (offset rendah), yang dapat dikonfigurasi. Demikian pula, kami menetapkan persentase offset tinggi di atas SMA 100 hari sebelum menutup posisi panjang. Jika kami mencoba menutup terlalu awal sementara harga masih naik, stop loss trailing akan dipicu.
Strategi ini menggunakan tiga garis SMA: garis cepat (default 14 hari), garis lambat (default 100 hari), dan garis referensi (default 30 hari).
Ini menjadi panjang ketika harga penutupan berada di bawah garis referensi, persentase di bawah garis lambat (offset rendah) lebih besar dari nilai yang dikonfigurasi, garis cepat naik dan garis lambat turun.
Ini menutup panjang ketika harga penutupan di atas garis referensi, persentase di atas garis lambat (offset tinggi) lebih besar dari nilai yang dikonfigurasi, harga penutupan naik selama 3 lilin berturut-turut, kita memiliki keuntungan terbuka, dan garis cepat di atas garis lambat.
Ukuran pesanan didasarkan pada persentase dari total ekuitas, ini mengontrol ukuran posisi kami.
Peningkatan yang sesuai:
Strategi Trading Fluktuasi Ofset SMA mengidentifikasi titik masuk optimal dengan menetapkan offset berdasarkan garis SMA yang berbeda. Mekanisme keluar menetapkan stop loss trailing untuk mengunci keuntungan. Strategi ini sederhana untuk dipahami dan diimplementasikan. Dengan mengoptimalkan parameter seperti periode SMA, offset, tingkat stop loss, hasil yang lebih baik dapat dicapai. Ini cocok untuk investor jangka menengah dan panjang yang mencari keuntungan yang stabil.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // Author: Sonny Parlin (highschool dropout) strategy(shorttitle="SMA+Strategy", title="SMA Offset Strategy", overlay=true, currency=currency.USD, initial_capital=10000) // Inputs and variables ss = input(14, minval=10, maxval=50, title="SMA Fast (days)") ff = input(100, minval=55, maxval=200, title="SMA Slow (days)") ref = input(30, minval=20, maxval=50, title="SMA Reference (days)") lowOffset = input(0.001, "Low Offset (%)", minval=0, step=0.001) highOffset = input(0.0164, "High Offset (%)", minval=0, step=0.0001) orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01) // SMA smaFast = sma(close, ss) smaSlow = sma(close, ff) smaRef = sma(close, ref) distanceLow = (close - smaSlow) / close distanceHigh = (close - smaSlow) / close // Set up SMA plot but don't show by default plot(smaFast, "smaFast", color=#00ff00, display = 0) plot(smaSlow, "smaSlow", color=#ff0000, display = 0) plot(smaRef, "smaRef", color=#ffffff, display = 0) // The buy stratey: // guard that the low is under our sma low reference line by our lowOffset %, // default is 0.001. (low < smaRef) and (distanceLow > lowOffset) // SMA fast is on the rise and SMA slow is falling and they are very likely // to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) enterLong = (low < smaRef) and (distanceLow > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow, 1)) // The sell Strategy: // Guard that close is higher than our sma high reference line by our // highOffset %, default is 0.0164. (close > smaRef) and (distanceHigh > highOffset) // Guard that close has risen by 3 candles in a row (rising(close,3)) // Guard that we currently have profit (strategy.openprofit > 0) // Guard that SMA fast is higher than smaSlow (smaFast > smaSlow) // If it keeps going up past our close position the trailing stoploss will kick in! enterShort = (close > smaRef) and (distanceHigh > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow) // Order size is based on total equity // Example 1: // startingEquity = 2000 // close = 47434.93 // orderStake = 0.45 // (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900 // Example 2: // startingEquity = 2000 // close = 1.272 // orderStake = 0.45 // (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900 orderSize = (strategy.equity * orderStake) / close // Trailing Stoploss // I'm using 1.35 as my default value, play with this for different results. longTrailPerc = input(title="Trailing Stoploss (%)", type=input.float, minval=0.0, step=0.1, defval=1.35) * 0.01 longStopPrice = 0.0 longStopPrice := if (strategy.position_size > 0) stopValue = close * (1 - longTrailPerc) max(stopValue, longStopPrice[1]) else 0 if (enterLong) strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0) if (enterShort) strategy.exit(id="Close Long Position", stop=longStopPrice) //plot(strategy.equity)