Strategi Crossover TSI

TSI EMA ATR TEMA
Tanggal Pembuatan: 2024-06-07 16:36:24 Akhirnya memodifikasi: 2024-06-07 16:36:24
menyalin: 7 Jumlah klik: 628
1
fokus pada
1617
Pengikut

Strategi Crossover TSI

Ringkasan

Strategi ini menggunakan indikator TSI sebagai sinyal perdagangan utama. Strategi ini menghasilkan sinyal posisi terbuka ketika indikator TSI berpotongan dengan garis sinyalnya dan indikator TSI berada di bawah batas bawah atau di atas batas atas. Strategi ini juga menggunakan indikator seperti EMA dan ATR untuk mengoptimalkan kinerja strategi.

Prinsip Strategi

  1. Hitung nilai indikator TSI dan nilai sinyal line.
  2. Periksa apakah bar saat ini berada dalam batas waktu yang diizinkan untuk transaksi dan apakah bar saat ini setidaknya berada di antara bar minimum yang ditentukan dari transaksi terakhir.
  3. Jika indikator TSI melintasi garis sinyal dari bawah ke atas, dan pada saat ini garis sinyal berada di bawah batas bawah yang ditentukan, maka akan dihasilkan sinyal ganda.
  4. Jika indikator TSI melintasi garis sinyal dari atas ke bawah, dan pada saat ini garis sinyal lebih tinggi dari batas atas yang ditentukan, maka akan dihasilkan sinyal kosong.
  5. Jika saat ini memegang posisi multipel, semua posisi multipel akan dihapus setelah indikator TSI melewati garis sinyal dari atas ke bawah.
  6. Jika saat ini memegang posisi kosong, maka semua posisi kosong akan dipadamkan setelah indikator TSI melintasi garis sinyal dari bawah ke atas.

Analisis Keunggulan

  1. Logika strategi yang jelas, menggunakan cross dari indikator TSI sebagai satu-satunya kondisi untuk membuka posisi kosong, sederhana dan mudah dipahami.
  2. Dengan membatasi waktu dan frekuensi transaksi, risiko overtrading dikendalikan secara efektif.
  3. Hentikan stop loss tepat waktu, dan segera tutup posisi Anda jika ada sinyal sebaliknya, sehingga Anda dapat mengendalikan risiko dalam satu transaksi.
  4. Menggunakan beberapa indikator untuk membantu penilaian, seperti EMA, ATR, dan lain-lain, meningkatkan kehandalan strategi.

Analisis risiko

  1. Kebijakan ini sangat sensitif terhadap pilihan parameter indikator TSI, dan parameter yang berbeda dapat membawa perbedaan kinerja yang besar, yang perlu dipilih dengan hati-hati.
  2. Kondisi untuk membuka posisi dan posisi yang relatif sederhana, kurangnya penilaian tren dan kendala volatilitas, dapat terjadi kerugian dalam situasi yang bergolak.
  3. Kurangnya manajemen posisi dan pengelolaan dana, sulit untuk mengendalikan penarikan, yang dapat menyebabkan penarikan besar jika terjadi kerugian berturut-turut.
  4. Jika Anda hanya melakukan pembalikan kosong dan tidak mengikuti tren, Anda akan kehilangan banyak peluang untuk mengikuti tren.

Arah optimasi

  1. Optimalkan parameter dari indikator TSI untuk menemukan kombinasi parameter yang lebih stabil. Metode seperti algoritma genetik dapat digunakan untuk mencari optimalisasi secara otomatis.
  2. Menambahkan indikator penilaian tren, seperti MA atau MACD, untuk memilih arah tren saat membuka posisi, meningkatkan tingkat keberhasilan.
  3. Menambahkan indikator volatilitas, seperti ATR, mengurangi jumlah transaksi dalam lingkungan pasar dengan volatilitas tinggi.
  4. Model manajemen posisi diperkenalkan untuk menyesuaikan ukuran posisi setiap transaksi berdasarkan kinerja pasar baru-baru ini dan nilai bersih akun.
  5. Ini dapat meningkatkan logika pelacakan tren, mempertahankan posisi di tengah tren, dan meningkatkan kemampuan strategi untuk menangkap tren besar.

Meringkaskan

Strategi ini berpusat pada indikator TSI, menghasilkan sinyal perdagangan melalui persilangan TSI dan jalur sinyal. Pada saat yang sama, waktu perdagangan dan frekuensi perdagangan dibatasi untuk mengendalikan risiko. Keuntungan strategi adalah logika yang sederhana dan jelas, dan stop loss tepat waktu. Namun, kekurangan adalah kurangnya penilaian tren dan manajemen posisi, sensitif terhadap parameter TSI, hanya dapat menangkap keadaan yang berbalik dan kehilangan tren.

Kode 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)