Sumber daya yang dimuat... Pemuatan...

Strategi STI Crossover

Penulis:ChaoZhang, Tanggal: 2024-06-07 16:36:24
Tag:STIEMAATRTEMA

img

Gambaran umum

Strategi ini menggunakan indikator TSI sebagai sinyal perdagangan utama. Ketika indikator TSI melintasi garis sinyalnya, dan indikator TSI berada di bawah batas bawah atau di atas batas atas, strategi akan menghasilkan sinyal posisi terbuka. Pada saat yang sama, strategi ini juga menggunakan indikator seperti EMA dan ATR untuk mengoptimalkan kinerja strategi. Strategi ini hanya berjalan dalam sesi perdagangan tertentu dan menetapkan frekuensi perdagangan minimum untuk mengontrol overtrading.

Prinsip Strategi

  1. Menghitung nilai indikator TSI dan nilai jalur sinyal.
  2. Tentukan apakah waktu saat ini berada dalam kisaran perdagangan yang diizinkan, dan bar saat ini setidaknya adalah jumlah bar minimum yang ditentukan dari perdagangan terakhir.
  3. Jika indikator TSI melintasi di atas garis sinyal dari bawah, dan garis sinyal berada di bawah batas bawah yang ditentukan, sinyal panjang dihasilkan.
  4. Jika indikator TSI melintasi di bawah garis sinyal dari atas, dan garis sinyal berada di atas batas atas yang ditentukan, sinyal pendek dihasilkan.
  5. Jika saat ini memegang posisi panjang, setelah indikator TSI melintasi di bawah garis sinyal dari atas, tutup semua posisi panjang.
  6. Jika saat ini memegang posisi pendek, setelah indikator TSI melintasi di atas garis sinyal dari bawah, tutup semua posisi pendek.

Analisis Keuntungan

  1. Logika strategi jelas, menggunakan tanda silang dari indikator TSI sebagai satu-satunya kondisi untuk membuka dan menutup posisi, yang sederhana dan mudah dimengerti.
  2. Dengan membatasi sesi perdagangan dan frekuensi perdagangan, risiko overtrading dikendalikan secara efektif.
  3. Stop loss yang tepat waktu dan stop profit, setelah sinyal sebaliknya muncul, menutup posisi dengan tegas, mengendalikan eksposur risiko dari satu transaksi.
  4. Berbagai indikator digunakan untuk membantu penilaian, seperti EMA, ATR, dll, meningkatkan ketahanan strategi.

Analisis Risiko

  1. Strategi ini cukup sensitif terhadap pemilihan parameter indikator TSI, dan parameter yang berbeda akan membawa perbedaan kinerja yang besar, yang perlu dipilih dengan hati-hati.
  2. Kondisi pembukaan dan penutupan relatif sederhana, tidak memiliki penilaian tren dan kendala volatilitas, dan dapat mengakibatkan kerugian di pasar yang berosilasi.
  3. Kurangnya manajemen posisi dan manajemen dana, sulit untuk mengendalikan penarikan, setelah kerugian berkelanjutan akan menyebabkan penarikan besar.
  4. Hanya melakukan pembalikan jangka pendek, bukan pelacakan tren, akan kehilangan banyak peluang tren.

Arah Optimalisasi

  1. Mengoptimalkan parameter indikator TSI untuk menemukan kombinasi parameter yang lebih kuat.
  2. Tambahkan indikator penilaian tren, seperti MA atau MACD, untuk memilih arah tren saat membuka posisi untuk meningkatkan tingkat keberhasilan.
  3. Tambahkan indikator volatilitas, seperti ATR, untuk mengurangi jumlah perdagangan di lingkungan pasar dengan volatilitas tinggi.
  4. Memperkenalkan model manajemen posisi untuk menyesuaikan secara dinamis ukuran posisi dari setiap perdagangan berdasarkan kinerja pasar terbaru dan nilai bersih akun.
  5. Logika pelacakan tren dapat ditambahkan untuk terus memegang posisi di pasar tren untuk meningkatkan kemampuan strategi untuk menangkap tren besar.

Ringkasan

Strategi ini didasarkan pada indikator TSI dan menghasilkan sinyal perdagangan melalui persimpangan TSI dan garis sinyalnya. Pada saat yang sama, membatasi waktu dan frekuensi perdagangan untuk mengendalikan risiko. Keuntungan dari strategi ini adalah bahwa logika sederhana dan jelas, dan menghentikan kerugian dan keuntungan secara tepat waktu. Namun, kekurangannya adalah kurangnya penilaian tren dan manajemen posisi, sensitivitas terhadap parameter TSI, dan hanya dapat menangkap pembalikan pasar tren sementara kehilangan pasar. Di masa depan, strategi dapat ditingkatkan dari aspek seperti penilaian tren dan volatilitas, manajemen posisi, dan optimasi parameter.


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


Berkaitan

Lebih banyak