
Strategi ini menggabungkan dua strategi perdagangan sistem yang populer, yaitu Index Moving Average Crossover System (IMCS) dan Sea Turtle Trading System (TSTS). Sistem ini khusus digunakan untuk frame waktu Sunline, dengan cara menyesuaikan posisi secara dinamis, dan mengikuti tren pasar secara real time, dengan kemampuan pelacakan yang lebih kuat.
Strategi ini terdiri dari dua jenis strategi: strategi tren dan strategi terobosan.
Strategi tren menggunakan persilangan EMA cepat dan EMA lambat sebagai sinyal perdagangan. Panjang siklus EMA cepat ditetapkan oleh pengguna, dan panjang siklus EMA lambat 5 kali lipat dari EMA cepat.
Strategi breakout menggunakan rata-rata harga tertinggi dan terendah dalam periode tetap sebagai garis dasar. Ketika harga naik atau turun di atas garis dasar relatif lebih dari tingkat tertentu, menghasilkan sinyal over atau under.
Penyesuaian posisi berdasarkan volatilitas harga baru-baru ini dan target risiko tahunan yang ditetapkan oleh pengguna. Posisi lebih besar jika volatilitasnya lebih kecil, posisi lebih kecil jika volatilitasnya lebih besar, dan manajemen posisi dinamis setelah penyesuaian risiko.
Stop loss berdasarkan perkalian dari amplitudo riil. Tracking stop loss berdasarkan harga tertinggi dan harga terendah yang bergerak kembali.
Strategi ini memiliki keuntungan sebagai berikut:
Kombinasi dengan trend tracking dan dua sub strategi breakthrough, dapat dilakukan secara adaptif di berbagai lingkungan pasar, dengan robustitas yang lebih kuat.
Menggunakan manajemen posisi dan teknologi pengendalian risiko yang canggih, dapat secara dinamis menyesuaikan posisi, dan mengontrol risiko secara efektif.
Dengan menggunakan real volatility dan annuity risk target untuk menyesuaikan posisi, dapat diperoleh tingkat risiko portofolio yang relatif stabil di pasar yang sangat tidak stabil.
Dengan menetapkan posisi stop loss berdasarkan fluktuasi harga yang sebenarnya, Anda dapat secara efektif menghindari kerugian kecil yang tidak perlu dari stop loss.
Real-time adjustment tracking stop loss position, memungkinkan Anda untuk secara fleksibel melacak tren untuk mendapatkan keuntungan, dan stop loss timely.
Risiko utama dari strategi ini adalah:
Bergantung pada optimasi parameter, parameter yang berbeda memiliki pengaruh besar terhadap kinerja strategi, dan perlu dilakukan pengujian menyeluruh untuk mendapatkan parameter terbaik.
Tracking stop loss mungkin terlalu sering berhenti dalam tren getaran. Anda dapat dengan tepat melonggarkan amplitudo stop loss, mengoptimalkan mekanisme stop loss.
Manajemen posisi dan teknik pengendalian risiko lebih sensitif terhadap modal awal dan biaya transaksi. Modal awal yang terlalu kecil dan biaya transaksi yang terlalu tinggi dapat mempengaruhi profitabilitas strategi.
Strategi untuk menetapkan target risiko tahunan dan leverage maksimum tergantung pada volatilitas yang benar diukur. Tidak akurat diukur volatilitas dapat menyebabkan posisi terlalu besar atau terlalu kecil.
Strategi ini bertujuan untuk mengoptimalkan beberapa hal, antara lain:
Mencari kombinasi parameter yang optimal. Anda dapat menemukan pengaturan parameter yang optimal dengan mempertimbangkan lebih banyak data historis.
Memperbaiki mekanisme penghentian kerugian. Anda dapat menguji bentuk penghentian seperti penghentian bergerak, penghentian waktu, dan penghentian guncangan, dan mengoptimalkan strategi penghentian kerugian.
Optimalkan posisi dan manajemen risiko. Anda dapat menguji target risiko yang berbeda untuk menemukan portofolio risiko-penghasilan yang optimal. Anda juga dapat menguji dampak dari berbagai tingkat leverage.
Cobalah indikator tambahan lainnya. Anda dapat menambahkan lebih banyak indikator teknis untuk meningkatkan akurasi sinyal dan stabilitas strategi.
Uji siklus kepemilikan yang berbeda. Anda dapat mencoba menggunakan siklus yang lebih tinggi untuk membantu keputusan untuk meningkatkan akurasi konfigurasi kepemilikan.
Strategi ini mengintegrasikan pelacakan tren dan strategi perdagangan tren dua kategori besar, menggunakan teknologi manajemen posisi dinamis yang canggih, mengimplementasikan konfigurasi posisi yang disesuaikan dengan risiko, dapat mengontrol risiko secara efektif sambil melacak pergerakan pasar, memiliki kemampuan menghasilkan keuntungan yang kuat, layak untuk diuji dan dioptimalkan lebih lanjut.
/*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"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Crunchster1
//@version=5
strategy(title="Crunchster's Turtle and Trend System", shorttitle="Turtle Trend", overlay=true, slippage=10, pyramiding=1, precision = 4, calc_on_order_fills = false, calc_on_every_tick = false, default_qty_value = 0.1, initial_capital = 1000, commission_value = 0.06, process_orders_on_close = true)
// Inputs and Parameters
src = input(close, 'Source', group='Strategy Settings')
length = input.int(title="Lookback period for fast EMA", defval=10, minval=2, group='Strategy Settings', tooltip='This sets the lookback period for the fast exponential moving average. The slow EMA is 5x the fast EMA length')
blength = input.int(title="Lookback period for Breakout", defval=20, minval=5, step=5, group='Strategy Settings')
long = input(true, 'Long', inline='08', group='Strategy toggle')
short = input(true, 'Short', inline='08', group='Strategy toggle', tooltip='Toggle long/short strategy on/off')
EMAwt = input(false, 'Trend', inline='01', group='Strategy toggle')
breakwt = input(true, 'Breakout', inline='01', group='Strategy toggle', tooltip='Toggle trend/breakout strategy on/off')
stopMultiple = input.float(2, 'Stop multiple', step=0.5, group='Risk Management Settings', tooltip='Multiple for ATR, setting hard stop loss from entry price')
trail = input.int(10, 'Trail lookback', step=5, group='Risk Management Settings', tooltip='Lookback period for the trailing stop')
lev = input.float(1, 'Max Leverage', step=0.5, group='Risk Management Settings', tooltip='Max leverage sets maximum allowable leverage of total capital (initial capital + any net profit), capping maximum volatility adjusted position size')
riskT = input.float(15, maxval=75, title='Annualised Volatility Target %', group='Risk Management Settings', tooltip='Specify annual risk target, used to determine volatility adjusted position size. Annualised daily volatility is referenced to this value and position size adjusted accordingly')
comp = input(true, 'Compounding', inline='09', group='Risk Management Settings')
Comppct = input.float(50, '%', step=5, inline='09', group='Risk Management Settings', tooltip='Toggle compounding of profit, and set % of profit to compound')
// Backtesting period
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31, inline='04', group='Backtest range')
FromMonth = input.int(defval=1, title='From Mon', minval=1, maxval=12, inline='04', group='Backtest range')
FromYear = input.int(defval=2018, title='From Yr', minval=1900, inline='04', group='Backtest range', tooltip='Set start of backtesting period')
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31, inline='05', group='Backtest range')
ToMonth = input.int(defval=1, title='To Mon', minval=1, maxval=12, inline='05', group='Backtest range')
ToYear = input.int(defval=9999, title='To Yr', minval=1900, inline='05', group='Backtest range', tooltip='Set end of backtesting period')
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window = time >= start and time <= finish
// Breakout strategy
lower = ta.lowest(low[1], blength)
upper = ta.highest(high[1], blength)
basis = math.avg(upper, lower)
signal = 20*(close - basis) / (upper - lower)
// Trend strategy
fEMA = ta.ema(close[1], length)
sEMA = ta.ema(close[1], length*5)
emadiff = fEMA - sEMA
nemadiff = 5*emadiff/(ta.stdev(close - close[1], 252))
//Risk Management formulae
strategy.initial_capital = 50000
tr = math.max(high - low, math.abs(high - close), math.abs(low - close)) //True range
stopL = ta.sma(tr, 14) //Average true range
stdev = ta.stdev(close-close[1], 14) //volatility of recent returns
maxcapital = strategy.initial_capital+strategy.netprofit //Maximum capital available to invest - initial capital net of profit
annvol = 100*math.sqrt(365)*stdev/close //converts recent volatility of returns into annualised volatility of returns - assumes daily timeframe
risk = 1.1
if comp
risk := (strategy.initial_capital+(Comppct*strategy.netprofit/100))//adjust investment capital to include compounding
else
risk := strategy.initial_capital
shares = (risk * (riskT/annvol)) / close //calculates volatility adjusted position size, dependent on user specified annualised risk target
if ((shares*close) > lev*maxcapital) //ensures position size does not exceed available capital multiplied by user specified maximum leverage
shares := lev*maxcapital/close
//To set the price at the entry point of trade
Posopen() =>
math.abs(strategy.position_size[1]) <= 0 and math.abs(strategy.position_size) > 0
var float openN = na
if Posopen()
openN := stopL
// Trailing stop
tlower = ta.lowest(low[1], trail)
tupper = ta.highest(high[1], trail)
tbasis = math.avg(tupper, tlower)
tsignal = 20*(close - tbasis) / (tupper - tlower)
// Strategy Rules
if EMAwt
if long
longCondition2 = (nemadiff >2 and nemadiff[1] <2) and window
exitlong = tsignal <= -10
if (longCondition2)
strategy.entry('Trend Long!', strategy.long, qty=shares)
if strategy.position_size > 0
strategy.exit('Stop Long', from_entry = 'Trend Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
if (exitlong)
strategy.close('Trend Long!', immediately = true)
if short
shortCondition2 = (nemadiff <-1 and nemadiff[1] >-1) and window
exitshort = tsignal >= 10
if (shortCondition2)
strategy.entry('Trend Short!', strategy.short, qty=shares)
if strategy.position_size < 0
strategy.exit('Stop Short', from_entry = 'Trend Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
if (exitshort)
strategy.close('Trend Short!', immediately = true)
if breakwt
if long
longCondition1 = (signal >= 10) and window
exitlong = tsignal <= -10
if (longCondition1)
strategy.entry('Break Long!', strategy.long, qty=shares)
if strategy.position_size > 0
strategy.exit('Stop Long', from_entry = 'Break Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
if (exitlong)
strategy.close('Break Long!', immediately = true)
if short
shortCondition1 = (signal <= -10) and window
exitshort = tsignal >= 10
if (shortCondition1)
strategy.entry('Break Short!', strategy.short, qty=shares)
if strategy.position_size < 0
strategy.exit('Stop Short', from_entry = 'Break Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
if (exitshort)
strategy.close('Break Short!', immediately = true)
// Visuals of trend and direction
plot(nemadiff, title='EMA Forecast', color=color.black, display=display.none)
plot(ta.sma(ta.median(math.sqrt(math.pow(nemadiff,2)), 700), 350), 'Forecast mean', color=color.rgb(245, 0, 0), display=display.none)
MAColor = fEMA > sEMA ? #00ff00 : #ff0000
MA1 = plot(fEMA, title='Fast EMA', color=MAColor)
MA2 = plot(sEMA, title='Slow EMA', color=MAColor)
fill(MA1, MA2, title='Band Filler', color=MAColor)