Strategi Trailing Stop Triple EMA


Tanggal Pembuatan: 2023-10-17 15:05:41 Akhirnya memodifikasi: 2023-10-17 15:05:41
menyalin: 2 Jumlah klik: 715
1
fokus pada
1617
Pengikut

Strategi Trailing Stop Triple EMA

Ringkasan

Strategi ini adalah implementasi dari strategi perdagangan rata-rata bergerak indeks tiga yang khas. Ini menghasilkan sinyal perdagangan dengan persilangan antara EMA 5 hari yang lebih cepat, EMA 20 hari yang lebih cepat, dan EMA 50 hari yang lebih lambat.

Prinsip

Ketika 5 hari EMA melewati 20 hari EMA, dan tiga EMA adalah berurutan ganda ((5 hari EMA > 20 hari EMA > 50 hari EMA), dan saat ini K garis harga closeout naik lebih dari hari sebelumnya harga closeout tertentu ticks, melakukan lebih; ketika 5 hari EMA bawah melewati 20 hari EMA, dan tiga EMA adalah berurutan kosong ((5 hari EMA < 20 hari EMA < 50 hari EMA), dan saat ini K garis harga closeout turun lebih dari hari sebelumnya harga closeout tertentu ticks, melakukan kosong.

Setelah masuk, jika harga berjalan melebihi ticks tertentu, maka memulai mekanisme pelacakan stop loss, sesuai dengan fluktuasi harga untuk terus-menerus menyesuaikan garis stop loss, untuk mengunci lebih banyak keuntungan.

Keunggulan

  1. Dengan menggunakan triple EMA untuk membentuk sinyal perdagangan, Anda dapat secara efektif menyaring kebisingan pasar dan mengidentifikasi tren. EMA cepat mencerminkan perubahan terbaru, EMA menengah menentukan arah tren, EMA lambat menyaring getaran.

  2. Meningkatkan perbandingan harga K-line saat ini dengan harga K-line hari sebelumnya dapat lebih memfilter sinyal palsu dan mengurangi transaksi yang tidak perlu.

  3. Menggunakan mekanisme tracking stop loss, Anda dapat secara dinamis menyesuaikan stop loss line sesuai dengan tren pasar, untuk maksimal mengunci keuntungan.

  4. Parameter strategi ini diatur secara fleksibel dan dapat dioptimalkan untuk varietas dan periode yang berbeda, mulai dari garis waktu hingga garis menit.

Risiko

  1. Dalam situasi yang bergejolak, sinyal EMA sering berselisih, dan dapat menghasilkan terlalu banyak transaksi yang meningkatkan biaya transaksi dan biaya slippage.

  2. Tracking stop loss dapat dihentikan terlalu dini dalam gempa besar dan tidak dapat menahan keseluruhan tren.

  3. EMA memiliki karakteristik delay yang dapat menyebabkan kehilangan.

  4. Parameter yang perlu dioptimalkan seperti panjang siklus EMA, pelacakan ticks stop loss, dan lain-lain.

Arah optimasi

  1. Indikator lain seperti MACD, KD, dan lain-lain dapat digunakan untuk membantu memfilter sinyal perdagangan.

  2. Dapat diuji dan dioptimalkan berdasarkan varietas dan parameter siklus tertentu untuk menemukan kombinasi parameter optimal.

  3. Parameter ini dapat disesuaikan secara dinamis melalui intervensi manual atau pembelajaran mesin.

  4. Anda dapat mempertimbangkan untuk menutup tracking stop loss dan trend memegang posisi penuh dalam situasi tertentu.

  5. Hal ini dapat dikombinasikan dengan Stop Stop otomatis untuk menggantikan tracking stop loss sederhana.

Meringkaskan

Strategi ini mengintegrasikan tiga metode analisis teknis yang umum untuk EMA crossing, harga breakout, dan tracking stop loss, membentuk sistem perdagangan yang lebih komprehensif dan andal untuk melacak tren. Dengan pengoptimalan parameter, dapat disesuaikan dengan berbagai jenis dan siklus, dan bekerja dengan baik di pasar yang jelas tren. Namun, strategi ini juga memiliki beberapa kelemahan strategi analisis teknis yang khas, yang perlu dioptimalkan lebih lanjut untuk menghadapi lebih banyak situasi pasar.

Kode Sumber Strategi
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
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/
// © Matt Dearden - IndoPilot
// @version=4

/////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// 
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true

strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, 
 default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
 commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, 
 max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) 

///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////

DateFilter = input(false, "═════ Data Filtering ═════") 
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) 
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) 
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) 
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) 
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) 
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) 

//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////

var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) 
OrderQty = 1  
Buffer = InitBuffer / (Multiplier * 100)

/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////

EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)

//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) 
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) 

/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////

if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))  
    StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) 
    strategy.exit("Long Stoploss", "Long") 
    
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) 
    StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
    strategy.exit("Short Stoploss", "Short") 
    
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////

if (longCondition)
    StartPrice := close
    StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Long", strategy.long, qty=OrderQty)
    strategy.exit("Long Stoploss", "Long")

if (shortCondition)
    StartPrice := close
    StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Short", strategy.short, qty=OrderQty)
    strategy.exit("Short Stoploss", "Short")
    
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)