我有一個1分、3分誇週期的問題,有時候一開盤的時候條件是符合的,不會通知,有時候是盤中符合也不會通知,但只要我在盤中重開雷達策略,就會偵測到然後通知,想請問有哪個部分是我沒注意到導致出現這種狀況?謝謝!
我有一個1分、3分誇週期的問題,有時候一開盤的時候條件是符合的,不會通知,有時候是盤中符合也不會通知,但只要我在盤中重開雷達策略,就會偵測到然後通知,想請問有哪個部分是我沒注意到導致出現這種狀況?謝謝!
// STS 極短多
//
// 1分:
// DIF 在該根1分K「收盤時」向上
// + KD 的 K 值在該根1分K「收盤時」向上
//
// 3分:
// DIF 向上
// + KD 的 K 值向上
// → 不等3分收K,盤中當下符合即可
//
// 不限制現股當沖
// 不限制處置股
// 可用於期貨等商品
//
// 主頻率:請設定 1分鐘
input:
// 1分 MACD
FastLength1(18),
SlowLength1(32),
MACDLength1(12),
// 1分 KD
RSVLength1(90),
KLength1(3),
DLength1(3),
// 3分 MACD
FastLength3(6),
SlowLength3(11),
MACDLength3(8),
// 3分 KD
RSVLength3(9),
KLength3(3),
DLength3(3);
variable:
// 1分
dif1(0),
macd1(0),
osc1(0),
rsv1(0),
k1(0),
d1(0),
cond1DIF(false),
cond1KD(false),
cond1(false),
//
// 3分
//
dif3(0),
macd3(0),
osc3(0),
dif3_prev(0),
rsv3(0),
k3(0),
d3(0),
k3_prev(0),
cond3DIF(false),
cond3KD(false),
cond3(false);
SetTotalBar(10000);
ret = 0;
//
// 1分 MACD
//
MACD(
WeightedClose(),
FastLength1,
SlowLength1,
MACDLength1,
dif1,
macd1,
osc1
);
//
// 1分 KD
//
Stochastic(
RSVLength1,
KLength1,
DLength1,
rsv1,
k1,
d1
);
//
// 1分 DIF 收盤向上
//
// [1] = 剛收完的1分K
// [2] = 再前一根1分K
//
cond1DIF =
dif1[1] > dif1[2];
//
// 1分 KD K值收盤向上
// ============================================================
cond1KD =
k1[1] > k1[2];
// ============================================================
// 1分條件
// ============================================================
cond1 =
cond1DIF
and cond1KD;
// ============================================================
// 3分 MACD
// ============================================================
xfMin_MACD(
"3",
xfMin_WeightedClose("3"),
FastLength3,
SlowLength3,
MACDLength3,
dif3,
macd3,
osc3
);
// ============================================================
// 3分 KD
// ============================================================
xfMin_Stochastic(
"3",
RSVLength3,
KLength3,
DLength3,
rsv3,
k3,
d3
);
// ============================================================
// 真正上一根完整3分K
// ============================================================
dif3_prev =
xfMin_GetValue("3", dif3, 1);
k3_prev =
xfMin_GetValue("3", k3, 1);
// ============================================================
// 3分 DIF 向上
//
// 目前形成中的3分 DIF
// > 上一根完整3分 DIF
//
// 不等3分收盤
// ============================================================
cond3DIF =
dif3 > dif3_prev;
// ============================================================
// 3分 KD K值向上
//
// 目前形成中的3分 K
// > 上一根完整3分 K
//
// 不等3分收盤
// ============================================================
cond3KD =
k3 > k3_prev;
// ============================================================
// 3分條件
// ============================================================
cond3 =
cond3DIF
and cond3KD;
// ============================================================
// 最終觸發
// ============================================================
if cond1
and cond3
then
ret = 1;
你的變數在每次洗價時都會重新計算,所以不應該出現你說的該警示卻沒警示的情況。我猜測,這可能與你的觸發設定有關。若設定為單根K棒內觸發一次,則可能之前已觸發一次,因此系統安控就會阻擋再次觸發。盤中啟動策略卻有訊號,可能與補K有關。在補K時,交易指令不會被執行(觸發設定在此會被忽略),因此儘管之前曾經觸發,照理說不會再次觸發,但補K之後,還是會觸發訊號。你最好把策略雷達的設定也貼圖上來看看。
你用K棒內單次觸發。如前所述,這是可能造成問題的原因。另外,你用每5秒鐘自動洗價一次。這也可能造成問題,因為每根K棒收K時,系統會自動再洗價一次,而這次洗價並不會觸發訊號。
我的建議:
(1)用逐筆洗價,不要用自動洗價。
(2)改用交易腳本處理。觸發模式用變數控制。
7 評論