請問一下~
1.我的交易策略是做全日盤小台 FIMTXN*1, 以10分K頻率去自動交易
但在夜盤15:00開盤時, 都會出現10分鐘頻率取得異常K線資料
請問是我的設定哪邊有問題, 哪邊可以進行調整?
2.我的語法編寫, 時間分兩段是因為曾經發生13:35出訊號, 13:45要下單時已過交易時間, 導致發生錯誤而中斷自動交易,但我又不想逐筆洗價, 因為我想等該K棒確定訊號翻轉才執行交易, 請問語法部分時間分兩段有辦法避免上述問題嗎? 這兩段重複的能怎麼併在一起會比較簡潔?
// MACD 黃金交叉 (dif向上穿越macd)
//
input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);
SetTotalBar(200);
SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");
MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);
var:
long_condition(false), { 是否做多 }
late_long_condition(false), { 是否延遲做多 }
exit_long_condition(false), { 是否多單出場 }
short_condition(false), { 是否做空 }
late_short_condition(false), { 是否延遲做空 }
exit_short_condition(false); { 是否空單出場 }
long_condition = difValue Crosses Above macdValue and close>ema(close,20);
late_long_condition = difValue > macdValue and close cross Above ema(close,20);
exit_long_condition = difValue Crosses below macdValue;
short_condition = difValue Crosses below macdValue and close<ema(close,20);
late_short_condition = difValue < macdValue and close cross Below ema(close,20);
exit_short_condition = difValue Crosses above macdValue;
if Time>084500 and time<134400
then
begin
if Position <> 1 and long_condition then begin
{ 如果符合做多情境(long_condition), 則把部位變成1 (可能是0->1 or -1->1) }
SetPosition(1);
end else if position <> 1 and late_long_condition then begin
setposition(1);
{ 如果符合延遲做多情境(late_long_condition), 則把部位變成1 (可能是0->1 or -1->1) }
end else if Position <> -1 and short_condition then begin
{ 如果符合做空情境(short_condition), 則把部位變成-1 (可能是0->-1 or 1->1) }
SetPosition(-1);
end else if position <> -1 and late_short_condition then begin
setposition(-1);
{ 如果符合延遲做空情境(late_short_condition), 則把部位變成-1 (可能是0->-1 or 1->1) }
end else if Position = 1 and exit_long_condition then begin
{ 如果已經做多, 且發生多方出場情形時(exit_long_condition), 則把部位變成0 }
SetPosition(0);
end else if Position = -1 and exit_short_condition then begin
{ 如果已經做空, 且發生空方出場情形時(exit_short_condition), 則把部位變成0 }
SetPosition(0);
end;
end;
if Time>150000 or Time<045900
then
begin
if Position <> 1 and long_condition then begin
{ 如果符合做多情境(long_condition), 則把部位變成1 (可能是0->1 or -1->1) }
SetPosition(1);
end else if position <> 1 and late_long_condition then begin
setposition(1);
{ 如果符合延遲做多情境(late_long_condition), 則把部位變成1 (可能是0->1 or -1->1) }
end else if Position <> -1 and short_condition then begin
{ 如果符合做空情境(short_condition), 則把部位變成-1 (可能是0->-1 or 1->1) }
SetPosition(-1);
end else if position <> -1 and late_short_condition then begin
setposition(-1);
{ 如果符合延遲做空情境(late_short_condition), 則把部位變成-1 (可能是0->-1 or 1->1) }
end else if Position = 1 and exit_long_condition then begin
{ 如果已經做多, 且發生多方出場情形時(exit_long_condition), 則把部位變成0 }
SetPosition(0);
end else if Position = -1 and exit_short_condition then begin
{ 如果已經做空, 且發生空方出場情形時(exit_short_condition), 則把部位變成0 }
SetPosition(0);
end;
end;
4 評論