Sumber dimuat naik... memuat...

Strategi STI Crossover

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

img

Ringkasan

Strategi ini menggunakan penunjuk TSI sebagai isyarat dagangan utama. Apabila penunjuk TSI melintasi garis isyaratnya, dan penunjuk TSI berada di bawah had bawah atau di atas had atas, strategi akan menghasilkan isyarat kedudukan terbuka. Pada masa yang sama, strategi ini juga menggunakan penunjuk seperti EMA dan ATR untuk mengoptimumkan prestasi strategi. Strategi ini hanya berjalan dalam sesi dagangan tertentu dan menetapkan kekerapan dagangan minimum untuk mengawal overtrading.

Prinsip Strategi

  1. Mengira nilai penunjuk STI dan nilai garis isyarat.
  2. Tentukan sama ada masa semasa berada dalam julat dagangan yang dibenarkan, dan bar semasa sekurang-kurangnya bilangan bar minimum yang ditetapkan dari perdagangan terakhir.
  3. Jika penunjuk TSI melintasi di atas garis isyarat dari bawah, dan garis isyarat di bawah had bawah yang ditetapkan, isyarat panjang dihasilkan.
  4. Jika penunjuk TSI melintasi di bawah garis isyarat dari atas, dan garis isyarat di atas had atas yang ditetapkan, isyarat pendek dihasilkan.
  5. Jika kini memegang kedudukan panjang, sebaik sahaja penunjuk TSI melintasi di bawah garis isyarat dari atas, tutup semua kedudukan panjang.
  6. Jika kini memegang kedudukan pendek, sebaik sahaja penunjuk TSI melintasi di atas garis isyarat dari bawah, tutup semua kedudukan pendek.

Analisis Kelebihan

  1. Logik strategi adalah jelas, menggunakan silang penunjuk STI sebagai satu-satunya syarat untuk membuka dan menutup kedudukan, yang mudah dan mudah difahami.
  2. Dengan mengehadkan sesi dagangan dan kekerapan dagangan, risiko overtrading dapat dikawal dengan berkesan.
  3. Hentikan kerugian tepat pada masanya dan hentikan keuntungan, sebaik sahaja isyarat yang bertentangan muncul, menutup kedudukan dengan tegas, mengawal pendedahan risiko satu transaksi.
  4. Pelbagai penunjuk digunakan untuk membantu penilaian, seperti EMA, ATR, dan lain-lain, meningkatkan ketahanan strategi.

Analisis Risiko

  1. Strategi ini agak sensitif terhadap pemilihan parameter petunjuk TSI, dan parameter yang berbeza akan membawa perbezaan prestasi yang besar, yang perlu dipilih dengan teliti.
  2. Syarat pembukaan dan penutupan agak mudah, tidak mempunyai penilaian trend dan kekangan turun naik, dan boleh mengakibatkan kerugian di pasaran berayun.
  3. Kekurangan pengurusan kedudukan dan pengurusan dana, sukar untuk mengawal pengeluaran, apabila kerugian berterusan akan membawa kepada pengeluaran yang besar.
  4. Hanya melakukan pembalikan jangka pendek, bukan trend tracking, akan kehilangan banyak peluang trend.

Arah pengoptimuman

  1. Mengoptimumkan parameter penunjuk TSI untuk mencari kombinasi parameter yang lebih kukuh.
  2. Tambah penunjuk penilaian trend, seperti MA atau MACD, untuk memilih arah trend apabila membuka kedudukan untuk meningkatkan kadar kejayaan.
  3. Menambah penunjuk turun naik, seperti ATR, untuk mengurangkan bilangan dagangan dalam persekitaran pasaran turun naik yang tinggi.
  4. Memperkenalkan model pengurusan kedudukan untuk menyesuaikan saiz kedudukan setiap perdagangan secara dinamik berdasarkan prestasi pasaran baru-baru ini dan nilai bersih akaun.
  5. Logik pengesanan trend boleh ditambah untuk terus memegang kedudukan di pasaran trend untuk meningkatkan keupayaan strategi untuk menangkap trend besar.

Ringkasan

Strategi ini adalah berdasarkan kepada penunjuk TSI dan menghasilkan isyarat perdagangan melalui persilangan TSI dan garis isyaratnya. Pada masa yang sama, ia mengehadkan masa perdagangan dan kekerapan untuk mengawal risiko. Kelebihan strategi adalah bahawa logiknya mudah dan jelas, dan ia menghentikan kerugian dan keuntungan dengan tepat pada masanya. Walau bagaimanapun, kelemahan adalah kekurangan penilaian trend dan pengurusan kedudukan, kepekaan terhadap parameter TSI, dan hanya dapat menangkap pembalikan pasaran semasa kehilangan pasaran. Pada masa akan datang, strategi dapat dipertingkatkan dari aspek seperti penilaian trend dan turun naik, pengurusan kedudukan, dan pengoptimuman 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 lanjut