Chiến lược này dựa trên ý tưởng rằng các điểm dừng và dừng thường được đặt ở mức giá nguyên hoặc mức giá quan trọng, và các điểm này thường đóng vai trò như các điểm hỗ trợ và kháng cự. Bằng cách nhận diện các mức giá quan trọng này, chiến lược thực hiện mua hoặc bán khi giá gần.
Chiến lược này bao gồm các quy tắc sau:
Giao dịch mua được thực hiện khi giá đóng cửa cao hơn mức giá quan trọng và không chạm vào giá này trong 10 đường K trước.
Tiếp theo, sử dụng theo dõi leo để theo dõi sự di chuyển của giá vượt qua mức giá quan trọng.
Hoạt động bán là trái ngược với mua, khi giá đóng cửa thấp hơn mức giá quan trọng và không chạm vào giá đó trong 10 đường K trước.
Các phương pháp để xác định mức giá quan trọng là:
Chiến lược này dựa trên tư tưởng về tâm lý giá, cho rằng giá cả hoặc mức độ quan trọng thường là vị trí quan trọng mà các bên cạnh cạnh tranh, do đó có hiệu quả như một tín hiệu giao dịch. Trong khi đó, theo dõi leo thang có thể theo dõi xu hướng sau khi giá vượt qua.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có những rủi ro sau:
Giải pháp tương ứng:
Chiến lược này có thể được tối ưu hóa bằng cách:
Thêm nhiều điều kiện để đánh giá tầm quan trọng của các điểm giá quan trọng, tránh nguy cơ phá vỡ giả. Các chỉ số như kết hợp với khối lượng giao dịch.
Các tham số tối ưu hóa, đặc biệt là các tham số như bước dài trong khu vực giá quan trọng, chu kỳ đường K. Để phù hợp hơn với các đặc điểm của các giống khác nhau.
Tối ưu hóa các cơ chế tracking stop loss, ví dụ như sử dụng tracking stop loss động thay vì tracking stop loss cố định.
Thêm các thuật toán học máy sử dụng dữ liệu lịch sử để đánh giá sức mạnh của các khu vực giá quan trọng để cải thiện chất lượng tín hiệu.
Mở rộng chiến lược qua các chu kỳ thời gian, đồng thời đánh giá xu hướng trong các chu kỳ thời gian cao hơn và theo dõi trong các chu kỳ thời gian thấp hơn.
Chiến lược này dựa trên suy nghĩ đơn giản và trực quan về các điểm quan trọng của giá, sử dụng các thói quen giao dịch phổ biến để tạo ra tín hiệu giao dịch. Cơ hội chiến lược là rất nhiều, nhưng cần được tối ưu hóa hơn nữa để xử lý các trường hợp phá vỡ giả. Các phương tiện như tối ưu hóa tham số và học máy có thể tăng sự ổn định của chiến lược.
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Strategy based on the idea that stop loss and take profit are often placed at full price levels or round numbers, whcih acts as resistance and supports levels
//Buy Rules:
//Actual price (close) is above round number.
//Round number level was not touched in previous ten bars (arbitrary value).
//Place a buy and follow the order with a trail step because price can bounce at round number (support) or can go through it.
//Sell Rules are the same of buy rules but inverted.
//
//Need improvement on conditions' logic and round numbers definitions
strategy("dP magnet", overlay=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD)
//Round Levels credit to RKchartest
roundLevel50 = input(500, 'Round Level 1, pips')
//roundLevel100 = input(1000, 'Round Level 2, pips')
deviation = input(1000, 'Max distance, pips', minval=0)
rDelimeter = 1/syminfo.mintick
intRoundLevel = close[1] * rDelimeter
intRemainder = intRoundLevel % roundLevel50
toRound = (intRemainder >= roundLevel50/2) ? roundLevel50 : 0
roundLevel = (intRoundLevel - intRemainder + toRound) / rDelimeter
plot(roundLevel, title='Round Level 1', color=black, style=line, transp=0, linewidth=1, trackprice=false)
//intRemainder2 = intRoundLevel % roundLevel100
//toRound2 = (intRemainder2 >= roundLevel100/2) ? roundLevel100 : 0
//roundLevel2 = (intRoundLevel - intRemainder2 + toRound2) / rDelimeter
//plot((abs(roundLevel2 - close) * rDelimeter < deviation) ? roundLevel2 : na, title='Round Level 2', color=black, style=circles, transp=0, linewidth=1, trackprice=true)
// end
//Start of strategy
distToFullNumber=(close-roundLevel) //can be positive or negative number
distPips=input(100,'Distance in pips to full level',minval=10) //user defined: this distance defines when to open an order at market price
TrailS=input(20,'Trail Step points',minval=10) //trail step that follows the order
longCondition = iff(distToFullNumber>0 and abs(distToFullNumber)<=distPips and lowest(low,10)>roundLevel,true,false)
if (longCondition)
strategy.entry("LongMagnet", strategy.long)
strategy.exit("ExitMagnet","LongMagnet",trail_points=TrailS)
shortCondition = iff(distToFullNumber<0 and abs(distToFullNumber)<=distPips and highest(high,10)<roundLevel,true,false)
if (shortCondition)
strategy.entry("ShortMagnet", strategy.short)
strategy.exit("Exit_Magnet","ShortMagnet",trail_points=TrailS)