Chiến lược đếm nến trung bình động theo xu hướng


Ngày tạo: 2023-09-16 19:04:02 sửa đổi lần cuối: 2023-09-16 19:04:02
sao chép: 0 Số nhấp chuột: 880
1
tập trung vào
1617
Người theo dõi

Tổng quan

Bài viết này sẽ giới thiệu một chiến lược theo dõi xu hướng dựa trên tính K-line. Chiến lược này được sử dụng để đánh giá xu hướng của thị trường bằng cách tính toán hướng của K-line và tham gia vào thị trường sau đường K-line gốc cố định.

Nguyên tắc chiến lược

Chiến lược này dựa trên các nguyên tắc sau:

  1. Tính hướng của đường K, phán đoán tình trạng Bias. Khi N gốc liên tục cùng hướng với đường K, phán đoán xu hướng được hình thành.

  2. Trong xu hướng tăng, làm nhiều khi xuất hiện N dòng âm liên tục; trong xu hướng giảm, làm trống khi xuất hiện N dòng dương liên tục.

  3. Giá trị nhỏ hơn của N có thể giúp chiến lược nắm bắt xu hướng nhanh hơn; nhưng giá trị nhỏ hơn của N cũng dễ bị đánh lừa bởi thị trường chấn động.

  4. Có thể thiết lập điểm dừng cố định để khóa lợi nhuận và kiểm soát rủi ro.

  5. Khi đường K đảo ngược xuất hiện, vị thế thanh toán sẽ dừng lại.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng K-line thống kê để đánh giá xu hướng, đơn giản, trực tiếp, dễ vận hành.

  2. Có thể bắt được các xu hướng trong một thời gian ngắn.

  3. Các điểm dừng cố định có thể kiểm soát rủi ro hiệu quả.

  4. Các tham số K-line có thể được điều chỉnh và áp dụng cho các môi trường thị trường khác nhau.

  5. Các chiến lược của họ rất đơn giản, rõ ràng, dễ sửa đổi và tối ưu hóa.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro:

  1. Trong trường hợp chấn động, K-line count có thể phát ra tín hiệu sai.

  2. Các điểm dừng cố định có thể quá cứng và không thể thu được lợi nhuận đầy đủ.

  3. Việc đánh giá không đúng về tín hiệu đảo ngược có thể dẫn đến ngừng hoạt động sớm.

  4. Cần điều chỉnh các tham số phù hợp và kiểm soát quy mô vị trí.

  5. Các nhà giao dịch cần cẩn thận đánh giá tính hợp lý của các tham số đếm.

Tóm tắt

Chiến lược này kết hợp các khái niệm về thống kê K-line và theo dõi xu hướng. Nếu các tham số được thiết lập hợp lý, có thể có hiệu quả tốt. Tuy nhiên, nhà giao dịch vẫn cần thận trọng đánh giá môi trường thị trường và điều chỉnh các tham số thích hợp để có được lợi nhuận lâu dài.

Mã nguồn chiến lược
/*backtest
start: 2023-08-16 00:00:00
end: 2023-09-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

StrategyName = "BEST Candle Meter Strategy"
ShortStrategyName = "BEST Candle Meter Strategy"

// strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true, 
//  pyramiding=0, default_qty_value=100, precision=7, currency=currency.USD,
//  commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=10000)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// INPUTS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// TD Sequential approach would be setting bar_counter == 9
bar_counter = input(5, "Bar Counter",minval=1, step=1)

// if based on same candle
GreenCandle = close > open
RedCandle = close < open

// if based on previous candle open
GreenPrevCandle = close > open[1]
RedPrevCandle = close < open[1]

// conditons
barUP = GreenCandle
barDN = RedCandle

///////////////////////////////////////////////////////////////////////////////
////////////////////////////// COUNTERS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
var barsFromUp = 0
var barsFromDn = 0
barsFromUp := barUP ? barsFromUp + 1 : 0
barsFromDn := barDN ? barsFromDn + 1 : 0

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// PLOTS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

plot_color = barsFromUp > 0 ? color.lime : color.red
//plot(barsFromUp, title="UP Histogram", color=plot_color, style=plot.style_histogram, linewidth=4)
//plot(barsFromDn, title="DN Histogram", color=plot_color, style=plot.style_histogram, linewidth=4)

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// HLINE ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

//hline(9, '9 TD Sequential Line', linestyle=hline.style_solid, linewidth=2, color=color.black)
//hline(13, '12 TD Sequential Line', linestyle=hline.style_solid, linewidth=3, color=color.purple)

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////// PLOTCHAR //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// var _lbl_UP = label(na)
// if barsFromUp > 0
//     _lbl_UP := label.new(bar_index, close, tostring(barsFromUp, '#'), textcolor=color.green, style=label.style_none, yloc=yloc.price, xloc=xloc.bar_index, size=size.normal)

// var _lbl_DN = label(na)
// if barsFromDn > 0
//     _lbl_DN := label.new(bar_index, close, tostring(barsFromDn, '#'), textcolor=color.red, style=label.style_none, yloc=yloc.price, xloc=xloc.bar_index, size=size.normal)


//plotshape(barsFromUp > 0, "", shape.arrowup,      location.abovebar, color.green,     text="A")

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////// ALERTS ////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

// alertcondition(barsFromUp == 9, title='🔔Sell 9 Alert🔔', message="Sell 9 Alert")
// alertcondition(barsFromDn == 9, title='🔔Buy 9 Alert🔔', message='Buy 9 Alert')
// alertcondition(barsFromUp > 9, title='🔔Sell > 9 Alert🔔', message="Sell > 9 Alert")
// alertcondition(barsFromDn > 9, title='🔔Buy > 9 Alert🔔', message='Buy > 9 Alert')

///////////////////////////////////////////////
//* Backtesting Period Selector | Component *//
///////////////////////////////////////////////


StartYear = input(2017, "Backtest Start Year",minval=1980)
StartMonth = input(1, "Backtest Start Month",minval=1,maxval=12)
StartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(StartYear,StartMonth,StartDay,0,0)

StopYear = input(2020, "Backtest Stop Year",minval=1980)
StopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
StopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(StopYear,StopMonth,StopDay,0,0)

testPeriod() => true

isLong  = barsFromUp == bar_counter
isShort = barsFromDn == bar_counter

long_entry_price    = valuewhen(isLong, close, 0)
short_entry_price   = valuewhen(isShort, close, 0)

sinceNUP = barssince(isLong)
sinceNDN = barssince(isShort)

buy_trend   = sinceNDN > sinceNUP
sell_trend  = sinceNDN < sinceNUP

//////////////////////////
//* Profit Component *//
//////////////////////////

//////////////////////////// MinTick ///////////////////////////
fx_pips_value = syminfo.type == "forex" ? syminfo.mintick*10 : 1

input_tp_pips = input(60, "Backtest Profit Goal (in USD)",minval=0)*fx_pips_value
input_sl_pips = input(30, "Backtest STOP Goal (in USD)",minval=0)*fx_pips_value

tp = buy_trend? long_entry_price + input_tp_pips : short_entry_price - input_tp_pips
sl = buy_trend? long_entry_price - input_sl_pips : short_entry_price + input_sl_pips

plot_tp = buy_trend and high[1] <= tp ? tp : sell_trend and low[1] <= tp ? tp : na
plot_sl = buy_trend and low[1] >= sl ? sl : sell_trend and high[1] >= sl ? sl : na

plot(plot_tp, title="TP", style=plot.style_circles, linewidth=3, color=color.blue)
plot(plot_sl, title="SL", style=plot.style_circles, linewidth=3, color=color.red)

longClose   = isShort
shortClose  = isLong

if testPeriod()
    strategy.entry("Long", 1, when=isLong)
    strategy.close("Long", when=longClose )
    strategy.exit("XL","Long", limit=tp,  when=buy_trend, stop=sl)

if testPeriod()
    strategy.entry("Short", 0,  when=isShort)
    strategy.close("Short", when=shortClose )
    strategy.exit("XS","Short", when=sell_trend, limit=tp, stop=sl)