Strategi Mengikuti Trend Purata Pergerakan Seimbang Panjang-Pendek


Tarikh penciptaan: 2024-01-18 12:07:52 Akhirnya diubah suai: 2024-01-18 12:07:52
Salin: 0 Bilangan klik: 608
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Purata Pergerakan Seimbang Panjang-Pendek

Gambaran keseluruhan

Strategi ini adalah strategi mengikut trend purata bergerak sederhana yang digunakan untuk Bitcoin dan Ethereum. Ia menggabungkan beberapa petunjuk seperti garis rata-rata, MACD dan RSI untuk mengenal pasti arah trend, dan mengikuti trend dengan menggunakan garis panjang pegangan tetap.

Prinsip Strategi

Logik teras strategi ini adalah apabila 20 hari EMA melintasi 100 hari SMA dan 100 hari SMA melintasi 200 hari SMA lebih banyak; apabila 20 hari EMA melintasi 100 hari SMA di bawah garis. Ia menggunakan tiga purata bergerak dari tempoh yang berbeza untuk menentukan arah trend.

Khususnya, strategi ini menilai trend dengan mengira nilai garis EMA 20, 100 hari SMA dan 200 hari SMA dan membandingkan hubungan saiz mereka. Apabila garis EMA 20 memakai garis EMA 100 hari, iaitu garis EMA 20 yang lebih besar daripada garis SMA 100 hari, ini menunjukkan bahawa harga mula naik; pada masa ini, jika garis SMA 100 hari juga lebih besar daripada garis SMA 200 hari, ini menunjukkan bahawa trend jangka menengah juga meningkat, yang merupakan isyarat melakukan lebih banyak.

Selepas memasuki posisi berlebih, strategi akan terus memegang kedudukan dan mengikuti trend. Apabila garis EMA ke-20 kembali menembusi garis SMA ke-100 di bawah, menunjukkan isyarat pembalikan trend jangka pendek, maka strategi akan memilih untuk menghentikan kerugian.

Selain itu, strategi ini juga menggabungkan indikator seperti MACD dan RSI untuk mengesahkan trend. Hanya apabila garis DIF MACD, garis DEMA dan garis pilar HIST meningkat, dan apabila indikator RSI lebih tinggi daripada 50, anda akan memilih untuk membuka lebih banyak kedudukan.

Kelebihan Strategik

Kelebihan utama strategi ini ialah menetapkan peraturan perdagangan trend yang jelas, yang dapat mengesan trend garis tengah dengan berkesan. Kelebihan spesifiknya adalah sebagai berikut:

  1. Menggunakan pelbagai kumpulan purata bergerak untuk menilai trend, lebih dipercayai.
  2. Menggunakan cara memegang kedudukan panjang untuk mengesan trend dan tidak mudah terganggu oleh turun naik pasaran jangka pendek.
  3. Dengan menggunakan indikator seperti MACD dan RSI untuk mengesahkan isyarat strategi, anda boleh menyaring penembusan palsu.
  4. Gelang EMA dan Gelang Mati Gelang EMA dan Gelang Mati Gelang SMA untuk menentukan tempat masuk dan keluar. Peraturan mudah dan jelas.
  5. Mengendalikan risiko dengan berkesan dan mengehadkan kerugian dengan menghentikan kerugian.

Risiko dan penyelesaian

Strategi ini juga mempunyai beberapa risiko, masalah utamanya adalah tidak dapat menghentikan dalam masa yang tepat apabila trend berbalik. Risiko dan penyelesaian khusus adalah seperti berikut:

  1. Tidak dapat menjejaki titik perubahan trend dalam masa yang tepat: anda boleh memotong kitaran garis purata, atau menambah lebih banyak petunjuk untuk penilaian komprehensif.

  2. Penyimpanan terlalu lama boleh menyebabkan kerugian yang lebih besar: anda boleh memendekkan garis keluar dengan tepat, dan menghentikan kerugian tepat pada masanya.

  3. Penunjuk garis rata-rata mudah mengalami kelewatan: anda boleh menambah garis hentian dengan peratusan penarikan balik tertentu, hentian aktif.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa aspek:

  1. Uji pusingan purata lebih banyak kombinasi untuk mencari parameter optimum.

  2. Cubalah dengan penunjuk atau model lain untuk menilai trend dan masa kemasukan.

  3. Parameter pengoptimuman dinamik menggunakan pembelajaran mesin dan lain-lain. Sebagai contoh, menyesuaikan stop loss menggunakan pembelajaran penguatan.

  4. Gabungan dengan penunjuk jumlah transaksi untuk mengelakkan penembusan palsu. Seperti penunjuk arus tenaga, jumlah transaksi dan sebagainya.

  5. Membangunkan sistem stop loss automatik dan tracking stop loss yang dapat menyesuaikan kedudukan stop loss mengikut keadaan pasaran.

ringkaskan

Strategi ini secara keseluruhan adalah strategi mengikuti trend yang mudah dan langsung. Ia menggunakan purata bergerak untuk menentukan arah trend, MACD dan isyarat penapis RSI. Ia menggunakan masa pegangan yang lebih lama untuk mengesan trend.

Kod sumber strategi
/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="BTC_Long_Only_TV01_200507", overlay=true)

//////////// !!!!!!!!!!!!!!!! WORK BEST IN 2 HOURS for BTC, ETH and ETHXBT !!!!!!!!!!!!!!!!!!! /////////////////////
//280820 - After long esting this is the best script for ETHUSD in 4 hours. From 01/01/2020 til 28/08/2020


[macdLine, macdSignalLine, macdHist] = macd(close, 12, 26, 7)  

//_rsi_len = input(14, title="RSI length")
_rsi_len = 14 
  
NewValue = 0
PreviousValue = 0
leverage = 1

smaPercentageIncrease = 0.0
SMA_PERCENT_INCREASE = 0.0
float atrValue = 0
bool bPositionOpened = false
float stockPositionSize = 0 
float volatilityPercentage = 0.0
bool bDisplayArrow = false 
bool bEMAIsRising = false
bool bSMAIsRising = false
bool bSMASlowIsRising = false
bool bMACDIsRising = false
bool bMACDHistIsRising = false
bool bMACDSignalIsRising = false

float stopLoss = input (5, "StopLoss in %", type=input.float) //StopLoss associated with the order
//Best for alt versus BTC float stopLoss = input (3, "StopLoss in %", type=input.float) //StopLoss associated with the order 
float positionSize = 1000
float currentPrice = close 
float stopLossPrice = 0
float entryPrice = 0


//-----------------------------------------------------------


// === INPUT BACKTEST RANGE ONE YEAR 
//FromDay   = input(defval = 01, title = "From Day", minval = 1, maxval = 31)
//FromMonth = input(defval = 01, title = "From Month", minval = 1, maxval = 12)
//FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
FromDay   = 01
FromMonth = 01
FromYear  = 2020

//ToDay     = input(defval = 01, title = "To Day", minval = 1, maxval = 31)
//ToMonth   = input(defval = 01, title = "To Month", minval = 1, maxval = 12)
//ToYear    = input(defval = 2023, title = "To Year", minval = 2017)
ToDay     = 14
ToMonth   = 05
ToYear    = 2029

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"


//FUNCTION DEFINITIONS
//----------------------
IsRising(data, loopBack) =>
    bIsRising = true
    for n = 1 to loopBack
        if data[n] > data[n-1]
            bIsRising := false
        continue
    bIsRising
    
IsFalling(data, loopBack) =>
    bIsFalling = true
    for n = 1 to loopBack
        if data[n] < data[n-1]
            bIsFalling := false
        continue
    bIsFalling
    
// END OF FUNCTION DEFINITIONS //


emaLength = 20
smaLength = 100
smaSlowLength = 200
 
ema = ema(close, emaLength) 
sma = sma(close, smaLength)
smaSlow = sma(close, smaSlowLength)

plot(sma, color=color.green)
plot(smaSlow, color=color.orange)
plot(ema, color=color.yellow)

//reload previous values
stopLossPrice := na(stopLossPrice[1]) ? 0.0 : stopLossPrice[1]
entryPrice := na(entryPrice[1]) ? 0.0 : entryPrice[1]
bPositionOpened := na(bPositionOpened[1]) ? false : bPositionOpened[1]
positionSize := na(positionSize[1]) ? 1000 : positionSize[1]
stockPositionSize := na(stockPositionSize[1]) ? 0 : stockPositionSize[1]
//leverage := na(leverage[1]) ? 1 : leverage[1]

bEMAIsRising := IsRising(ema, 2) 
bSMAIsRising := IsRising(sma, 3)
bMACDIsRising := IsRising(macdLine, 3)
bMACDHistIsRising := IsRising(macdHist, 1)
bSMASlowIsRising := IsRising(smaSlow, 10)
bMACDSignalIsRising := IsRising(macdSignalLine, 3)


atrValue := atr(14)
volatilityPercentage := (atrValue/currentPrice)*100 //calcute the volatility. Percentage of the actual price

 
if (window()) 
    //Check if we can open a LONG
    if (bPositionOpened == false and bSMASlowIsRising == true and bMACDIsRising == true and bEMAIsRising == true and bSMAIsRising == true and ema[0] > sma[0] and sma[0] < currentPrice)
        //Enter in short position 
        stockPositionSize := (positionSize*leverage)/currentPrice //Calculate the position size based on the actual price and the position Size (in $) configured.
        
        //calculate exit values
        stopLossPrice := currentPrice*(1-stopLoss/100) 
        strategy.entry("myPosition", strategy.long, qty=stockPositionSize, comment="BUY at " + tostring(currentPrice))
        entryPrice := currentPrice //store the entry price
        bPositionOpened := true  
        bDisplayArrow := true 
        
    if (bPositionOpened == true and (currentPrice <= stopLossPrice or crossunder(ema[1], sma[1])))
        strategy.close("myPosition", comment="" + tostring(currentPrice) ) //Stop
        //uncomment the below line to make the bot investing the full portfolio amount to test compounding effect.
        //positionSize := positionSize + ((stockPositionSize * currentPrice) - (positionSize*leverage)) 
        //reset some flags 
        bPositionOpened := false 
        bDisplayArrow := true 
        entryPrice := 0.0