Chiến lược đột phá động lượng dài-ngắn dựa trên điểm dừng tăng nội bộ


Ngày tạo: 2023-11-23 14:14:58 sửa đổi lần cuối: 2023-11-23 14:14:58
sao chép: 0 Số nhấp chuột: 675
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá động lượng dài-ngắn dựa trên điểm dừng tăng nội bộ

Tổng quan

Chiến lược này đánh giá thị trường hiện tại bằng cách xác định đường K tăng bất thường và xem liệu có một hành động đơn phương bất ngờ hay không. Khi xác định đường K tăng bất thường, nó sẽ đặt lệnh mua và bán gần điểm cao của đường K và đồng thời đặt lệnh dừng gần điểm thấp của đường K trước đó, tạo thành một đường dài kiểm soát rủi ro đòn bẩy cao. Chiến lược sẽ giám sát đường dừng lỗ trong thời gian thực và ngay lập tức rút lại lỗ đơn nếu giá phá vỡ đường dừng lỗ xuống.

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

Chiến lược này chủ yếu đánh giá sự hình thành của đường K tăng bất thường khi xuất hiện close>open và highlow[Khi K-line, cho rằng có hiện tại chu kỳ bất thường tăng giá. Tại thời điểm này sẽ được thiết lập dài một tín hiệu vào, giá vào là giá cao nhất của K-line hiện tại. Đồng thời thiết lập giá dừng là giá thấp nhất của một K-line trên, hình thành mô hình kiểm soát rủi ro cao.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là có thể nắm bắt các trường hợp bất thường bất thường của thị trường, để thực hiện giao dịch siêu cao. Đồng thời, bằng cách thiết lập mức dừng lớn hơn, bạn có thể sử dụng giao dịch kiểm soát rủi ro bằng cách sử dụng đòn bẩy cao, do đó có thể thu được lợi nhuận lớn hơn. Ngoài ra, chiến lược này thực hiện tự động giám sát đường dừng, có thể dừng nhanh chóng và kiểm soát rủi ro giao dịch hiệu quả khi giá phá vỡ đường dừng xuống.

Phân tích rủi ro

Rủi ro chính của chiến lược này là phán đoán tăng bất thường không chính xác, không thể nắm bắt hiệu quả các biến động bất ngờ trong thị trường, dẫn đến khả năng đánh giá sai tín hiệu giao dịch. Ngoài ra, thiết lập vị trí dừng lỗ cũng có ảnh hưởng lớn đến rủi ro giao dịch và lợi nhuận. Nếu dừng lỗ quá nới lỏng, rủi ro mất mát giao dịch sẽ tăng lên, và nếu dừng lỗ quá hẹp, có thể không thể theo dõi lợi nhuận một cách hiệu quả.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tiêu chuẩn phán đoán tăng bất thường có thể giới thiệu thêm các chỉ số hoặc mô hình học sâu hỗ trợ phán đoán, nâng cao độ chính xác của phán đoán tín hiệu giao dịch chiến lược.

  2. Cài đặt vị trí dừng lỗ cho phép thực hiện nhiều phân tích thống kê và tối ưu hóa để tìm vị trí dừng lỗ tốt hơn để cân bằng mức độ rủi ro và lợi nhuận của giao dịch.

  3. Có thể giới thiệu nhiều cơ chế kiểm soát giao dịch tần số cao hơn, chẳng hạn như lọc khối lượng giao dịch, xác minh đột phá theo khoảng thời gian, để tránh khả năng bị giam giữ.

  4. Các tiêu chuẩn nhập cảnh chiến lược có thể được điều chỉnh, không nhất thiết phải giới hạn trong đường K tăng bất thường, có thể kết hợp với nhiều chỉ số và mô hình để xác định, tạo ra cơ chế xác minh đa dạng.

Tóm tắt

Chiến lược tổng thể là một chiến lược giao dịch tần số cao điển hình, thuộc loại chiến lược phá vỡ đường ngắn. Nó thực hiện giao dịch tần số siêu cao bằng cách nắm bắt biến động bất thường đột ngột của thị trường. Đồng thời sử dụng kiểm soát rủi ro và cơ chế đòn bẩy cao để kiểm soát rủi ro.

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

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
// I needed to test/verify the functionality for canceling an open limit order in a strategy and also work thru the pieces needed to set the position sizing so each loss is a set amount. 
// This is not meant to be dropped into a chart but rather gives the code/logic in order to use in your own script w/alerts or strategy. Hope it helps. 
 
//@version=4
strategy("Strategy Test - Cancel Limit Order and Position Sizing", overlay=true, precision=4)
 
/////////////////
// Backtest Period Selection
 
testStartYear = input(2020, "Backtest Start Year",minval=1980)
testStartMonth = input(2, "Backtest Start Month",minval=1,maxval=12)
testStartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
 
testStopYear = input(2020, "Backtest Stop Year",minval=1980)
testStopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
 
testPeriod() => time >= true
 
//////////////
// Inside Bar
bull_inside_bar = close>open and high<high[1] and low>low[1]

// Set Levels
bull_inside_bar_sl = valuewhen(bull_inside_bar, low[1], 0) - (1*syminfo.mintick)
bull_breakout_price = valuewhen(bull_inside_bar, high, 0) + (1*syminfo.mintick)
entry_buy   = high
inside_bar_dist = entry_buy - bull_inside_bar_sl
inside_bar_be = entry_buy + (inside_bar_dist * 1)
inside_bar_tgt = entry_buy + (inside_bar_dist * 2)

///////////////////
// Position Sizing 
//////////////////
// For each trade setup that fires in this scenario we want to set our total loss amount in USD, so every trade that loses is lets say $1 and the 2:1 target would be $2 in this example. 
// The math logic for this take the risk amount and divide by the stop percentage, take that number and divide by leverage amount chosen. Stop percentage is a variable below if questions on that. 
//
// Taken from @JoshuaMorris (shout out to the UK peeps) position sizing google doc so thank you sir. 
// Would be used if risking based on percentage of a portfolio. Leaving code snippets here in case that's the direction someone wants to go. 
// xbt_price = security("BITMEX:XBTUSD", "D", close)
// account_size_xbt = input(1, "Account Size (XBT)", type=input.float)
// account_size_usd = (account_size_xbt * xbt_price)
// percentage_risk = input(0.01, "Personal Risk Percent - Default is 1%", type=input.float)
// personal_risk = (account_size_usd * percentage_risk)
// position_size_usd = (personal_risk) / risk_percent
// leverage_req = position_size_usd / account_size_usd

// Will want to hard code leverage as 1x, 5x, 10x etc and dont need it to automagically be set as is above. If you're doing 100x you are gnarly haha. 
leverage_amount = input(title="Leverage Amount Desired", type=input.integer, defval=10, options=[1, 2, 3, 5, 10, 25, 50, 100])
risk_amount = input(title="Risk Total Per Trade in USD", type=input.integer, defval=1, minval=1, step=1)

// Reminder this is for Longs. Math needs to be changed a bit for Shorts. This is the information using the long/short tool would give us if doing manually. 
stop_percent = inside_bar_dist / (entry_buy)
pos_size_no_lev = risk_amount / stop_percent
pos_size_with_lev = pos_size_no_lev / leverage_amount 

//////////////
// Strategy Section

if testPeriod()
    strategy.entry(id="Long", long=true, qty=1, limit=9320.00, when=bull_inside_bar)
    strategy.cancel(id="Long", when = low < 9310)
// as a test swap the price to be above the limit or below to see the cancel in play.
 
//////////////
// Plot Section
plotchar(bull_inside_bar, title="bull_inside_bar", char="🐂", location=location.belowbar, offset=-0, color=color.green, transp=25)
plot(bull_inside_bar_sl, title="bull_inside_bar_sl", transp=100)
plot(entry_buy, title="entry_buy", transp=100)
plot(inside_bar_dist, title="inside_bar_dist", transp=100)
plot(stop_percent, title="stop_percent", transp=100)
plot(pos_size_no_lev, title="pos_size_no_lev", transp=100)
plot(pos_size_with_lev, title="pos_size_with_lev", transp=100)

// Hidden Plots // For Data Window Eyes Only // 
// plot(longCondition==true?1:0, title="Long Condition", transp=100)
// plot(xbt_price, title="XBT Price", transp=100)
// plot(account_size_usd, title="Account Size USD", transp=100)
// plot(risk_percent, title="risk_percent", transp=100)
// plot(position_size_usd, title="position_size_usd", transp=100)
// plot(leverage_req, title="leverage_req", transp=100)

// END //