Strategi ini menggunakan purata bergerak mudah (SMA) dan beberapa pengiraan matematik untuk menentukan titik beli / jual. Kami menyimpan garis SMA 100 hari sebagai asas kami. Jika harga penutupan di bawah garis ini, kami menentukan kedudukan pembukaan berdasarkan peratusan harga di bawah garis (offset rendah), yang boleh dikonfigurasi. Begitu juga, kami menetapkan peratusan offset tinggi di atas SMA 100 hari sebelum menutup kedudukan panjang. Jika kita cuba menutup terlalu awal semasa harga masih meningkat, stop loss yang tertinggal akan dicetuskan.
Strategi ini menggunakan tiga garis SMA: garis pantas (default 14 hari), garis perlahan (default 100 hari), dan garis rujukan (default 30 hari).
Ia menjadi panjang apabila harga penutupan berada di bawah garis rujukan, peratusan di bawah garis perlahan (offset rendah) lebih besar daripada nilai yang dikonfigurasikan, garis pantas meningkat dan garis perlahan jatuh.
Ia ditutup lama apabila harga penutupan di atas garis rujukan, peratusan di atas garis perlahan (offset tinggi) lebih besar daripada nilai yang dikonfigurasikan, harga penutupan meningkat selama 3 lilin berturut-turut, kita mempunyai keuntungan terbuka, dan garis pantas di atas garis perlahan.
Saiz pesanan adalah berdasarkan peratusan jumlah ekuiti, ini mengawal saiz kedudukan kami.
Peningkatan yang sepadan:
Strategi Perdagangan Fluktuasi Offset SMA mengenal pasti titik kemasukan yang optimum dengan menetapkan offset berdasarkan garis SMA yang berbeza. Mekanisme keluar menetapkan stop loss yang menyusul untuk mengunci keuntungan. Strategi ini mudah difahami dan dilaksanakan. Dengan mengoptimumkan parameter seperti tempoh SMA, offset, tahap stop loss, hasil yang lebih baik dapat dicapai. Ia sesuai untuk pelabur 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)