Chiến lược giao dịch điểm trung tâm trong ngày

Tác giả:ChaoZhang, Ngày: 2023-12-07 16:43:17
Tags:

img

Tổng quan

Đây là một chiến lược giao dịch trong ngày cho thị trường Ấn Độ tập trung vào các mức hỗ trợ và kháng cự chính được tính toán từ giá mở, cao, thấp và đóng của ngày giao dịch trước.

Chiến lược logic

  1. Tính toán giá cao, giá thấp và giá đóng ngày trước
  2. Tính toán mức hỗ trợ chính S1, mức kháng cự R1 và điểm pivot PP bằng công thức
  3. Thực hiện giao dịch dài hoặc ngắn khi giá vượt qua các mức này
  4. Sử dụng các lối ra dừng lỗ

Công thức điểm chính:

PP = (High + Low + Close) /3
R1 = 2*PP - Low
S1 = 2*PP - High 

Phân tích lợi thế

  1. Các điểm chính cung cấp cơ hội thoát có khả năng cao dẫn đến tiềm năng lợi nhuận lớn hơn
  2. Dễ dàng xác định các điểm chính, các quy tắc giao dịch rõ ràng
  3. Dễ dàng thiết lập stop loss, kiểm soát rủi ro hiệu quả

Phân tích rủi ro

  1. Các điểm chính có thể gây ra lỗ
  2. Tính hợp lệ của các điểm chính cần xác minh, có thể không phải lúc nào cũng hoạt động
  3. Stop loss không đúng có thể làm tăng tổn thất

Giảm rủi ro:

  1. Kết hợp với các chỉ số khác để lọc các sự đột phá sai
  2. Kiểm tra ngược trong khung thời gian dài để xác nhận chiến lược
  3. Tối ưu hóa vị trí dừng lỗ

Cơ hội cải thiện

  1. Kết hợp các chỉ số kỹ thuật khác để lọc tín hiệu sai
  2. Điều chỉnh tham số cho các sản phẩm khác nhau
  3. Điều chỉnh stop loss động

Kết luận

Nhìn chung, đây là một chiến lược đơn giản và thẳng thắn có thể dễ dàng được xác nhận với dữ liệu lịch sử. Là một chiến lược trong ngày, nó cung cấp cơ hội đột phá có xác suất cao ở các mức chính dẫn đến hiệu suất tốt. Nhưng có một số rủi ro đột phá sai dựa trên các điểm pivot cần tối ưu hóa hơn nữa. Tóm lại, đây là một chiến lược giao dịch rủi ro trong ngày dễ dàng thực hiện, có thể kiểm soát được.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
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/
// © arameshraju
//Reference credit goes to All


//@version=4
strategy("ARR-Pivote-India-Stategy",shorttitle="ARR-PP-Ind", overlay=true)

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © arameshraju
//User Input
showPrevDayHighLow = input(false, title="Show previous day's High & Low(PDH/PDL)", type=input.bool)
showPivoteLine = input(true, title="Show Pivot Point(PP)", type=input.bool)
showPivoteR1Line = input(false, title="Show Pivot Point Resistance (R1)", type=input.bool)
showPivoteS1Line = input(false, title="Show Pivot Point Support (S1)", type=input.bool)
tradeLong = input(true, title="Trade on Long Entry", type=input.bool)
tradeShort = input(false, title="Trade on Short Entry", type=input.bool)
maxLoss = input(0.5, title="Max Loss on one Trade", type=input.float)
tradeOn=input(title="Trade base Level", type=input.string,
     options=["PP", "PDH", "PDL","R1","S1"], defval="PP")

sessSpec = input("0915-1530", title="Session time", type=input.session)

// Defaults
// Colors
cColor = color.black
rColor = color.red
sColor = color.green

// Line style & Transparency
lStyle = plot.style_line
lTransp = 35

// Get High & Low
getSeries(_e, _timeFrame) => security(syminfo.tickerid, _timeFrame, _e, lookahead=barmerge.lookahead_on) 

is_newbar(res, sess) =>
    t = time(res, sess)
    na(t[1]) and not na(t) or t[1] < t

newbar = is_newbar("375", sessSpec)
// Today's Session Start timestamp
y = year(timenow)
m = month(timenow)
d = dayofmonth(timenow)

// Start & End time for Today
start = timestamp(y, m, d, 09, 15)
end = start + 86400000


PrevDayHigh = getSeries(high[1], 'D')
PrevDayLow = getSeries(low[1], 'D')
PrevDayClose = getSeries(close[1], 'D')

PivoteLine=(PrevDayHigh+PrevDayLow+PrevDayClose) /3
PivoteR1=(PivoteLine*2) -PrevDayLow

PivoteS1=(PivoteLine*2) -PrevDayHigh

orbPrevDayOpen = getSeries(open[1], 'D')
orbPrevDayClose = getSeries(close[1], 'D')

// //Preview Day High line
// _pdh = line.new(start, PrevDayHigh, end, PrevDayHigh, xloc.bar_time, color=color.red, style=line.style_solid, width=2)
// line.delete(_pdh[1])
// _pdl = line.new(start, PrevDayLow, end, PrevDayLow, xloc.bar_time, color=color.green, style=line.style_solid, width=2)
// line.delete(_pdl[1])
// _Pp = line.new(start, PrevDayLow, end, PrevDayLow, xloc.bar_time, color=color.green, style=line.style_dashed, width=2)
// line.delete(_Pp[1])


// //Previous Day Low Line
// l_pdh = label.new(start, PrevDayHigh, text="PD", xloc=xloc.bar_time, textcolor=rColor, style=label.style_none)
// label.delete(l_pdh[1])
// l_pdl = label.new(start, PrevDayLow, text="PD", xloc=xloc.bar_time, textcolor=sColor, style=label.style_none)
// label.delete(l_pdl[1])

// //Pivote Line

// l_pp = label.new(start, PivoteLine, text="PP", xloc=xloc.bar_time, textcolor=color.black, style=label.style_none)
// label.delete(l_pp[1])
// l_R1 = label.new(start, PivoteR1, text="R1", xloc=xloc.bar_time, textcolor=color.fuchsia, style=label.style_none)
// label.delete(l_pp[1])
// l_SR = label.new(start, PivoteS1, text="S2", xloc=xloc.bar_time, textcolor=color.navy, style=label.style_none)
// label.delete(l_pp[1])


plot(showPrevDayHighLow?PrevDayHigh:na , title=' PDH', color=rColor)
plot(showPrevDayHighLow?PrevDayLow:na, title=' PDL', color=sColor)
plot(showPivoteLine?PivoteLine:na, title=' PP', color=color.black)
plot(showPivoteR1Line?PivoteR1:na, title=' R1', color=color.fuchsia)
plot(showPivoteS1Line?PivoteS1:na, title=' S1', color=color.navy)

// Today's Session Start timestamp
// Start & End time for Today
//endTime = timestamp(t, m, d, 15, 00)

tradeEventPrice= if string("PDH")==tradeOn 
    PrevDayHigh
else if string("PDL")==tradeOn
    PrevDayLow
else if string("R1")==tradeOn
    PivoteR1
else if string("S1")==tradeOn
    PivoteS1
else
    PivoteLine


//tradeEventPrice=PrevDayHigh

if (open < tradeEventPrice) and ( close >tradeEventPrice ) and ( hour < 13 ) and tradeLong
	strategy.entry("buy", strategy.long, 1, when=strategy.position_size <= 0)

if (open > tradeEventPrice) and ( close <tradeEventPrice ) and ( hour < 13 ) and  tradeShort
	strategy.entry("Sell", strategy.short, 1, when=strategy.position_size <= 0)

mxloss=orbPrevDayClose*maxLoss

strategy.exit("exit", "buy",  loss = mxloss) 
strategy.exit("exit", "Sell",  loss = mxloss) 


strategy.close_all(when =   hour == 15   , comment = "close all entries")



Thêm nữa