進場
input: Price(close), LengthHigh(60), LengthMA(60), BiasThreshold(15), VolumeThreshold(500);
setinputname(1, "比較價別");
setinputname(2, "60日高點期數");
setinputname(3, "季線均線期數");
setinputname(4, "季線乖離率閾值");
setinputname(5, "五日均量閾值");
settotalbar(3);
setbarback(LengthHigh);
// 定義變數
var: HighPoint(0), MA60(0), PriceGap(0), AvgVolume(0);
// 計算60天內的高點
HighPoint = highest(high, LengthHigh);
// 計算季線(60天均線)
MA60 = average(close, LengthMA);
// 計算乖離率
PriceGap = (Price - MA60) / MA60 * 100;
// 計算五日平均成交量
AvgVolume = average(volume, 5);
// 濾網條件1: 乖離率不能超過15%
condition1 = absvalue(PriceGap) <= BiasThreshold;
// 濾網條件2: 五日均量大於500張
condition2 = AvgVolume > VolumeThreshold;
// 警示條件: 當價格突破60天高點,並且兩個濾網條件都滿足時,觸發警示
if Price > HighPoint and condition1 and condition2 then
ret = 1;
出場
input: LengthHigh(60), ATRLength(14), ATRMultiplier(2), MA20Length(20);
setinputname(1, "60日高點計算期數");
setinputname(2, "ATR計算期數");
setinputname(3, "ATR倍數");
setinputname(4, "20日均線期數");
settotalbar(3);
setbarback(maxlist(LengthHigh, ATRLength, MA20Length));
// 定義變數
var: HighPoint(0), ATRValue(0), ATRThreshold(0), MA20(0);
// 計算60天內的高點
HighPoint = highest(close, LengthHigh);
// 計算ATR
ATRValue = Average(TrueRange, ATRLength);
ATRThreshold = HighPoint - ATRMultiplier * ATRValue; // 計算出場價位(60天高點減去2個ATR)
// 計算20日均線
MA20 = Average(close, MA20Length);
// 出場條件1: 當價格跌破60天高點減去2個ATR時,觸發警示
if close < ATRThreshold then
ret = 1;
// 出場條件2: 如果價格在上漲,當價格跌破20日均線時,觸發警示
if close > HighPoint and close < MA20 then
ret = 1;
4 評論