Strategi Crossover TSI

TSI EMA ATR TEMA
Tarikh penciptaan: 2024-06-07 16:36:24 Akhirnya diubah suai: 2024-06-07 16:36:24
Salin: 7 Bilangan klik: 628
1
fokus pada
1617
Pengikut

Strategi Crossover TSI

Gambaran keseluruhan

Strategi ini menggunakan indikator TSI sebagai isyarat perdagangan utama. Strategi ini menghasilkan isyarat pembukaan kedudukan apabila indikator TSI bersalin dengan garis isyaratnya dan indikator TSI berada di bawah atau di atas had bawah. Strategi ini juga menggunakan indikator seperti EMA dan ATR untuk mengoptimumkan prestasi strategi.

Prinsip Strategi

  1. Hitung nilai indikator TSI dan nilai garis isyarat.
  2. Menilai sama ada bar semasa berada dalam tempoh masa yang dibenarkan untuk berdagang, dan bar semasa berada sekurang-kurangnya beberapa bar minimum yang ditetapkan dari transaksi terakhir.
  3. Jika indikator TSI melintasi garis isyarat dari bawah ke atas, dan pada masa ini garis isyarat berada di bawah had bawah yang ditetapkan, maka dihasilkan isyarat ganda.
  4. Jika petunjuk TSI melintasi garis isyarat dari atas ke bawah, dan pada masa ini garis isyarat lebih tinggi daripada had atas yang ditetapkan, isyarat kosong akan dihasilkan.
  5. Sekiranya anda memegang banyak kedudukan, anda harus menebus semua kedudukan apabila indikator TSI melintasi garis isyarat dari atas ke bawah.
  6. Jika anda memegang kedudukan kosong pada masa ini, semak semua kedudukan kosong sebaik sahaja indikator TSI melintasi garis isyarat dari bawah ke atas.

Analisis kelebihan

  1. Logik strategi yang jelas, menggunakan crossover TSI sebagai satu-satunya syarat untuk membuka kedudukan kosong, mudah difahami.
  2. Menghadkan masa dan kekerapan dagangan untuk mengawal risiko perdagangan berlebihan.
  3. Hentikan Hentian Kerosakan (STOP) tepat pada masanya, dan keluar dari kedudukan yang sama apabila isyarat sebaliknya muncul, mengawal risiko perdagangan tunggal.
  4. Penggunaan pelbagai petunjuk untuk membantu penilaian, seperti EMA, ATR dan lain-lain, meningkatkan kestabilan strategi.

Analisis risiko

  1. Strategi ini sensitif terhadap pilihan parameter TSI, parameter yang berbeza boleh membawa perbezaan prestasi yang besar, perlu dipilih dengan berhati-hati.
  2. Syarat-syarat untuk membuka dan meletakkan kedudukan adalah lebih mudah, kurangnya penilaian trend dan kekangan kadar turun naik, yang boleh menyebabkan kerugian dalam keadaan gegaran.
  3. Kekurangan pengurusan kedudukan dan pengurusan dana, sukar untuk mengawal penarikan balik, dan kerugian berturut-turut boleh menyebabkan penarikan balik yang besar.
  4. Jika anda hanya melakukan pembalikan kosong dan tidak mengikuti trend, anda akan kehilangan banyak peluang untuk melihat trend.

Arah pengoptimuman

  1. Mengoptimumkan parameter TSI untuk mencari kombinasi parameter yang lebih stabil. Kaedah seperti algoritma genetik boleh digunakan untuk mencari optimum secara automatik.
  2. Menambahkan indikator penilaian trend, seperti MA atau MACD, untuk memilih arah trend semasa membuka kedudukan, meningkatkan kadar kejayaan.
  3. Menambah indikator turun naik, seperti ATR, mengurangkan jumlah dagangan dalam persekitaran pasaran turun naik yang tinggi.
  4. Memperkenalkan model pengurusan kedudukan yang menyesuaikan saiz kedudukan setiap urus niaga mengikut prestasi pasaran terkini dan nilai bersih akaun.
  5. Anda boleh menambah logik untuk menjejaki trend, terus memegang kedudukan dalam trend, dan meningkatkan keupayaan strategi untuk menangkap trend besar.

ringkaskan

Strategi ini menggunakan indikator TSI sebagai pusatnya, menghasilkan isyarat perdagangan melalui persilangan TSI dengan garis isyarat. Pada masa yang sama, masa perdagangan dan frekuensi perdagangan dibatasi untuk mengawal risiko. Kelebihan strategi adalah logiknya mudah dan jelas, dan menghentikan kerugian tepat pada masanya. Tetapi kekurangannya adalah kekurangan penilaian trend dan pengurusan kedudukan, sensitif terhadap parameter TSI, hanya dapat menangkap keadaan berbalik arah dan kehilangan trend.

Kod sumber strategi
/*backtest
start: 2024-05-30 00:00:00
end: 2024-06-06 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nikgavalas

//@version=5
strategy("TSI Entries", overlay=true, margin_long=100, margin_short=100)

//
// INPUTS
//

// Define the start and end hours for trading
string sessionInput = input("1000-1530", "Session")

// Day of the week.
string daysInput = input.string("23456", tooltip = "1 = Sunday, 7 = Saturday")

// Minimum number of bar's between entries
requiredBarsBetweenEntries = input.int(12, "Required Bars Between Entries")

// Show debug labels
bool showDebugLabels = input.bool(false, "Show Debug Labels")

//
// FUNCTIONS
//

//@function Define the triple exponential moving average function
tema(src, len) => tema = 3 * ta.ema(src, len) - 3 * ta.ema(ta.ema(src, len), len) + ta.ema(ta.ema(ta.ema(src, len), len), len)

//@function Atr with EMA
atr_ema(length) =>
    trueRange = na(high[1])? high-low : math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
    //true range can be also calculated with ta.tr(true)
    ta.ema(trueRange, length)

//@function Check if time is in range
timeinrange() => 
    sessionString = sessionInput + ":" + daysInput
    inSession = not na(time(timeframe.period, sessionString, "America/New_York"))

//@function Displays text passed to `txt` when called.
debugLabel(txt, color, y, style) =>
    if (showDebugLabels) 
        label.new(bar_index, y, text = txt, color = color, style = style, textcolor = color.black, size = size.small)


//
// INDICATOR CODE
//

long = input(title="TSI Long Length", defval=8)
short = input(title="TSI Short Length", defval=8)
signal = input(title="TSI Signal Length", defval=3)
lowerLine = input(title="TSI Lower Line", defval=-50)
upperLine = input(title="TSI Upper Line", defval=50)

price = close
double_smooth(src, long, short) =>
	fist_smooth = ta.ema(src, long)
	ta.ema(fist_smooth, short)

pc = ta.change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short)
tsiValue = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
signalValue = ta.ema(tsiValue, signal)

//
// COMMON VARIABLES
//

var color trendColor = na
var int lastEntryBar = na

bool tradeAllowed = timeinrange() == true and (na(lastEntryBar) or bar_index - lastEntryBar > requiredBarsBetweenEntries)

// 
// CROSSOVER
//

bool crossOver = ta.crossover(tsiValue, signalValue)
bool crossUnder = ta.crossunder(tsiValue,signalValue)

if (tradeAllowed) 
	if (signalValue < lowerLine and crossOver == true)
		strategy.entry("Up", strategy.long)
		lastEntryBar := bar_index

	else if (signalValue > upperLine and crossUnder == true)

		strategy.entry("Down", strategy.short)
		lastEntryBar := bar_index

// 
// EXITS
// 

if (strategy.position_size > 0 and crossUnder == true)
	strategy.close("Up", qty_percent = 100)

else if (strategy.position_size < 0 and crossOver == true)
	strategy.close("Down", qty_percent = 100)