Strategi ini adalah berdasarkan kepada indikator ikan paus Bill Williams, tetapi menggunakan input harga yang berlainan. Ini adalah strategi scalping garis pendek yang berlaku untuk jangka masa 1 minit hingga 5 minit.
Prinsip perdagangan utama dalam strategi ini ialah:
Menggunakan Heiken Ashi filter sebagai input harga dan bukannya standard filter. Heiken Ashi boleh menyaring bunyi pasaran dan mengenal pasti trend.
Gunakan tiga garis purata dalam indikator ikan paus Bill Williams: garis hidung bawah, garis gigi, dan garis bibir. Mereka serupa dengan purata bergerak untuk menentukan arah trend.
Apabila tiga garis rata disusun sebagai: garis bawah paling rendah, garis gigi berada di tengah, garis bibir tertinggi, ia menunjukkan kecenderungan multi-kepala; apabila disusun dalam urutan: garis bawah paling tinggi, garis gigi berada di tengah, garis bibir terendah, ia menunjukkan kecenderungan kosong.
Pendaftaran berdasarkan arah entiti Heiken Ashi dan susunan garisan ikan paus. Jika entiti ke atas dan garisan ikan paus melihat lebih banyak, lakukan lebih banyak; jika entiti ke bawah dan garisan ikan paus melihat ke atas, lakukan kosong.
Apabila urutan garis ikan paus berubah, ia menunjukkan bahawa trend telah berbalik dan ia harus dihentikan pada masa yang tepat.
Pengurusan risiko dengan menetapkan titik berhenti, titik berhenti. Target mata keuntungan, titik berhenti, dan penjejakan berhenti boleh dipilih untuk mengawal setiap kerugian.
Strategi ini menggabungkan dua penapis yang menggunakan Heiken Ashi untuk mengenal pasti trend dan juga untuk menilai pembalikan dengan menggunakan garis ikan paus, membentuk strategi perdagangan garis pendek dengan kebarangkalian tinggi.
Strategi ini mempunyai kelebihan utama:
Penapisan berganda mengurangkan isyarat palsu. Gabungan Heiken Ashi dan kabel ikan paus dapat meningkatkan kualiti isyarat.
Penghakiman trend yang jelas dan intuitif. Susunan garis ikan paus jelas dan boleh dipercayai, tidak menimbulkan keadaan yang tidak jelas.
Penangkapan dagangan garis pendek yang cekap. Dagangan scalping yang sesuai untuk kitaran 1 minit hingga 5 minit.
Tetapan parameter yang mudah. Tidak perlu pengoptimuman yang rumit, parameter yang sedikit boleh digunakan.
Pengurusan risiko yang ketat. Menggunakan Stop Loss Points untuk mengawal setiap kerugian.
Mekanisme kemasukan dan keluar yang jelas.
Strategi ini boleh digunakan dengan mudah oleh peniaga pemula.
Risiko utama strategi ini ialah:
Risiko penarikan diri. Talian ikan paus menghasilkan isyarat yang kerap, yang akan meningkatkan frekuensi perdagangan dan kos slip.
Risiko keadaan gegaran. Dalam keadaan menyusun keadaan, tali ikan akan sering bersilang, menghasilkan isyarat yang salah.
Risiko overoptimisasi. Pengoptimuman parameter yang tidak betul boleh menyebabkan kurva terlalu sesuai.
Risiko kegagalan penunjuk. Dalam keadaan pasaran yang melampau, tali ikan boleh gagal sepenuhnya.
Hentikan kerosakan dengan risiko penembusan. Penembusan cepat boleh mencetuskan kerugian akibat hentikan.
Risiko frekuensi dagangan yang terlalu tinggi. Dagangan frekuensi tinggi meningkatkan kos dagangan dan kehilangan titik slip yang tidak perlu.
Risiko ini boleh dikurangkan dengan cara pengurusan jangkaan, mengoptimumkan strategi berhenti kerugian, mengawal frekuensi perdagangan dan sebagainya.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Mengintegrasikan petunjuk lain untuk penapisan isyarat, meningkatkan kadar kemenangan. Sebagai contoh, menggabungkan petunjuk kuat seperti RSI.
Tetapkan Hentian Dinamik ATR untuk mengawal risiko kerugian tunggal.
Tambah modul pengurusan kedudukan untuk mengoptimumkan saiz setiap pembukaan kedudukan. Anda boleh menambah kedudukan apabila trend lebih jelas.
Menggabungkan kaedah analisis teknikal seperti bentuk grafik untuk meningkatkan ketepatan kemasukan.
Mengoptimumkan parameter mengikut jenis pasaran ((saham, mata wang asing, dan lain-lain) untuk menjadikannya lebih sesuai dengan jenis tersebut.
Menambah modul pembelajaran mesin untuk mencapai optimasi penyesuaian parameter.
Hitung kadar kemenangan Expectancy untuk mengoptimumkan nisbah stop loss.
Dengan penambahbaikan berterusan, strategi ini boleh menjadi satu set strategi perdagangan garis pendek yang stabil.
Strategi ini menggunakan Heiken Ashi bekerjasama dengan Bill Williams Whale Indicator untuk membentuk strategi perdagangan garis pendek dengan kebarangkalian tinggi. Ia mempunyai kelebihan seperti penapisan ganda indikator, penetapan parameter yang mudah, mekanisme masuk dan keluar yang jelas, yang dapat menangkap perubahan trend secara berkesan untuk melakukan perdagangan scalping.
/*backtest
start: 2022-09-18 00:00:00
end: 2023-09-24 00:00:00
period: 4d
basePeriod: 1d
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/
// © 03.freeman
//Scalping strategy based on Bill Williams Alligator technique but applied to heikin ashi candles
//This strategy has to be applied to standard candles and low time frames (1min to 5min)
//@version=4
strategy("Bill Williams Alligator improved", shorttitle="Scalping alligator",overlay=true)
//source = input(close)
useHA = input (true,"Use heikin ashi candle?")
// ----------MA calculation - ChartArt-------------
smoothinput = input(1, minval=1, maxval=5, title='Moving Average Calculation: (1=SMA), (2=EMA), (3=WMA), (4=Linear), (5=VWMA)')
calc_ma(src,l) =>
smoothinput == 1 ? sma(src, l):smoothinput == 2 ? ema(src, l):smoothinput == 3 ? wma(src, l):smoothinput == 4 ? linreg(src, l,0):smoothinput == 5 ? vwma(src,l):na
//----------------------------------------------
heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_hl2 = security(heikinashi(syminfo.tickerid), timeframe.period, hl2)
direzione=heikinashi_close>heikinashi_open and heikinashi_close[1]>heikinashi_open[1]? 1 : heikinashi_close<heikinashi_open and heikinashi_close[1]<heikinashi_open[1]? -1 : 0
jawLength = input(13, minval=1, title="Jaw Length")
teethLength = input(8, minval=1, title="Teeth Length")
lipsLength = input(5, minval=1, title="Lips Length")
jawOffset = input(8, title="Jaw Offset")
teethOffset = input(5, title="Teeth Offset")
lipsOffset = input(3, title="Lips Offset")
jaw = calc_ma(heikinashi_hl2, jawLength)
teeth = calc_ma(heikinashi_hl2, teethLength)
lips = calc_ma(heikinashi_hl2, lipsLength)
plot(jaw, title="jaw",offset = jawOffset, color=#3BB3E4)
plot(teeth, title="teeth",offset = teethOffset, color=#FF006E)
plot(lips, title="lips",offset = lipsOffset, color=#36C711)
longCondition = direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips
shortCondition = direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips
// Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => direzione[0]==1 and jaw<teeth and jaw<lips and teeth<lips // functions can be used to wrap up and work out complex conditions
exitLong() => jaw>teeth or jaw>lips or teeth>lips
strategy.entry(id = "Buy", long = true, when = enterLong() ) // use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = exitLong() ) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => direzione[0]==-1 and jaw>teeth and jaw>lips and teeth>lips
exitShort() => jaw<teeth or jaw<lips or teeth<lips
strategy.entry(id = "Sell", long = false, when = enterShort())
strategy.close(id = "Sell", when = exitShort() )
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()