Strategi ini berdasarkan pada penunjuk Bill Williams
Prinsip perdagangan utama strategi adalah:
Menggunakan lilin Heiken Ashi bukannya lilin biasa untuk tindakan harga.
Menggunakan tiga garis purata bergerak dari Bill Williams Alligator - Jaw, Gigi dan Bibir. Mereka bertindak seperti purata bergerak untuk menentukan arah trend.
Apabila garis ditumpuk sebagai Jaw (terendah), Teeth (tengah), Lips (tertinggi), ia menandakan trend menaik. Apabila terbalik dengan Jaw (tertinggi), Teeth (tengah), Lips (terendah), ia menandakan trend menurun.
Entri berdasarkan arah lilin Heiken Ashi + penyelarasan garis Alligator. Entri panjang pada lilin bullish dan setup bull; entri pendek pada lilin bearish dan setup bear.
Keluar apabila garis Alligator bersilang, menandakan pembalikan trend.
Dapat mengkonfigurasi titik sasaran, titik stop loss, titik trailing stop dan lain-lain
Menggabungkan dua penapis Heiken Ashi dan Alligator mewujudkan strategi perdagangan jangka pendek yang berkemungkinan tinggi.
Kelebihan utama strategi adalah:
Penapisan penunjuk ganda meminimumkan isyarat palsu.
Pengiktirafan trend yang jelas dan intuitif. Garis buaya mempunyai isyarat bull/bear yang jelas.
Efisien untuk scalping jangka pendek. menangkap perubahan harga pada carta 1 minit hingga 5 minit.
Parameter mudah. Tiada pengoptimuman yang rumit diperlukan.
Pengurusan risiko yang ketat melalui mengambil keuntungan, berhenti kehilangan titik.
Peraturan masuk/keluar yang ditentukan berdasarkan penyeberangan garisan Alligator.
Mudah untuk dilaksanakan dan ditiru.
Risiko utama yang perlu dipertimbangkan ialah:
Risiko penarikan daripada whipsaws. Isyarat buaya yang kerap boleh meningkatkan perdagangan dan kos.
Risiko pasaran yang terhad. Crossover gagal semasa keadaan bergelombang.
Risiko terlalu optimum, pemasangan lengkung dari penyesuaian parameter yang buruk.
Risiko kegagalan penunjuk. Buaya mungkin berhenti bekerja dalam keadaan yang melampau.
Risiko kehilangan berhenti. Celah boleh mencetuskan berhenti menyebabkan kerugian yang tidak dibenarkan.
Risiko frekuensi perdagangan yang tinggi. Lebih banyak perdagangan juga meningkatkan kos transaksi.
Analisis jangkaan, hentian yang dioptimumkan, kekerapan terkawal dan lain-lain boleh menangani banyak risiko ini.
Beberapa cara untuk meningkatkan strategi adalah:
Sertakan penapis tambahan seperti RSI untuk kadar kemenangan yang lebih tinggi.
Menggunakan hentian ATR dinamik untuk mengawal kerugian setiap perdagangan.
Tambah peraturan saiz kedudukan untuk mengoptimumkan saiz taruhan.
Gabungkan corak carta atau analisis teknikal lain untuk masa kemasukan.
Mengoptimumkan parameter berdasarkan jenis instrumen (stocks, forex dan lain-lain).
Memperkenalkan pembelajaran mesin untuk pengoptimuman parameter adaptif.
Melakukan analisis jangkaan untuk menyempurnakan nisbah keuntungan vs stop loss.
Dengan peningkatan berterusan, strategi ini boleh menjadi sistem perdagangan jangka pendek yang kukuh.
Strategi ini menggabungkan Heiken Ashi dengan Williams
/*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()