Chiến lược tối ưu hóa trung bình chuyển động

Tác giả:ChaoZhang, Ngày: 2023-09-14 16:52:30
Tags:

Chiến lược logic

Chiến lược này tối ưu hóa các điểm đầu vào sau các tín hiệu từ hệ thống trung bình động cơ bản.

Lý lẽ chính là:

  1. Tính toán trung bình động trong một khoảng thời gian (ví dụ: 20 ngày)

  2. Crossover tạo ra tín hiệu dài / ngắn

  3. Sau khi tín hiệu, không nhập ngay lập tức nhưng chờ cho mức tốt hơn

  4. Nếu mức tốt hơn xảy ra trong những ngày được chỉ định (ví dụ 3 ngày), nhập giao dịch

  5. Nếu không, nhập vào giá đóng cửa vào ngày thứ 5 để tránh bỏ lỡ

Điều này tìm cách tận dụng sự tiếp tục của xu hướng sau khi củng cố thay vì nhập tín hiệu ngay lập tức.

Ưu điểm

  • Tối ưu hóa nhập cảnh cho các mức nhập cảnh tốt hơn

  • Ngày chờ tối đa tránh hoàn toàn bỏ lỡ giao dịch

  • Quy tắc đơn giản và rõ ràng dễ thực hiện

Rủi ro

  • Thời gian chờ và ngưỡng đòi hỏi tối ưu hóa

  • Có thể bỏ lỡ một số cơ hội xu hướng ngắn hạn.

  • Cần theo dõi cả điều kiện thời gian và giá cả

Tóm lại

Chiến lược này nhằm mục đích đạt được mức nhập cảnh tốt hơn thông qua tối ưu hóa nhập cảnh đơn giản trong khi đảm bảo các xu hướng không bị bỏ lỡ.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 1h
basePeriod: 15m
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/
// © dongyun

//@version=4
strategy("等待一个更好的入场机会", overlay=true)

period = input(20,'')
maxwait = input(3,'')
threshold = input(0.01,'')

signal = 0
trend = 0.0
newtrend = 0.0
wait = 0.0
initialentry = 0.0

trend := sma(close,period)
signal := nz(signal[1])
if trend > nz(trend[1])
	signal := 1
else
	if trend < nz(trend[1])
		signal := -1

wait := nz(wait[1])
initialentry := nz(initialentry[1])

if signal != signal[1]
	if strategy.position_size > 0
		strategy.close('long',comment='trend sell')
		signal := -1
	else
		if strategy.position_size < 0
    		strategy.close('short',comment='trend buy')
    		signal := 1
	wait := 0
	initialentry := close
else
	if signal != 0 and strategy.position_size == 0
		wait := wait + 1

// test for better entry
if strategy.position_size == 0
	if wait >= maxwait
		if signal > 0
			strategy.entry('long',strategy.long, comment='maxtime Long')
		else
			if signal < 0
				strategy.entry('short',strategy.short, comment='maxtime Short')
	else
		if signal > 0 and close < initialentry - threshold
			strategy.entry('long',strategy.long, comment='delayed Long')
		else
			if signal < 0 and close > initialentry + threshold
				strategy.entry('short',strategy.short, comment='delayed short')


Thêm nữa