Strategi kedudukan semalaman arah aliran panjang dan pendek merentas pasaran berdasarkan penunjuk EMA

EMA MA
Tarikh penciptaan: 2024-11-12 10:49:00 Akhirnya diubah suai: 2024-11-12 10:49:00
Salin: 2 Bilangan klik: 483
1
fokus pada
1617
Pengikut

Strategi kedudukan semalaman arah aliran panjang dan pendek merentas pasaran berdasarkan penunjuk EMA

Strategi ini adalah strategi pegangan malam lintas pasaran berdasarkan petunjuk teknikal EMA yang bertujuan untuk menangkap peluang perdagangan sebelum dan selepas penutupan pasaran. Strategi ini membolehkan perdagangan pintar dalam keadaan pasaran yang berbeza melalui kawalan masa yang tepat dan penapisan petunjuk teknikal.

Gambaran Keseluruhan Strategi

Strategi ini kebanyakannya mendapat keuntungan dengan memasuki waktu tertentu sebelum penutupan pasaran dan keluar dari waktu tertentu selepas pembukaan pasaran pada hari berikutnya. Dengan menggunakan indikator EMA sebagai pengesahan trend, mencari peluang perdagangan di beberapa pasaran global. Strategi ini juga mengintegrasikan fungsi perdagangan automatik, yang membolehkan operasi tanpa pengawal.

Prinsip Strategi

  1. Kawalan masa: mengikut masa dagangan di pasaran yang berbeza, masa masuk tetap sebelum penutupan, masa keluar tetap selepas pembukaan
  2. Penapisan EMA: Sinyal masuk disahkan menggunakan penunjuk EMA pilihan
  3. Pilihan Pasaran: Membantu masa dagangan untuk tiga pasaran utama AS, Asia, dan Eropah
  4. Perlindungan hujung minggu: Memaksa penutupan sebelum penutupan Jumaat untuk mengelakkan risiko hujung minggu

Kelebihan Strategik

  1. Kebolehan beradaptasi di pelbagai pasaran: dapat menyesuaikan masa dagangan secara fleksibel mengikut ciri-ciri pasaran yang berbeza
  2. Pengendalian risiko yang sempurna: termasuk mekanisme perlindungan hujung minggu
  3. Tingkat automasi yang tinggi: Sokongan pautan antara muka perdagangan automatik
  4. Fleksibiliti parameter: masa perdagangan dan parameter penunjuk teknikal boleh disesuaikan
  5. Pertimbangan kos urus niaga: termasuk yuran dan seting slippoint

Risiko Strategik

  1. Risiko turun naik pasaran: Pemilikan semalam mungkin berisiko jatuh
  2. Ketergantungan masa: Kesan strategi dipengaruhi oleh pilihan masa pasaran
  3. Kekurangan dalam penunjuk teknikal: satu penunjuk EMA mungkin terlewat Cadangan: Tetapkan had hentian kerugian, tambah pengesahan petunjuk teknikal

Arah pengoptimuman strategi

  1. Menambah lebih banyak portfolio penunjuk teknikal
  2. Memperkenalkan mekanisme penapisan kadar turun naik
  3. Optimumkan pilihan masa masuk dan keluar
  4. Menambah fungsi penyesuaian parameter
  5. Modul kawalan risiko yang dipertingkatkan

ringkaskan

Strategi ini mewujudkan sistem perdagangan bermalam yang dipercayai melalui kawalan masa yang tepat dan penapisan petunjuk teknikal. Reka bentuk strategi mempertimbangkan sepenuhnya keperluan pertempuran sebenar, termasuk faktor-faktor seperti penyesuaian pelbagai pasaran, kawalan risiko, dan perdagangan automatik, dengan nilai praktikal yang kuat. Dengan pengoptimuman dan penyempurnaan berterusan, strategi ini dijangka memperoleh keuntungan yang stabil dalam perdagangan dalam talian.

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