Strategi Scalping Buaya Williams

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

Ringkasan

Strategi ini berdasarkan pada penunjuk Bill Williams Alligator tetapi menggunakan lilin Heiken Ashi sebagai input harga.

Logika Strategi

Prinsip perdagangan utama strategi adalah:

  1. Menggunakan lilin Heiken Ashi bukannya lilin biasa untuk tindakan harga.

  2. Menggunakan tiga garis purata bergerak dari Bill Williams Alligator - Jaw, Gigi dan Bibir. Mereka bertindak seperti purata bergerak untuk menentukan arah trend.

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

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

  5. Keluar apabila garis Alligator bersilang, menandakan pembalikan trend.

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

Kelebihan utama strategi adalah:

  1. Penapisan penunjuk ganda meminimumkan isyarat palsu.

  2. Pengiktirafan trend yang jelas dan intuitif. Garis buaya mempunyai isyarat bull/bear yang jelas.

  3. Efisien untuk scalping jangka pendek. menangkap perubahan harga pada carta 1 minit hingga 5 minit.

  4. Parameter mudah. Tiada pengoptimuman yang rumit diperlukan.

  5. Pengurusan risiko yang ketat melalui mengambil keuntungan, berhenti kehilangan titik.

  6. Peraturan masuk/keluar yang ditentukan berdasarkan penyeberangan garisan Alligator.

  7. Mudah untuk dilaksanakan dan ditiru.

Risiko

Risiko utama yang perlu dipertimbangkan ialah:

  1. Risiko penarikan daripada whipsaws. Isyarat buaya yang kerap boleh meningkatkan perdagangan dan kos.

  2. Risiko pasaran yang terhad. Crossover gagal semasa keadaan bergelombang.

  3. Risiko terlalu optimum, pemasangan lengkung dari penyesuaian parameter yang buruk.

  4. Risiko kegagalan penunjuk. Buaya mungkin berhenti bekerja dalam keadaan yang melampau.

  5. Risiko kehilangan berhenti. Celah boleh mencetuskan berhenti menyebabkan kerugian yang tidak dibenarkan.

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

Peluang Peningkatan

Beberapa cara untuk meningkatkan strategi adalah:

  1. Sertakan penapis tambahan seperti RSI untuk kadar kemenangan yang lebih tinggi.

  2. Menggunakan hentian ATR dinamik untuk mengawal kerugian setiap perdagangan.

  3. Tambah peraturan saiz kedudukan untuk mengoptimumkan saiz taruhan.

  4. Gabungkan corak carta atau analisis teknikal lain untuk masa kemasukan.

  5. Mengoptimumkan parameter berdasarkan jenis instrumen (stocks, forex dan lain-lain).

  6. Memperkenalkan pembelajaran mesin untuk pengoptimuman parameter adaptif.

  7. Melakukan analisis jangkaan untuk menyempurnakan nisbah keuntungan vs stop loss.

Dengan peningkatan berterusan, strategi ini boleh menjadi sistem perdagangan jangka pendek yang kukuh.

Kesimpulan

Strategi ini menggabungkan Heiken Ashi dengan Williams Alligator untuk mewujudkan strategi perdagangan jangka pendek kebarangkalian tinggi. Ia mendapat manfaat daripada penapisan penunjuk berganda, parameter mudah, dan mekanisme masuk / keluar yang ditakrifkan dengan baik untuk menghapuskan trend dan pembalikan dengan berkesan. Tetapi whipsaws di pasaran yang berbeza dan risiko kehilangan berhenti memerlukan pengurusan aktif. Dengan penyempurnaan yang berterusan, ia boleh berkembang menjadi sistem perdagangan jangka pendek yang agak stabil.


/*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 lanjut