請問計算高低點10%的程式碼入雷達但沒有警示跳出?

  •   377 
  • 最後發表   chuck  2024 十一月 01
chuck 發文於   2024/10/24

請問要用雷達警示高低點10%的個股 但沒有跳出警示 ?程式碼如下  

 // 定義變數

vars: dayHigh(0), dayLow(0), priceRange(0), canDayTrade(true);

 

// 檢查是否為新的一天,如果是,則更新當日高點和低點

if GetField("Date") <> GetField("Date")[1] then begin

    dayHigh = GetField("High", "D");  // 初始化當日高點為當日最高價

    dayLow = GetField("Low", "D");    // 初始化當日低點為當日最低價

end;

 

// 更新當日高點和低點

if GetField("High", "D") > dayHigh then begin

    dayHigh = GetField("High", "D");

end;

 

if GetField("Low", "D") < dayLow then begin

    dayLow = GetField("Low", "D");

end;

 

// 計算當日高低點差距的百分比

priceRange = (dayHigh - dayLow) / dayHigh * 100;

 

// 檢查當日是否可以現股當沖

canDayTrade = GetSymbolInfo("買賣現沖");

 

// 檢查當日高低點差距是否超過 10% 且當日不可以現股當沖

if priceRange >= 10 and not canDayTrade then begin

    // 用 Print 來輸出警示訊息

    Print("警示:當日價格波動已達 10%,且禁止現股當沖,請注意風險!");

end;

 

附加文件

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/10/24

可能的原因:你的主頻率是日,觸發設定為啟動之後只觸發一次,在跑歷史K棒時可能就已經觸發了,因此盤中不會再觸發。把它改成K棒內單次觸發看看。

  • 按讚來自於
  • chuck01200120
chuck 發文於   2024/10/24

快收盤時我改為指定頻率為一分K  只觸發一次 但看紀錄沒看到今日符合標的  明天在試試看  今天都有高點到低點10%的股票 請問許教授這程式碼寫法有無錯誤?或是沒有執行的原因?

附加文件

虎科大許教授 發文於   2024/10/24

以下兩個變數宣告時都加intrabarpersist。

vars: intrabarpersist dayHigh(0), intrabarpersist dayLow(0);

  • 按讚來自於
  • chuck01200120
chuck 發文於   2024/10/24

謝謝許教授!!!

chuck 發文於   2024/10/25

請問許教授 程式碼已加上變數 但今天跳出訊息都不是(高低點10%就跳出) 且跳出訊息有的是可以資劵當沖的  在XS欄位裡面找不到禁止資劵當沖的 這該如何排除呢?謝謝 

 

// 定義變數,使用 intrabarpersist 來保持逐筆更新

vars: intrabarpersist dayHigh(0), intrabarpersist dayLow(0), priceRange(0), canDayTrade(true), signal(0);

 

// 檢查是否為新的一天,如果是,則更新當日高點和低點

if GetField("Date") <> GetField("Date")[1] then begin

    dayHigh = 0;  // 初始化當日高點為當日最高價

    dayLow = 9999;    // 初始化當日低點為當日最低價

end;

 

// 更新當日高點和低點

if GetField("High", "D") > dayHigh then begin

    dayHigh = GetField("High", "D");

end;

 

if GetField("Low", "D") < dayLow then begin

    dayLow = GetField("Low", "D");

end;

 

// 計算當日高低點差距的百分比

priceRange = (dayHigh - dayLow) / dayHigh * 100;

 

// 檢查當日是否可以現股當沖

canDayTrade = GetSymbolInfo("買賣現沖");

 

// 檢查當日高低點差距是否超過 10% 且當日不可以現股當沖

if priceRange >= 10 and not canDayTrade then begin

    // 設定警示信號

    signal = 1;

    // 用 Print 來輸出警示訊息

    Print("警示:當日價格波動已達 10%,且禁止現股當沖,請注意風險!");

end;

 

// 如果警示條件符合,將 ret 設為 1

if signal = 1 then begin

    ret = 1;

end;

附加文件

虎科大許教授 發文於   2024/10/25

歷史K棒造成的signal = 1;沒有機會恢復為0,所以造成沒有10%,也會警示。

在每天的第一根K棒加上讓它歸零的指令:

 

if GetField("Date") <> GetField("Date")[1] then begin

    dayHigh = 0;  // 初始化當日高點為當日最高價

    signal=0;

    dayLow = 9999;    // 初始化當日低點為當日最低價

end;

  • 按讚來自於
  • chuck01200120
chuck 發文於   2024/10/25

謝謝許教授!!!

XS小編 發文於   2024/11/01

Hello chuck,

 

小編補充,您可以搭配使用 GetInfo 函數讓腳本只在即時的狀況下判斷是否符合條件。

舉例來說:

if GetInfo("IsRealTime") = 1 and priceRange >= 10 and not canDayTrade then begin

    // 設定警示信號

    signal = 1;

    // 用 Print 來輸出警示訊息

    Print("警示:當日價格波動已達 10%,且禁止現股當沖,請注意風險!");

    end;

 

感謝 虎科大許教授 的熱心回覆。

  • 按讚來自於
  • chuck01200120
發表回覆
Close