trueany 使用問題

  •   210 
  • 最後發表   樂兒  2024 三月 25
樂兒 發文於   2024/03/08

小幫手你好

如果想要抓取 當 trueAny 條件成立時的數值,作為後續參數運用

例如,過去8天,曾有過 當日最高價 最低價 差 8%以上

variable:trueany_high(0);

variable:trueany_low(0);

if trueAny(GetField("最高價","D")[1]/GetField("最低價","D")[1]>1.08,8) then begin

trueany_high= trueany成立那筆資料的當日最高價

trueany_low= trueany成立同一筆資料的當日最低價

當條件成立,要抓去條件成立當筆資料的 最高價 和最低價 作為後續使用 ,語法要怎寫,才能順利抓取到數值呢?

 

非常感恩!

排序方式: 標準 | 最新
XS小編 發文於   2024/03/11

 Hello 樂兒,

 

這樣的話小編認為使用的應該是 BarsLast 函數,計算經過幾根Bar,或是直接使用變數保存條件符合的相對位置。。

舉例來說,日頻率的情況下:

value1 = barlast(high / low > 1.08);

 

if value1 < 8 then begin

    value2 = high;

    value3 = low;

    end

else begin

    value2 = 0;

    value3 = 0;

    end;

樂兒 發文於   2024/03/13

親愛的小幫手,經過兩天測試,發現依照您說的方式,

if value1 < 8 then begin

    value2 = high;

    value3 = low;

 

抓取的的 日頻率    value2,  value3 ,不是符合 BarsLast  條件成立當時當筆資料的 最高價 和最低價,而是 ret=1; 的最新資料喔,例如現在執行,會抓到今天收盤的日K數據喔。 在麻煩小幫手幫我想想辦法,如何抓到 

過去8天,曾有過 當日最高價 最低價 差 8%以上,當條件成立,要抓條件成立當天的資料 最高價 和最低價 作為後續使用喔

 

謝謝小幫手,附上語法提供測試,或請小幫手提供指點,謝謝小幫手

 

----

我有用  retMsg 輸出給小幫手參考

 

感謝小幫手的解惑幫忙  感恩

XS小編 發文於   2024/03/14

Hello 樂兒,

 

不好意思小編上面的範例遺漏了要在條件符合時保存變數的邏輯。

正確應該是:

value1 = barslast(high / low > 1.08);

 

if value1 < 8 and value1 = 0 then begin

    value2 = high;

    value3 = low;

    end

else if value1 >= 8 then begin

    value2 = 0;

    value3 = 0;

    end;

 

value1為0的時候代表條件在該根Bar符合, value1 < 8 的時候代表8根Bar內有條件符合 (包含條件符合那根Bar), value1 >= 8 的時候代表近8根Bar內沒有條件符合。

您可以畫在指標上作測試 (條件可以放寬鬆些比較容易畫出)。

 

所以上方的腳本應該修改為:

if rds = 0 and rds < 8 then begin

    RdH = high;

    RdL = low;

    end

else if rds >= 8 then begin

    RdH = 0;

    RdL = 0;

    end;

 

這樣 RdH 和 RdL 才會是條件符合當根Bar的high跟low。

樂兒 發文於   2024/03/21

親愛的小幫手,依照您的教導,調整幾次之後,RdH已經可以正常紀錄了,如果想要在這個基礎上,加上限制條件,

比如 例如使用  if rds > 0 and rds < 8 then begin 那麼 可能過去8天都有可能 barsLast 成立

可能是 前三天 或是前六天, 

如果想要加上一個條件, 一旦 barsLast 成立之後,後續每天的開盤價,都高於 RdH ,才跳出警示通知,應該怎麼寫呢?

因為 barsLast 成立有可能是 前4天  也可能是前6天,想要請教小幫手

 

如何恰當規範 無論是  前4天  或是前6天,條件成立之後的每天 開盤價都高於RdH的話,才跳出警示呢?

我嘗試了幾個想法,還是卡關了... 只好再回來跟小幫手求助...  感恩.....感謝

 

 

 

XS小編 發文於   2024/03/25

Hello 樂兒,

 

您可以用rds數值來當作條件決定作什麼邏輯判斷。

舉例來說:

 

if rds = 0 then begin

    RdH = high;

    RdL = low;

    end

else if rds = 3 then begin    //條件成立後的第3根Bar(不包含條件成立那根Bar)

    if trueall(open > RdH, 3) then ret = 1;    //判斷近3根Bar的開盤價是否有大於RdH,有的話警示

    end

else if rds = 6 then begin    //條件成立後的第6根Bar(不包含條件成立那根Bar)

    if trueall(open > RdH, 6) then ret = 1;    //判斷近6根Bar的開盤價是否有大於RdH,有的話警示

    end

else if rds >= 8 then begin

    RdH = 0;

    RdL = 0;

    end;

 

小編建議您先閱覽網站上的教學區教學影片,裡面有XS語法的基礎和應用可以閱覽。

 

發表回覆
Close