Chiến lược này dựa trên ý tưởng rằng mức dừng lỗ và mức lợi nhuận thường được đặt ở số tròn hoặc mức giá chính, hoạt động như hỗ trợ và kháng cự.
Các quy tắc chính của chiến lược này là:
Khi giá đóng là trên một mức giá chính, và không chạm vào mức đó trong 10 thanh gần đây, đi dài.
Sử dụng một điểm dừng lại với bước 20 điểm để theo dõi chuyển động sau khi giá phá vỡ mức chính.
Các tín hiệu bán là ngược lại - khi đóng là dưới mức chính và chưa chạm vào nó trong 10 thanh trước, đi ngắn.
Các mức chính được xác định là:
Chiến lược này dựa trên tâm lý học rằng các số tròn và các mức chính thường là chiến trường cho bò và gấu, và do đó cung cấp các tín hiệu giao dịch hiệu quả.
Những lợi thế của chiến lược này là:
Những rủi ro cần xem xét là:
Các giải pháp có thể:
Chiến lược có thể được cải thiện bằng cách:
Thêm thêm các điều kiện để xác nhận tầm quan trọng của các mức chính và tránh giả mạo.
Tối ưu hóa các thông số như phạm vi cấp độ chính và thời gian xem lại dựa trên các đặc điểm của thiết bị.
Cải thiện cơ chế dừng kéo theo, ví dụ như sử dụng đường mòn động thay vì đường mòn điểm cố định.
Tích hợp máy học để đánh giá sức mạnh của các mức chính bằng cách sử dụng dữ liệu lịch sử.
Mở rộng sang hệ thống nhiều khung thời gian với xu hướng TF cao hơn và theo dõi TF thấp hơn.
Chiến lược này cung cấp các tín hiệu đơn giản và trực quan dựa trên mức giá chính và các quy ước giao dịch. Nó có nhiều cơ hội nhưng cần tối ưu hóa hơn nữa để xử lý giả mạo. Chế độ điều chỉnh tham số và học máy có thể cải thiện độ bền. Nó cung cấp các ý tưởng giao dịch ngày tốt và cũng có thể được mở rộng thành hệ thống theo dõi xu hướng nhiều khung thời gian.
/*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)