
Strategi ini menggunakan prinsip penembusan indikator William, digabungkan dengan garis K bentuk tertentu, untuk merancang sebuah model yang cekap untuk membuka dan menutup kedudukan kosong, sehingga dapat melakukan lebih banyak posisi kosong dengan tepat pada titik-titik penting di mana keadaan berubah, menangkap trend garis pendek tengah, dan memperoleh keuntungan tambahan.
Strategi ini menggunakan titik pecahan dalam penunjuk William untuk menilai isyarat pembalikan. Isyarat perdagangan dihasilkan apabila terdapat pecahan ke atas atau ke bawah, jika sesuai dengan arah entiti K-baris.
Khususnya, strategi ini mentakrifkan WMX Williams Fractals sebagai penunjuk tersuai. Penunjuk ini menggunakan fungsi faktor untuk menilai fraktal atas (upFractal) dan fraktal bawah (dnFractal).
Logik penilaian ke atas adalah: nilai tertinggi pada garis K semasa adalah lebih tinggi daripada nilai tertinggi pada garis K akar n sebelumnya (n adalah parameter yang boleh disesuaikan), dengan itu membentuk penembusan ke atas.
Logik penghakiman ke bawah adalah: harga terendah pada garis K semasa adalah lebih rendah daripada harga terendah pada garis K akar n sebelumnya, sehingga membentuk penembusan ke bawah ke bawah.
Setelah mendapat klasifikasi atas dan bawah, menilai sama ada mereka berubah, iaitu dari tidak ada atau dari ada ke tidak ada. Pada masa ini klasifikasi baru terbentuk, yang menunjukkan kemungkinan besar untuk berbalik.
Kemudian digabungkan dengan arah entiti K untuk menentukan isyarat dagangan tertentu. Apabila pembahagian atas terbentuk, tutup lebih tinggi daripada terbuka, lakukan lebih banyak; apabila pembahagian bawah terbentuk, tutup lebih rendah daripada terbuka, kosong.
Menggunakan titik pembahagian William untuk menentukan masa pembalikan, yang merupakan petunjuk teknikal yang boleh dipercayai
Menggabungkan arah entiti K untuk mengesahkan isyarat dagangan dan mengelakkan kerosakan chops di kawasan bukan trend
Parameter yang lebih sedikit, hanya perlu menyesuaikan kitaran n, mudah untuk diuji dan dioptimumkan
Kaedah pembukaan kedudukan yang fleksibel, seperti saiz kedudukan, keadaan kedudukan, dan lain-lain, mudah digunakan di tempat kerja
Selepas pengelompokan, keadaan mungkin tidak berbalik sepenuhnya, dan penilaian trend perlu dilakukan.
Tetapan kedudukan henti perlu berhati-hati untuk mengelakkan gangguan bunyi yang besar
Parameter n perlu diselaraskan mengikut varieti yang berbeza, jika kitaran terlalu besar atau terlalu kecil akan mempengaruhi kesannya
Penyelesaian:
Indeks seperti purata bergerak boleh digunakan untuk menilai trend besar dan mengelakkan kedudukan berlawanan.
Hentikan Tracking Loss secara Dinamis atau Tetapkan Hentikan Loss dengan Had Pengunduran yang Bermakna
Optimumkan parameter menggunakan kaedah Analisis Walk Forward untuk mencari parameter terbaik
Strategi pembalikan berasaskan klasifikasi mudah terbentuk selepas beberapa kali keuntungan dan sekali lagi pembalikan menyebabkan kerugian. Anda boleh mempertimbangkan untuk memasukkan penapis trend, mengehadkan lagi ruang perdagangan, mengurangkan perdagangan pembalikan yang tidak perlu.
Kaedah-kaedah penangguhan yang ada pada masa ini agak mudah dan tidak dapat mengesan dengan berkesan. Anda boleh cuba menambah kaedah penangguhan seperti penangguhan bergerak, penangguhan masa, dan penangguhan dinamik.
Pada masa ini hanya menilai arah entiti K. Jika anda mengambil kira lebih banyak maklumat K, seperti garis bayangan, kedudukan penutupan, dan lain-lain, anda boleh merancang isyarat perdagangan yang lebih tepat.
Strategi ini adalah strategi pembalikan berdasarkan petunjuk teknikal. Ia menggunakan pembahagian indeks William untuk menangkap trend perubahan saham indeks pada titik-titik penting, yang digabungkan dengan entiti K-line untuk membentuk isyarat perdagangan, dengan tujuan untuk mencapai keuntungan tambahan.
Berbanding dengan strategi pembalikan yang lain, strategi ini boleh digunakan secara langsung dengan reka bentuk parameter, logik yang jelas, mudah difahami, parameter yang mudah disesuaikan, mudah diuji. Langkah seterusnya melalui penilaian trend, cara menghentikan kerugian, dan lain-lain, diharapkan dapat mencapai kesan strategi yang lebih baik.
/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 00:00:00
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/
// © WMX_Q_System_Trading
//@version=4
SystemName="WMX Williams Fractals strategy V4"
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 10
strategy(title=SystemName, shorttitle=SystemName, overlay=true, initial_capital=InitCapital, default_qty_type=strategy.percent_of_equity, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission)
//study("WMX Williams Fractals", shorttitle="WMX Fractals", format=format.price, precision=0, overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input(title="Periods", defval=2, minval=2, type=input.integer)
h=close
l=close
factorh(High)=>
upFractal = ( (High[n+2] < High[n]) and (High[n+1] < High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+3] < High[n]) and (High[n+2] < High[n]) and (High[n+1] == High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+4] < High[n]) and (High[n+3] < High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ( (High[n+5] < High[n]) and (High[n+4] < High[n]) and (High[n+3] == High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
or ((High[n+6] < High[n]) and (High[n+5] < High[n]) and (High[n+4] == High[n]) and (High[n+3] <= High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
upFractal
upFractal=factorh(h)
factorl(Low)=>
dnFractal = ( (Low[n+2] > Low[n]) and (Low[n+1] > Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+3] > Low[n]) and (Low[n+2] > Low[n]) and (Low[n+1] == Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+4] > Low[n]) and (Low[n+3] > Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ( (Low[n+5] > Low[n]) and (Low[n+4] > Low[n]) and (Low[n+3] == Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
or ((Low[n+6] > Low[n]) and (Low[n+5] > Low[n]) and (Low[n+4] == Low[n]) and (Low[n+3] >= Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
dnFractal=factorl(l)
U=valuewhen(upFractal[0]!= upFractal[1],l[0],3)
L=valuewhen(dnFractal[0]!=dnFractal[1],h[0],3)
longcon=crossover(close ,L) and close>open
shortcon=crossunder(close ,U) and close<open
if longcon
strategy.entry("Long", strategy.long, when = strategy.position_size <= 0 )
if shortcon
strategy.entry("Short", strategy.short, when = strategy.position_size >= 0 )