# My語言如何實現均幅指標策略框架
## 一、均幅指標(ATR)基礎概念
### 1.1 什么是ATR指標
平均真實波幅(Average True Range, ATR)由J.Welles Wilder開發,主要用于衡量市場波動性。其核心計算公式為:
TR = MAX(High - Low, ABS(High - Close[1]), ABS(Low - Close[1])) ATR = MA(TR, N)
### 1.2 ATR的典型應用場景
- 波動性評估
- 止損止盈設置
- 倉位管理
- 趨勢過濾
## 二、My語言環境準備
### 2.1 開發環境配置
```my
// 檢查My語言版本
?VERSION
// 加載必要庫
#LOAD "QUANT.LIB"
#INCLUDE "CHART.INC"
// 獲取K線數據
DATA = GET_KLINE("BTCUSDT", "1d", 1000)
// 數據預處理
CLEAN_DATA(DATA)
FUNCTION CALC_ATR(period)
TR_ARRAY = ARRAY()
FOR i = 1 TO LEN(DATA)-1
TR = MAX(
DATA.HIGH[i] - DATA.LOW[i],
ABS(DATA.HIGH[i] - DATA.CLOSE[i-1]),
ABS(DATA.LOW[i] - DATA.CLOSE[i-1])
)
PUSH(TR_ARRAY, TR)
ENDFOR
ATR = SMA(TR_ARRAY, period)
RETURN ATR
END
// 向量化計算提升效率
FUNCTION FAST_ATR(period)
TR = MAX(
DATA.HIGH - DATA.LOW,
ABS(DATA.HIGH - SHIFT(DATA.CLOSE,1)),
ABS(DATA.LOW - SHIFT(DATA.CLOSE,1))
)
RETURN WMA(TR, period) // 使用加權移動平均
END
STRATEGY ATR_STRATEGY
// 參數設置
PARAM
ATR_PERIOD: 14,
MULTIPLIER: 2.0,
RISK_RATIO: 0.01
END
// 指標計算
atr = FAST_ATR(ATR_PERIOD)
// 交易邏輯
ON BAR
IF CROSS(CLOSE, UPPER_BAND)
ENTRY_LONG(STOP, CLOSE + atr[-1]*MULTIPLIER)
SET_STOPLOSS(atr[-1]*MULTIPLIER)
ENDIF
IF POSITION_SIZE > 0 AND CLOSE < ENTRY_PRICE - atr[-1]*MULTIPLIER
EXIT_ALL()
ENDIF
END
END
MODULE POSITION_MANAGER
// 根據ATR調整倉位
FUNCTION CALC_LOT_SIZE(account_balance, atr_value)
risk_amount = account_balance * RISK_RATIO
point_value = TICK_SIZE * CONTRACT_SIZE
RETURN FLOOR(risk_amount / (atr_value * point_value))
END
END
OPTIMIZE
PARAM_RANGE
ATR_PERIOD: 10 TO 20 STEP 2,
MULTIPLIER: 1.5 TO 3.0 STEP 0.5
END
CRITERIA: MAX(SharpeRatio)
END
// 混合周期ATR信號
daily_atr = FAST_ATR(14, "1d")
hourly_atr = FAST_ATR(14, "4h")
ENTRY_CONDITION = daily_atr > SMA(daily_atr,20) AND
hourly_atr[-1] < hourly_atr[-2]
STRATEGY ATR_TrendFollowing
PARAM
lookback: 50,
atr_period: 14,
exit_multiplier: 1.5
END
// 計算指標
ma = SMA(CLOSE, lookback)
atr = FAST_ATR(atr_period)
// 交易邏輯
ON BAR
IF CLOSE > ma AND CLOSE[-1] <= ma[-1]
lots = POSITION_MANAGER.CALC_LOT_SIZE(BALANCE, atr[-1])
ENTRY_LONG(MARKET, lots)
SET_TRLING_STOP(atr[-1] * exit_multiplier)
ENDIF
END
END
STRATEGY ATR_Breakout
PARAM
atr_length: 20,
breakout_multiplier: 1.2
END
atr = FAST_ATR(atr_length)
upper_band = HIGH + atr * breakout_multiplier
ON BAR
IF CLOSE > upper_band[-1] AND VOLUME > SMA(VOLUME,10)[-1]
ENTRY_LONG(MARKET)
SET_PROFIT_TARGET(atr[-1] * 3)
ENDIF
END
END
BACKTEST
RANGE: 2020-01-01 TO 2023-12-31
COMMISSION: 0.0005
SLIPPAGE: 0.001
INITIAL_CAPITAL: 10000
END
PERFORMANCE_REPORT
METRICS:
AnnualReturn,
MaxDrawdown,
WinRate,
ProfitFactor,
SharpeRatio
END
提示:My語言中
SHIFT()函數用于獲取前n期數據,與Python中的shift()功能類似。實際使用時需注意數據邊界處理。
通過本框架,開發者可以快速構建基于ATR指標的各類策略。建議先進行參數敏感性分析,再結合其他指標構建復合策略。 “`
(注:實際字數約1500字,可根據需要調整部分章節的詳細程度來控制字數)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。