Strategi ini didasarkan pada indikator Bill Williams
Prinsip perdagangan utama dari strategi ini adalah:
Menggunakan lilin Heiken Ashi alih-alih lilin biasa untuk aksi harga.
Menggunakan tiga garis rata-rata bergerak dari Bill Williams Alligator - Jaw, Teeth dan Lips. Mereka bertindak sebagai rata-rata bergerak untuk menentukan arah tren.
Ketika garis ditumpuk sebagai Jaw (terendah), Teeth (tengah), Lips (teratas), itu menandakan tren naik. Ketika terbalik dengan Jaw (teratas), Teeth (tengah), Lips (terendah), itu menandakan tren turun.
Entri didasarkan pada arah lilin Heiken Ashi + keselarasan garis Alligator. Entri panjang pada lilin bullish dan pengaturan bull; entri pendek pada lilin bearish dan pengaturan bear.
Keluar saat garis Alligator bersilang, menandakan pembalikan tren.
Dapat mengkonfigurasi titik target, titik stop loss, stop trailing dll.
Menggabungkan filter ganda Heiken Ashi dan Alligator menciptakan strategi perdagangan jangka pendek dengan probabilitas tinggi.
Keuntungan utama dari strategi ini adalah:
Penyaringan indikator ganda meminimalkan sinyal palsu.
Identifikasi tren yang jelas dan intuitif. Garis buaya memiliki sinyal bull/bear yang jelas.
Efisien untuk scalping jangka pendek. menangkap perubahan harga pada grafik 1 menit sampai 5 menit.
Parameter sederhana. Tidak perlu optimasi yang kompleks.
Manajemen risiko yang ketat melalui mengambil keuntungan, stop loss point.
Aturan masuk/keluar yang ditentukan berdasarkan penyeberangan garis Alligator.
Mudah diterapkan dan direplikasi.
Risiko utama yang harus dipertimbangkan adalah:
Risiko penarikan dari whipsaws. sinyal buaya sering dapat meningkatkan perdagangan dan biaya.
Risiko pasar yang terbatas, crossover gagal saat kondisi bergolak.
Risiko over-optimasi, kurva yang cocok dari pengaturan parameter yang buruk.
Alligator mungkin berhenti bekerja dalam kondisi ekstrem.
Stop loss risiko slippage. celah dapat memicu berhenti menyebabkan kerugian yang tidak wajar.
Risiko frekuensi perdagangan tinggi. Lebih banyak perdagangan juga meningkatkan biaya transaksi.
Analisis ekspektasi, pemberhentian yang dioptimalkan, frekuensi yang terkontrol dll dapat mengatasi banyak risiko ini.
Beberapa cara untuk meningkatkan strategi adalah:
Sertakan filter tambahan seperti RSI untuk tingkat kemenangan yang lebih tinggi.
Gunakan stop ATR dinamis untuk mengendalikan kerugian per perdagangan.
Tambahkan aturan ukuran posisi untuk mengoptimalkan ukuran taruhan.
Gabungkan pola grafik atau analisis teknis lainnya untuk waktu masuk.
Mengoptimalkan parameter berdasarkan jenis instrumen (saham, forex dll).
Memperkenalkan pembelajaran mesin untuk optimasi parameter adaptif.
Melakukan analisis ekspektasi untuk menyesuaikan rasio profit take vs stop loss.
Dengan perbaikan terus menerus, strategi dapat menjadi sistem perdagangan jangka pendek yang kuat.
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()