Strategi posisi tren panjang dan pendek lintas pasar semalam berdasarkan indikator EMA

EMA MA
Tanggal Pembuatan: 2024-11-12 10:49:00 Akhirnya memodifikasi: 2024-11-12 10:49:00
menyalin: 2 Jumlah klik: 483
1
fokus pada
1617
Pengikut

Strategi posisi tren panjang dan pendek lintas pasar semalam berdasarkan indikator EMA

Strategi ini adalah strategi pegangan overnight lintas pasar yang didasarkan pada indikator teknis EMA, yang dirancang untuk menangkap peluang perdagangan sebelum dan setelah penutupan pasar. Strategi ini memungkinkan perdagangan cerdas dalam berbagai kondisi pasar melalui kontrol waktu yang tepat dan penyaringan indikator teknis.

Tinjauan Strategi

Strategi ini terutama untuk mendapatkan keuntungan dengan masuk pada waktu tertentu sebelum penutupan pasar, dan keluar pada waktu tertentu setelah bukaan pasar pada hari berikutnya. Dalam kombinasi dengan indikator EMA sebagai konfirmasi tren, mencari peluang perdagangan di beberapa pasar global. Strategi ini juga mengintegrasikan fungsi perdagangan otomatis, yang memungkinkan operasi tanpa penjaga.

Prinsip Strategi

  1. Pengendalian waktu: sesuai dengan waktu perdagangan di pasar yang berbeda, tetapkan waktu masuk sebelum penutupan, tetapkan waktu keluar setelah buka
  2. Filter EMA: validasi sinyal masuk dengan indikator EMA yang dapat dipilih
  3. Pilihan Pasar: Dukungan untuk beradaptasi dengan waktu perdagangan di tiga pasar utama AS, Asia, dan Eropa
  4. Perlindungan akhir pekan: Memaksakan penutupan posisi sebelum penutupan hari Jumat, menghindari risiko akhir pekan

Keunggulan Strategis

  1. Adaptasi multi-pasar: dapat menyesuaikan waktu perdagangan secara fleksibel sesuai dengan karakteristik pasar yang berbeda
  2. Pengendalian risiko yang sempurna: termasuk mekanisme perlindungan posisi kosong akhir pekan
  3. Tingkat otomatisasi yang tinggi: Dukungan antarmuka transaksi otomatis
  4. Fleksibilitas parameter: waktu transaksi dan parameter indikator teknis dapat disesuaikan
  5. Pertimbangan biaya transaksi: termasuk biaya dan pengaturan slider

Risiko Strategis

  1. Risiko Volatilitas Pasar: Berada di Posisi Overnight Bisa Berisiko Meledak
  2. Ketergantungan waktu: Efektivitas strategi dipengaruhi oleh pilihan periode waktu pasar
  3. Keterbatasan indikator teknis: Indikator EMA tunggal mungkin tertinggal Rekomendasi: Setting Stop Loss Limits, Adding More Technical Indicator Verification

Arah optimasi strategi

  1. Menambahkan lebih banyak portofolio indikator teknis
  2. Memperkenalkan mekanisme penyaringan fluktuasi
  3. Optimalkan pilihan waktu masuk dan keluar
  4. Menambahkan fungsi penyesuaian parameter adaptif
  5. Meningkatkan modul kontrol risiko

Meringkaskan

Strategi ini melalui kontrol waktu yang tepat dan penyaringan indikator teknis, mencapai sistem perdagangan malam hari yang andal. Desain strategi mempertimbangkan secara menyeluruh kebutuhan pertempuran nyata, termasuk faktor-faktor seperti adaptasi multi-pasar, kontrol risiko, dan perdagangan otomatis, dengan nilai praktis yang kuat. Dengan terus-menerus mengoptimalkan dan menyempurnakan, strategi ini diharapkan untuk menghasilkan keuntungan yang stabil dalam perdagangan di tempat.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

// This strategy, titled "Overnight Market Entry Strategy with EMA Filter," is designed for entering long positions shortly before 
// the market closes and exiting shortly after the market opens. The strategy allows for selecting between different global market sessions (US, Asia, Europe) and 
// uses an optional EMA (Exponential Moving Average) filter to validate entry signals. The core logic is to enter trades based on conditions set for a specified period before 
// the market close and to exit trades either after a specified period following the market open or just before the weekend close. 
// Additionally, 3commas bot integration is included to automate the execution of trades. The strategy dynamically adjusts to market open and close times, ensuring trades are properly timed based on the selected market. 
// It also includes a force-close mechanism on Fridays to prevent holding positions over the weekend.

//@version=5
strategy("Overnight Positioning with EMA Confirmation - Strategy [presentTrading]", overlay=true, precision=3, commission_value=0.02, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=10000)

// Input parameters
entryMinutesBeforeClose = input.int(20, title="Minutes Before Close to Enter", minval=1)
exitMinutesAfterOpen = input.int(20, title="Minutes After Open to Exit", minval=1)
emaLength = input.int(100, title="EMA Length", minval=1)
emaTimeframe = input.timeframe("240", title="EMA Timeframe")
useEMA = input.bool(true, title="Use EMA Filter")

// Market Selection Input
marketSelection = input.string("US", title="Select Market", options=["US", "Asia", "Europe"])

// Timezone for each market
marketTimezone = marketSelection == "US" ? "America/New_York" :
                 marketSelection == "Asia" ? "Asia/Tokyo" :
                 "Europe/London"  // Default to London for Europe

// Market Open and Close Times for each market
var int marketOpenHour = na
var int marketOpenMinute = na
var int marketCloseHour = na
var int marketCloseMinute = na

if marketSelection == "US"
    marketOpenHour := 9
    marketOpenMinute := 30
    marketCloseHour := 16
    marketCloseMinute := 0
else if marketSelection == "Asia"
    marketOpenHour := 9
    marketOpenMinute := 0
    marketCloseHour := 15
    marketCloseMinute := 0
else if marketSelection == "Europe"
    marketOpenHour := 8
    marketOpenMinute := 0
    marketCloseHour := 16
    marketCloseMinute := 30

// 3commas Bot Settings
emailToken = input.string('', title='Email Token', group='3commas Bot Settings')
long_bot_id = input.string('', title='Long Bot ID', group='3commas Bot Settings')
usePairAdjust = input.bool(false, title='Use this pair in PERP', group='3commas Bot Settings')
selectedExchange = input.string("Binance", title="Select Exchange", group='3commas Bot Settings', options=["Binance", "OKX", "Gate.io", "Bitget"])

// Determine the trading pair based on settings
var pairString = ""
if usePairAdjust
    pairString := str.tostring(syminfo.currency) + "_" + str.tostring(syminfo.basecurrency) + (selectedExchange == "OKX" ? "-SWAP" : "") 
else
    pairString := str.tostring(syminfo.currency) + "_" + str.tostring(syminfo.basecurrency)

// Function to check if it's a trading day (excluding weekends)
isTradingDay(t) =>
    dayOfWeek = dayofweek(t, marketTimezone)
    dayOfWeek >= dayofweek.monday and dayOfWeek <= dayofweek.friday

// Function to get the timestamp for market open and close times
getMarketTimes(t) =>
    y = year(t, marketTimezone)
    m = month(t, marketTimezone)
    d = dayofmonth(t, marketTimezone)
    marketOpenTime = timestamp(marketTimezone, y, m, d, marketOpenHour, marketOpenMinute, 0)
    marketCloseTime = timestamp(marketTimezone, y, m, d, marketCloseHour, marketCloseMinute, 0)
    [marketOpenTime, marketCloseTime]

// Get the current time in the market's timezone
currentTime = time

// Calculate market times
[marketOpenTime, marketCloseTime] = getMarketTimes(currentTime)

// Calculate entry and exit times
entryTime = marketCloseTime - entryMinutesBeforeClose * 60 * 1000
exitTime = marketOpenTime + exitMinutesAfterOpen * 60 * 1000

// Get EMA data from the specified timeframe
emaValue = request.security(syminfo.tickerid, emaTimeframe, ta.ema(close, emaLength))

// Entry condition with optional EMA filter
longCondition = close > emaValue or not useEMA

// Functions to create JSON strings
getEnterJson() =>
    '{"message_type": "bot", "bot_id": "' + long_bot_id + '", "email_token": "' + emailToken + '", "delay_seconds": 0, "pair": "' + pairString + '"}'

getExitJson() =>
    '{"action": "close_at_market_price", "message_type": "bot", "bot_id": "' + long_bot_id + '", "email_token": "' + emailToken + '", "delay_seconds": 0, "pair": "' + pairString + '"}'

// Entry Signal
entrySignal = isTradingDay(currentTime) and currentTime >= entryTime and currentTime < marketCloseTime and dayofweek(currentTime, marketTimezone) != dayofweek.friday

// Exit Signal
exitSignal = isTradingDay(currentTime) and currentTime >= exitTime and currentTime < marketCloseTime

// Entry Logic
if strategy.position_size == 0 and longCondition
    strategy.entry("Long", strategy.long, alert_message=getEnterJson())

// Exit Logic
if  strategy.position_size > 0
    strategy.close("Long", alert_message=getExitJson())

// Force Close Logic on Friday before market close
isFriday = dayofweek(currentTime, marketTimezone) == dayofweek.friday
if  strategy.position_size > 0  // Close 5 minutes before market close on Friday
    strategy.close("Long", comment="Force close on Friday before market close", alert_message=getExitJson())

// Plotting entry and exit points
plotshape( strategy.position_size == 0 and longCondition, title="Entry", text="Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape( strategy.position_size > 0, title="Exit", text="Exit", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Plot EMA for reference
plot(useEMA ? emaValue : na, title="EMA", color=color.blue)