警示功能詢問

  •   263 
  • 最後發表   交易玩家  2023 七月 19
交易玩家 發文於   2023/07/06

請問能不能用XS寫出與跑馬燈訊息相同的語法

股價創當日新高 、 一分鐘漲2% 

 

附加文件

排序方式: 標準 | 最新
交易玩家 發文於   2023/07/07

現在下方程式碼寫完是會通知

但是 一個ticket會跳3-4次相同的警示

有甚麼方式能讓他只出現一次

目前頻率是 一分K連續觸發 逐筆洗價

 

variable:history_low(0);

 

if getinfo("isrealtime") <> 1 then return; //回傳值為0表示該筆資料為歷史資料或其他。

//回傳值為1表示該筆資料為即時成交更新資料。 區分為當下是否為同一根K

 

 

if value3 < GetField("RefPrice", "D") then

begin 

 

if value1 =0 then 

    begin

        history_low = GetField("最低價","D");

        value1 = 1;

    end;

 

value3 = GetField("close", "Tick"); // 價格

 

 

if value3 < history_low  then

    begin   

        ret = 1;

RetMsg = "股價當日新低"; 

        history_low = GetField("最低價","D"); 

    end;

 End; 

 

交易玩家 發文於   2023/07/10

還是要改成K棒內單次觸發 逐筆洗價 

XQ小幫手 發文於   2023/07/12

 Hello 交易玩家,

 

是的,如果您不希望同根Bar裡面連續觸發的話,可以改為K棒內單次觸發。

細節您可以參考教學文章中的 觸發設定方式的應用

 

如果您只是要判斷當根Bar是否有創當日新低的話,可以用很簡單的方式來判別:

value1 = getfield("Low", "D");

if low < value1[1] then ret = 1;    //當根Bar的low比前一根Bar的當日最低價還低 = 創新低

 

1分鐘漲2%的話只要使用在1分鐘頻率上,用當根於前根close計算即可。

value1 = 100 * (close - close[1]) / close[1];

if value1 > 2 then ret = 1;

交易玩家 發文於   2023/07/13

但是我的會跳出像這樣的情況 

我想要用tick去算 才會知道當下是否創高 

variable:history_high(0);

 

history_high = getfield("high", "D");

 

if close  > GetField("RefPrice", "D") and 

   high > history_high[1]

   then begin

   retmsg = "股價當日新高" ;

   ret = 1;

end;

目前 程式碼 然後是使用1分K連續觸發 逐筆洗價

交易玩家 發文於   2023/07/13

once(close >= GetField("RefPrice", "D") * 1.015 ) 

     begin

       ret = 1 ; RetMsg = "+1.5%";

     End; 

 

once(close >= GetField("RefPrice", "D") * 1.025 ) 

     begin

       ret = 1 ; RetMsg = "+2.5%";

     End; 

 

once(close >= GetField("RefPrice", "D") * 1.03 ) 

     begin

       ret = 1 ; RetMsg = "+3%";

     End;

 

 

想請問然後這個該如何跟上面的警示一起做提示 這邊目前輸入上面內容後就不會現示這

 

交易玩家 發文於   2023/07/17

再麻煩幫我看看~

XQ小幫手 發文於   2023/07/19

Hello 交易玩家,

 

小幫手建議您先閱讀 觸發設定方式的應用 這篇文章。

網站上有教學區,裡面有XS語法的基礎和應用可以閱覽。

 

您選擇連續觸發,那麼只要當根Bar符合條件就會持續觸發。

history_high[1] 會是上一根Bar時的當日最高價,所以只要這根Bar的high有超過的話,每此洗價都會觸發。

如果您希望只在上一個Tick的日最高價被超越時警示,請使用 intrabarpersist 宣告的變數來保存。

舉例來說:

var: intrabarpersist pre_highd(0), intrabarpersist _highd(0);

 

pre_highd = _highd;

_highd = getfield("High", "D");

 

if _highd > pre_highd and getfield("Date", "Tick") = getfield("Date", "Tick")[1] then ret = 1;

這樣只要兩次洗價間當日的最高價有大於前一次的最高價的話就警示。

 

once 只有第一次觸發的時候會執行,如果在讀取筆數運算時就達成的話,那麼策略實際啟動時有符合也不會執行。

您可以使用 GetInfo 來判斷運算的資料是不是及時的狀態,如果是的話再計算once的部分。

發表回覆
Close