請問能不能用XS寫出與跑馬燈訊息相同的語法
股價創當日新高 、 一分鐘漲2%
現在下方程式碼寫完是會通知
但是 一個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;
還是要改成K棒內單次觸發 逐筆洗價
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;
但是我的會跳出像這樣的情況
我想要用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連續觸發 逐筆洗價

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;
想請問然後這個該如何跟上面的警示一起做提示 這邊目前輸入上面內容後就不會現示這
再麻煩幫我看看~
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的部分。
7 評論