Strategi Rock Solid Turtle


Tarikh penciptaan: 2024-02-18 14:34:40 Akhirnya diubah suai: 2024-02-18 14:34:40
Salin: 0 Bilangan klik: 747
1
fokus pada
1617
Pengikut

Strategi Rock Solid Turtle

Gambaran keseluruhan

Strategi ribut tegar seperti batu adalah strategi perdagangan kuantitatif yang mengikuti hukum perdagangan ribut Brady. Ia menggunakan harga untuk memasuki, menghentikan dan mengesan jalan keluar, mengira saiz kedudukan berdasarkan gelombang sebenar, dan mengawal kerugian tunggal dengan ketat.

Prinsip Strategi

Peraturan kemasukan

Strategi tsunami yang kukuh seperti batu dalam penembusan masuk. Secara khusus, ia akan mengira harga tertinggi dan terendah dalam tempoh tertentu berdasarkan parameter kitaran pecah yang dimasukkan. Apabila harga memecahkan harga tertinggi, masuk lebih banyak; Apabila harga memecahkan harga terendah, masuk kosong.

Sebagai contoh, jika parameter kitaran masuk ditetapkan sebagai 20 K baris, maka strategi akan mengambil harga tertinggi dan terendah dari 20 K baris terkini. Jika harga penutupan K baris semasa lebih tinggi daripada harga tertinggi 20 K baris terakhir, strategi akan membuat pesanan berhenti tambahan di kedudukan harga penutupan itu, menunggu untuk memecahkan harga tertinggi masuk.

Peraturan permainan

Strategi ribut yang kukuh seperti batu ini menjejaki perhentian perhentian. Ia secara dinamik mengira harga tertinggi dan terendah dalam tempoh tertentu berdasarkan parameter kitaran keluar yang dimasukkan. Ini menjadi saluran keluar strategi.

Apabila memegang beberapa kedudukan, jika harga jatuh di bawah harga terendah untuk keluar dari saluran, kedudukan terhenti. Sebaliknya, apabila memegang kedudukan kosong, jika harga jatuh di atas harga tertinggi untuk keluar dari saluran, kedudukan terhenti.

Di samping itu, strategi ini juga akan mengira titik hentian berdasarkan gelombang sebenar, sebagai garis hentian terakhir. Selagi harga tidak menembusi jalan keluar, titik hentian akan terus mengesan pengubahsuaian, memastikan jarak hentian tepat, tidak terlalu radikal menyebabkan kerugian yang tidak perlu, dan tidak terlalu jauh untuk mengawal kerugian dengan berkesan.

Saiz kedudukan

Strategi ribut tegar akan mengira saiz satu-satu kedudukan berdasarkan gelombang sebenar. Secara khusus, ia akan mengira peratusan kerugian yang berpotensi di sekitar harga masuk dan kemudian menghidupkan semula saiz kedudukan berdasarkan parameter risiko yang diharapkan. Ini dapat mengawal kerugian maksimum setiap perdagangan dengan berkesan.

Analisis kelebihan

Operasi stabil

Strategi Pantai Batu Berkualiti mengikuti peraturan perdagangan Pantai Brady, dengan ketat melaksanakan peraturan masuk dan keluar, dan tidak berubah-ubah. Ini membolehkan strategi untuk beroperasi secara stabil dalam jangka panjang, tanpa menyebabkan kerosakan sistem kerana kesalahan pertimbangan sementara.

Penolakan

Strategi menggunakan cara masuk harga yang menembusi, dapat mengelakkan risiko masuk Fault yang tinggi, sehingga dapat mengurangkan kemungkinan kerugian sistemik. Pada masa yang sama, menggunakan cara berhenti kehilangan untuk memastikan kawalan kerugian tunggal, dan meminimumkan penurunan yang disebabkan oleh kerugian berturut-turut.

Risiko yang boleh dikawal

Strategi dengan mengira kedudukan dengan gelombang sebenar, mengawal ketat kerugian maksimum setiap perdagangan dalam julat yang dibenarkan, mengelakkan kelebihan risiko yang disebabkan oleh kerugian besar tunggal. Pada masa yang sama, menggunakan kaedah pengesanan hentian untuk memastikan jarak hentian yang tepat, dapat menghentikan kerugian tepat pada masanya, mengawal risiko dengan berkesan.

Analisis risiko

Risiko kegagalan kejayaan

Jika tidak ada penembusan gegaran yang kuat, isyarat palsu mudah terbentuk yang menyebabkan kerosakan masuk sistem yang salah. Maka perlu menyesuaikan parameter, menambah syarat pengesahan masuk, dan mengelakkan gangguan bunyi yang tidak berkesan.

Risiko Pengoptimuman Parameter

Parameter strategi seperti kitaran masuk, kitaran keluar dan lain-lain adalah tetapan statik. Jika keadaan pasaran berubah secara besar-besaran, tetapan parameter ini mungkin tidak akan berlaku. Apabila perlu menilai semula tetapan parameter dan mengoptimumkan parameter untuk menyesuaikan diri dengan keadaan pasaran baru.

Risiko kegagalan penunjuk teknikal

Strategi ini menggunakan penanda teknikal seperti flags untuk menilai harga penembusan. Apabila terdapat perubahan besar dalam trend pasaran dan pola turun naik, penanda teknikal ini mungkin tidak berfungsi.

Arah pengoptimuman

Meningkatkan penilaian trend

Anda boleh menambah indikator penilaian trend yang biasa digunakan dalam strategi, seperti MA, MACD, dan lain-lain. Apabila anda melakukan banyak penilaian tren naik, apabila anda melakukan penurunan, anda dapat mengurangkan kerugian operasi terbalik.

Penghakiman jangka masa

Indikator teknikal untuk bingkai masa peringkat tinggi boleh diperkenalkan untuk membuat penghakiman komprehensif. Sebagai contoh, kedudukan garis MA di tahap 86400 dapat menentukan arah pergerakan keseluruhan, untuk mengesahkan lebih lanjut isyarat operasi pada carta waktu.

Optimumkan parameter dinamik

Dengan menggunakan pembelajaran mesin dan lain-lain, parameter boleh dioptimumkan secara automatik berdasarkan data sejarah, dan parameter boleh diselaraskan dalam masa nyata untuk menyesuaikan diri dengan perubahan keadaan pasaran. Ini dapat menjadikan strategi lebih mudah menyesuaikan diri dan stabil.

ringkaskan

Strategi pesisir yang kukuh seperti batu mengikuti peraturan perdagangan pesisir klasik, dengan harga masuk dan berhenti untuk menjejaki stop loss, mengawal risiko dengan ketat, dapat beroperasi secara stabil dalam jangka masa panjang dan mempunyai keupayaan yang sangat baik untuk melawan kemerosotan. Walaupun masih perlu berjaga-jaga terhadap beberapa risiko seperti kegagalan pecah, kegagalan parameter, tetapi dengan cara memperkenalkan penghakiman trend, penghakiman jangka masa, pengoptimuman parameter dinamik dan lain-lain, risiko ini dapat dikurangkan dengan berkesan, meningkatkan keupayaan operasi strategi yang stabil. Secara keseluruhannya, strategi ini mempunyai kestabilan yang sangat baik dan keupayaan untuk menahan kemerosotan, boleh dipercayai dan bernilai.

Kod sumber strategi
/*backtest
start: 2024-01-18 00:00:00
end: 2024-02-17 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Real Turtle", shorttitle = "Real Turtle", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity,calc_on_order_fills=false, slippage=25,commission_type=strategy.commission.percent,commission_value=0.075)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
// Use if using a specific date range
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////

//How many candles we want to determine our position entry
enterTrade = input(20, minval=1, title="Entry Channel Length")
//How many candles we want ot determine our position exit
exitTrade = input(10, minval=1, title="Exit Channel Length")

//True Range EMA Length
trLength = input(13, minval=1, title="True Range Length")
//Go all in on every trade
allIn = input(false, title="Use whole position on every trade")
dRisk = input(2, "Use Desired Risk %")
//How much of emaTR to use for TS offset
multiEmaTR = input(2, "Desired multiple of ema Tr (N)")
//absolute value (highest high of of this many candles - lowest high of this many candles) . This is used if we want to change our timeframe to a higher timeframe otherwise just works like grabbing high o r low of a candle
//True range is calculated as just high - low. Technically this should be a little more complicated but with 24/7 nature of crypto markets high-low is fine.
trueRange = max(high - low, max(high - close[1], close[1] - low))
//Creates an EMA of the true range by our custom length
emaTR = ema(trueRange, trLength)
//Highest high of how many candles back we want to look as specified in entry channel for long
longEntry = highest(enterTrade)
//loweest low of how many candles back we want to look as specified in exit channel for long
exitLong = lowest(exitTrade)
//lowest low of how many candles back want to look as specified in entry channel for short
shortEntry = lowest(enterTrade)
//lowest low of how many candles back want to look as specified in exit channel for short
exitShort = highest(exitTrade)
//plots the longEntry as a green line
plot(longEntry[1], title="Long Entry",color=green)
//plots the short entry as a purple line
plot(shortEntry[1], title="Short Entry",color=purple)

howFar = barssince(strategy.position_size == 0)
actualLExit = strategy.position_size > 0 ? strategy.position_avg_price - (emaTR[howFar] * multiEmaTR) : longEntry - (emaTR * multiEmaTR)
actualLExit2 = actualLExit > exitLong ? actualLExit : exitLong
actualSExit = strategy.position_size < 0 ? strategy.position_avg_price + (emaTR[howFar] * multiEmaTR) : shortEntry + (emaTR * multiEmaTR)
actualSExit2 = actualSExit < exitShort ? actualSExit : exitShort

//plots the long exit as a red line
plot(actualLExit2[1], title="Long Exit",color=red)
//plots the short exit as a blue line
plot(actualSExit2[1], title="Short Exit",color=yellow)


//Stop loss in ticks
SLLong =(emaTR * multiEmaTR)/ syminfo.mintick
SLShort = (emaTR * multiEmaTR)/ syminfo.mintick


//Calculate our potential loss as a whole percentage number. Example 1 instead of 0.01 for 1% loss. We have to convert back from ticks to whole value, then divided by close
PLLong = ((SLLong * syminfo.mintick) * 100) / longEntry
PLShort = ((SLShort * syminfo.mintick) * 100) / shortEntry
//Calculate our risk by taking our desired risk / potential loss. Then multiple by our equity to get position size. we divide by close because we are using percentage size of equity for quantity in this script as not actual size.
//we then floor the value. which is just to say we round down so instead of say 201.54 we would just input 201 as TV only supports whole integers for quantity.
qtyLong = floor(((dRisk / PLLong) * strategy.equity) /longEntry )
qtyShort = floor(((dRisk / PLShort) * strategy.equity) /shortEntry )
qtyLong2 = allIn ? 100 : qtyLong
qtyShort2 = allIn ? 100 : qtyShort
//Only open long or short positions if we are inside the test period specified earlier
if testPeriod()
    //Open a stop market order at our long entry price and keep it there at the quantity specified. This order is updated/changed on each new candlestick until a position is opened
    strategy.entry("long", strategy.long, stop = longEntry, qty = qtyLong2) 
    //sets up or stop loss order by price specified in our actualLExit2 variable
    strategy.exit("Stoploss-Long", "long", stop=actualLExit2)
    
     //Open a stop market order at our short entry price and keep it there at the quantity specified. This order is updated/changed on each new candlestick until a position is opened
    strategy.entry("short", strategy.short, stop = shortEntry, qty = qtyShort2)
    //sets up or stop loss order by price specified in our actualLExit2 variable
    strategy.exit("Stoploss-Short", "short", stop=actualSExit2)