Strategi Scalping Alligator Williams

Penulis:ChaoZhang, Tanggal: 2023-09-25 17:42:27
Tag:

Gambaran umum

Strategi ini didasarkan pada indikator Bill Williams Alligator tetapi menggunakan lilin Heiken Ashi sebagai input harga.

Logika Strategi

Prinsip perdagangan utama dari strategi ini adalah:

  1. Menggunakan lilin Heiken Ashi alih-alih lilin biasa untuk aksi harga.

  2. Menggunakan tiga garis rata-rata bergerak dari Bill Williams Alligator - Jaw, Teeth dan Lips. Mereka bertindak sebagai rata-rata bergerak untuk menentukan arah tren.

  3. 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.

  4. 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.

  5. Keluar saat garis Alligator bersilang, menandakan pembalikan tren.

  6. 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

Keuntungan utama dari strategi ini adalah:

  1. Penyaringan indikator ganda meminimalkan sinyal palsu.

  2. Identifikasi tren yang jelas dan intuitif. Garis buaya memiliki sinyal bull/bear yang jelas.

  3. Efisien untuk scalping jangka pendek. menangkap perubahan harga pada grafik 1 menit sampai 5 menit.

  4. Parameter sederhana. Tidak perlu optimasi yang kompleks.

  5. Manajemen risiko yang ketat melalui mengambil keuntungan, stop loss point.

  6. Aturan masuk/keluar yang ditentukan berdasarkan penyeberangan garis Alligator.

  7. Mudah diterapkan dan direplikasi.

Risiko

Risiko utama yang harus dipertimbangkan adalah:

  1. Risiko penarikan dari whipsaws. sinyal buaya sering dapat meningkatkan perdagangan dan biaya.

  2. Risiko pasar yang terbatas, crossover gagal saat kondisi bergolak.

  3. Risiko over-optimasi, kurva yang cocok dari pengaturan parameter yang buruk.

  4. Alligator mungkin berhenti bekerja dalam kondisi ekstrem.

  5. Stop loss risiko slippage. celah dapat memicu berhenti menyebabkan kerugian yang tidak wajar.

  6. 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.

Peluang Peningkatan

Beberapa cara untuk meningkatkan strategi adalah:

  1. Sertakan filter tambahan seperti RSI untuk tingkat kemenangan yang lebih tinggi.

  2. Gunakan stop ATR dinamis untuk mengendalikan kerugian per perdagangan.

  3. Tambahkan aturan ukuran posisi untuk mengoptimalkan ukuran taruhan.

  4. Gabungkan pola grafik atau analisis teknis lainnya untuk waktu masuk.

  5. Mengoptimalkan parameter berdasarkan jenis instrumen (saham, forex dll).

  6. Memperkenalkan pembelajaran mesin untuk optimasi parameter adaptif.

  7. Melakukan analisis ekspektasi untuk menyesuaikan rasio profit take vs stop loss.

Dengan perbaikan terus menerus, strategi dapat menjadi sistem perdagangan jangka pendek yang kuat.

Kesimpulan

Strategi ini menggabungkan Heiken Ashi dengan Williams Alligator untuk menciptakan strategi perdagangan jangka pendek dengan probabilitas tinggi. Strategi ini mendapat manfaat dari penyaringan indikator ganda, parameter sederhana, dan mekanisme entri / keluar yang didefinisikan dengan baik untuk secara efektif mengurangi tren dan pembalikan.


/*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()

Lebih banyak