Sistem penjejakan arah aliran pelarasan kedudukan dinamik


Tarikh penciptaan: 2024-01-26 14:41:08 Akhirnya diubah suai: 2024-01-26 14:41:08
Salin: 0 Bilangan klik: 616
1
fokus pada
1617
Pengikut

Sistem penjejakan arah aliran pelarasan kedudukan dinamik

Gambaran keseluruhan

Strategi ini menggabungkan dua strategi perdagangan sistem yang popular, iaitu sistem penyambung purata bergerak indeks dan sistem perdagangan tsunami. Sistem ini khusus digunakan untuk jangka masa solar, dengan menyesuaikan kedudukan secara dinamik, dan mengikuti trend pasaran dalam masa nyata, dengan keupayaan pengesanan yang kuat.

Prinsip Strategi

Strategi ini terdiri daripada dua jenis strategi: strategi trend dan strategi terobosan.

Strategi trend menggunakan persilangan EMA pantas dan EMA perlahan sebagai isyarat perdagangan. Panjang kitaran EMA pantas ditetapkan oleh pengguna, dan panjang kitaran EMA perlahan adalah 5 kali ganda daripada EMA pantas. Isyarat diperoleh dari perbezaan EMA pantas dibahagikan dengan 252 perbezaan standard kadar pulangan kitaran, menghasilkan isyarat perdagangan yang lebih dipercayai setelah penyesuaian kadar turun naik.

Strategi penembusan menggunakan purata harga tertinggi dan terendah dalam tempoh tetap sebagai garis asas. Apabila harga naik atau turun berbanding garis asas melebihi tahap tertentu, ia menghasilkan isyarat untuk melakukan lebih banyak atau lebih pendek.

Penyesuaian kedudukan berdasarkan turun naik harga terkini dan sasaran risiko tahunan yang ditetapkan oleh pengguna. Kedudukan lebih besar apabila turun naiknya lebih kecil, kedudukan lebih kecil apabila turun naiknya lebih besar, dan pengurusan kedudukan dinamik selepas penyesuaian risiko.

Penangguhan berdasarkan pengali ganda gelombang sebenar. Mengesan penangguhan berdasarkan harga tertinggi dan harga terendah yang bergerak.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Gabungan dengan trend-following dan strategi dua anak untuk menembusi, ia boleh bertukar secara adaptif dalam keadaan pasaran yang berbeza, dengan ketegangan yang kuat.

  2. Menggunakan teknologi pengurusan kedudukan dan kawalan risiko yang maju, anda boleh menyesuaikan kedudukan secara dinamik dan mengawal risiko dengan berkesan.

  3. Menggunakan real volatility dan sasaran risiko tahunan untuk menyesuaikan kedudukan, tahap risiko gabungan yang agak stabil dapat diperoleh di pasaran yang berfluktuasi tinggi dan rendah.

  4. Menetapkan kedudukan hentian berdasarkan turun naik harga sebenar dapat menghalang kerugian kecil yang tidak perlu dari tempat hentian.

  5. Pengesuaian dalam masa nyata untuk mengesan kedudukan hentian kerugian, membolehkan anda mengikuti trend dengan fleksibel untuk mendapatkan keuntungan, dan menghentikan kerugian tepat pada masanya.

Analisis risiko

Risiko utama strategi ini ialah:

  1. Bergantung pada pengoptimuman parameter, parameter yang berbeza mempunyai kesan yang besar terhadap prestasi strategi, perlu dilakukan ujian menyeluruh untuk mendapatkan parameter terbaik.

  2. Tracking stop loss mungkin terlalu kerap berhenti dalam trend gegaran. Anda boleh melepaskan amplitud berhenti dengan sewajarnya, mengoptimumkan mekanisme berhenti.

  3. Pengurusan kedudukan dan teknologi kawalan risiko lebih sensitif terhadap modal awal dan kos perdagangan. Modal awal yang terlalu kecil dan kos perdagangan yang terlalu tinggi akan menjejaskan keuntungan strategi.

  4. Strategi untuk menetapkan sasaran risiko tahunan dan leverage maksimum bergantung kepada volatiliti yang dinilai dengan betul. Penilaian volatiliti yang tidak tepat boleh menyebabkan kedudukan terlalu besar atau terlalu kecil.

Arah pengoptimuman

Kaedah utama untuk mengoptimumkan strategi ini ialah:

  1. Cari kombinasi parameter yang optimum. Anda boleh mencari parameter yang optimum dengan mengkaji semula lebih banyak data sejarah.

  2. Peningkatan mekanisme hentian. Ia boleh menguji bentuk hentian seperti hentian bergerak, hentian masa, hentian gegaran, dan lain-lain, dan mengoptimumkan strategi hentian.

  3. Mengoptimumkan kedudukan dan pengurusan risiko. Anda boleh menguji sasaran risiko yang berbeza untuk mencari gabungan risiko dan keuntungan yang terbaik. Anda juga boleh menguji kesan tahap leverage yang berbeza.

  4. Cubalah penunjuk tambahan. Anda boleh menambah lebih banyak penunjuk teknikal untuk meningkatkan ketepatan isyarat dan kestabilan strategi.

  5. Uji tempoh pegangan yang berbeza. Anda boleh cuba menggunakan keputusan pembantu tempoh yang lebih tinggi untuk meningkatkan ketepatan penempatan.

ringkaskan

Strategi ini mengintegrasikan trend tracking dan trend menembusi dua kategori strategi perdagangan, menggunakan teknologi pengurusan kedudukan dinamik yang canggih, mewujudkan konfigurasi pegangan yang disesuaikan dengan risiko, dapat mengawal risiko dengan berkesan sambil mengesan pergerakan pasaran, mempunyai kemampuan keuntungan yang kuat, layak untuk diuji dan dioptimumkan lebih lanjut.

Kod sumber strategi
/*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)