Strategi Terobosan Penyu Ganda

Penulis:ChaoZhang, Tarikh: 2023-11-28 16:25:41
Tag:

img

Ringkasan

Strategi Penembusan Penyu Ganda mengintegrasikan strategi penembusan perdagangan penyu dan prinsip stop loss bergerak Linda Raschke, dengan prestasi penembusan yang sangat baik dan kawalan risiko yang ketat. Strategi ini secara serentak memantau penembusan harga ke atas dan ke bawah, menubuhkan kedudukan panjang atau pendek apabila penembusan berlaku, dan menggunakan stop loss bergerak dan mengambil keuntungan bergerak untuk menguruskan kedudukan.

Prinsip Strategi

Logik teras adalah untuk pergi pendek apabila memecahkan melalui kitaran kecil yang tinggi pada titik tinggi kitaran besar, dan pergi panjang apabila memecahkan melalui kitaran kecil yang rendah pada titik rendah kitaran besar. Selepas membuka kedudukan, tetapkan stop loss bergerak dan mengambil keuntungan bergerak, stop loss pertama untuk mengesahkan risiko. Apabila kuantiti pegangan terkumpul ke set mengambil keuntungan kuantiti, membatalkan perintah stop loss dalam kitaran seterusnya, kemudian keluar separuh kedudukan dan menetapkan stop loss bergerak dan mengambil keuntungan bergerak untuk mengunci keuntungan dan menjejaki penyebaran.

Langkah operasi khusus ialah:

  1. Mengira kitaran besar (20 kitaran) titik tinggi sebelumHigh dan kitaran kecil (4 kitaran) titik tinggi kecilPeriodHigh.

  2. Apabila tinggi K-line terkini lebih besar daripada prevHigh, dan prevHigh lebih besar daripada kecilPeriodHigh, ini menunjukkan bahawa titik tinggi kitaran besar memecahkan titik tinggi kitaran kecil.

  3. Selepas membuka kedudukan, tetapkan stop loss bergerak. Tunggu kedudukan untuk berbalik sebelum membatalkan perintah stop loss untuk mengelakkan berhenti.

  4. Apabila kuantiti pegangan mencapai nombor kitaran mengambil keuntungan bergerak (kini 0 kitaran), keluar separuh kedudukan dalam kitaran seterusnya, dan menetapkan stop loss bergerak dan mengambil keuntungan bergerak untuk mengesan spread dan mengunci keuntungan.

  5. Untuk terobosan titik rendah, kedudukan panjang ditubuhkan berdasarkan hubungan terobosan antara paras terendah kitaran besar dan paras terendah kitaran kecil.

Analisis Kelebihan

Ini adalah strategi terobosan yang sangat komprehensif dengan kelebihan berikut:

  1. Menggabungkan perdagangan penyu bersiklus dua dapat mengenal pasti isyarat kejayaan dengan berkesan.

  2. Penggunaan teknik stop loss bergerak dan teknik mengambil keuntungan bergerak mengawal risiko dengan ketat dan mengelakkan kerugian besar.

  3. Keluar dalam dua peringkat, mengambil keuntungan separuh kedudukan pada satu masa, kemudian keluar sepenuhnya melalui bergerak mengambil keuntungan, mengunci dalam keuntungan.

  4. Mempertimbangkan kedua-dua operasi panjang dan pendek, yang sesuai dengan ciri-ciri pasaran bergantian yang berbilang kosong.

  5. Hasil backtesting yang sangat baik dengan prestasi perdagangan sebenar yang kuat.

Analisis Risiko

Risiko utama dan langkah-langkah balas adalah seperti berikut:

  1. Risiko terobosan palsu: Sesuaikan parameter kitaran dengan betul untuk memastikan kesahihan terobosan.

  2. Risiko mengejar meningkat dan membunuh jatuh. penapisan harus digabungkan dengan trend dan corak untuk mengelakkan membuka kedudukan pada akhir trend.

  3. Risiko kehilangan berhenti dibasuh.

  4. Risiko kehilangan berhenti bergerak yang terlalu sensitif. Sesuaikan tetapan seluncur selepas kehilangan berhenti untuk mengelakkan berhenti yang tidak perlu.

Arahan pengoptimuman

Strategi ini juga boleh dioptimumkan dalam aspek berikut:

  1. Tambah penapis penembusan jumlah untuk memastikan keaslian penembusan.

  2. Tambah penunjuk penilaian trend untuk mengelakkan membuka kedudukan pada akhir trend.

  3. Gabungkan lebih banyak kitaran masa untuk menentukan masa kejayaan.

  4. Meningkatkan algoritma pembelajaran mesin untuk pengoptimuman parameter dinamik.

  5. Gabungkan dengan strategi lain untuk arbitraj statistik.

Ringkasan

Strategi Double Turtle Breakthrough secara komprehensif menggunakan teknik kitaran ganda, teori terobosan dan kaedah pengurusan risiko yang ketat untuk memastikan kadar kemenangan yang tinggi sambil memastikan pulangan yang stabil. Model strategi ini mudah dan jelas, mudah difahami dan digunakan, dan merupakan strategi kuantitatif yang sangat baik. Strategi ini masih mempunyai potensi yang besar untuk pengoptimuman. Pelabur boleh berinovasi berdasarkan ini untuk membuat sistem perdagangan yang lebih baik.


/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)

bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
    strategy.cancel("Long")
    strategy.cancel("Short")
    strategy.cancel("Stop")



stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])

prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
    strategy.order("Short", strategy.short, stop = prevHigh)

if strategy.position_size < 0 and strategy.position_size[1] == 0
    stopLossPrice := high[1]
    strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
    if (strategy.position_size != -1)
        strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price  = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
        

prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
    strategy.order("Long", strategy.long, stop = prevLow)

if strategy.position_size > 0 and strategy.position_size[1] == 0
    stopLossPrice := low[1]
    strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
    if (strategy.position_size != 1)
        strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price  = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

Lebih lanjut