函數問題

  •   107 
  • 最後發表   阿林  2 天前
阿林 發文於   2021/02/24

問題一 

請問小編  例如highest  裡面的期數 highest(GetField("最高價","D"),20); 

如果期數是20 好像是當天也會納入計算是嘛 可是我不想要算到今天

就是今天不納入計算 以昨天開始往前算20天 後來我改成這樣 highest(GetField("最高價","D")[1],20);

好像也不行 所以想請教小編 要怎樣寫 才會今天不納入計算

 

問題二

請問所有後面要寫期數的函數 例如 countif(close>close[1],10);

但我又不想後面期數是一定要多少這樣 我想要例如今天開盤9點到9點半

所以我就想說 用一個變數 宣告時間是9點到9點半這樣放在函數後面的期數這樣

但好像不行 我是寫這樣 

input: timeline(093000);

variable:rangtime(0); 

if time < timeline then rangtime = 0;

value1 = countif(close>close[1],rangtime);

 

或是我想說用value1 = time < 093000 這樣  但是顯示左右兩邊型態不同

 

所以再麻煩小編看一下怎樣寫才可以 感謝

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/02/25

Hi 阿林,

Q1:就是今天不納入計算 以昨天開始往前算20天 後來我改成這樣 highest(GetField("最高價","D")[1],20);

A1:後來您以下這樣的語法來表示「以昨天開始往前算20天」是正確的,小幫手這裡用自訂指標與選股策略確認過無誤,如圖

highest(GetField("最高價","D")[1],20);

好像也不行會不是會因為 [0] 與 [1] 20天的最高價剛好相同呢?

若您試過仍有疑問,請提供以下資訊,

Mail 至 XQservice@XQ.com.tw,最後貼上此討論文章連結,

以利小幫手釐清問題的原因,謝謝:

  • 有問題的匯出檔案,包含自訂腳本。 ← 以利查看腳本語法與相關設定是否與期望有所落差。
  • Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)壓縮檔案。 ← 若腳本語法與相關設定無誤,則會請相關人員查看此檔釐清問題。

 

Q2:所以我就想說 用一個變數 宣告時間是9點到9點半這樣放在函數後面的期數這樣

A2:小幫手會用以下範例腳本語法來表示,有回測與執行雷達驗證跑出來的數值,請再試試看

撰寫邏輯與雷達設定也可以參考附檔策略雷達匯出檔案,以上說明,供參考。

P.S. 也是可以用 Countif 的方式,不過撰寫邏輯上類似下方語法,

就不用屢次呼叫 Countif 函數,因為都是要去動態後面的期數。

input:_TimeOut(093000,"限制紀錄時間HHMMSS以前");

//範例僅支援1分鐘
if barFreq <> "Min" or barinterval <> 1 then raiseRunTimeError("僅支援1分鐘頻率");

//若最新收盤價大於前一分鐘收盤價,則累加1次。
//且在限制紀錄時間前都會判斷累加,過了紀錄時間則不再更新。
if  close > close[1]
and time <= _TimeOut then value1 += 1;

//初始化,若 TradingDate 更新則將累加初始化為0,以利重新記錄當日狀況。
if getfieldDate("date") <> getfieldDate("date")[1] then value1 = 0;


//驗證數值用
//Print(getfieldDate("date"),getfieldDate("date")[1],time,close,close[1],value1);

 

附加文件

阿林 發文於   2021/02/25

感謝小編給的範例 可是如果像是trueall 這種函數是不是就沒辦法像小編範例這樣表達

因為我是希望所有條件都成立 是不是就沒辦法用小編範例這樣寫出來

阿林 發文於   2021/02/25

  • 有問題的匯出檔案,包含自訂腳本。 ← 以利查看腳本語法與相關設定是否與期望有所落差。
  • Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)壓縮檔案。 ← 若腳本語法與相關設定無誤,則會請相關人員查看此檔釐清問題

請問LOG資料夾打開裡面很多檔案 是要寄出哪一個呢

阿林 發文於   2021/02/25

另外還有一個問題想請教小編

就是類似你們教學這樣

但我不想要去設定他是幾點前的高點 我想要只要他有一個高點 然後今天有過高 就通知我  不去限制時間

但是想不出來 要怎樣 不寫時間限制 讓電腦去判斷 今天他是先有一個高點出現 然後股價再過那個高點

因為先有一個高點 一定是股價見高後 然後至少有一段時間都沒有再過高了 只是我不知道要怎樣讓電腦去定義這個高點

因為如果寫成 例如前幾根都必須小於日最高價的話 變成一直往上走的股票也會出來 不知道要怎樣寫 才能不隨著時間限制

再麻煩小編了

XQ小幫手 發文於   2021/02/26

Hi 阿林,

Q1:因為我是希望所有條件都成立 是不是就沒辦法用小編範例這樣寫出來

A1:能否舉個案例,小幫手好像有方向可以引導您撰寫,但不確定是否符合您的預期,

所有條件是指,除了「9點到9點半」這個條件外,還有另外的條件都要達到才觸發,

還是指「9點到9點半」都要符合 close > close[1]?

再麻煩提供案例,以利小幫手提供方向供參考,謝謝。


 

Q2:請問LOG資料夾打開裡面很多檔案 是要寄出哪一個呢

A2:全都要,記得加入壓縮檔,感激涕零。如果壓縮檔太大沒辦法 Mail,請撥打客服電話 0800-006-098 或者 Mail 至 XQservice@XQ.com.tw 請益,會有專人為您解決壓縮檔太大沒辦法 Mail 的問題。


Q3:但我不想要去設定他是幾點前的高點 我想要只要他有一個高點 然後今天有過高 就通知我  不去限制時間

A3:「我想要只要他有一個高點」← 請問這個高點的定義為何?才能接下去撰寫條件,

希望可以給個案例,小幫手比較好引導撰寫方向給您參考,謝謝。

阿林 發文於   2021/03/01

小編你好 Q1的意思是 trueall這個函數不是代表 所有條件都成立嗎

但是他函數後面還是必須寫期數 我希望不要寫期數 例如我希望它期數

可以寫成是九點到九點半 例如 trueall(close > close[1],) 但後我後面期數

希望是有辦法類似用一個變數他是代表九點到九點半這樣 然後我用close>close[1]

只是舉例 主要是想說能不能後面期數有辦法改成 不用侷限說 我一定要幾期前幾期前這樣

而是有辦法讓它是幾點到幾點 

 

Q3 如圖

黃色圈圈處是當天的高點 紅色圈圈處是有過了當天高點 我希望電腦通知我

可是我有參考你們的教學腳本

他需要限制是幾點前的高點 然後幾點過後去過高

我不想要用時間去限制 只要當天最高點 然後股價有拉過去 就可以通知我

只是我想不到要怎樣寫 才能不用時間限制 讓電腦知道這個高點 是今天最高點 然後現在股價有過今天最高點

因為你如果寫例如 腳本跑一分鐘K 用high > GetField("最高價","D") 這樣也不行 

變成只要股價往上走是當日最高價 他都會跳出來 並沒辦法知道前面一定有個當日最高價

如果寫前幾根high都必須小於日最高價的話 變成一直往上走的股票也會出來

沒辦法去定義說high一定是剛過今天最高點 因為第一個最高點(黃色圈圈處)  

一定是至少一段時間沒有再過高了 才會形成最高點 只是好像沒辦法讓電腦去定義出來

再麻煩小邊指導了 感謝

XQ小幫手 發文於   2021/03/03

Hi 阿林,

Q:但是他函數後面還是必須寫期數 我希望不要寫期數 例如我希望它期數 可以寫成是九點到九點半。

A:那可以使用以下警示範例腳本來表示,撰寫邏輯也有註解在腳本中,範例策略雷達匯出檔案如附檔,以上方向供參考,謝謝。

input:StopUpdateTime(093000,"HHMMSS停止更新時間");

//當此根K棒與前一根K棒時間不同時,value1累加表示經過的期數。
if time <> time[1] then value1 += 1;

//當交易日(TradingDate)更新時,初始化value1的累加變數。
//因為value1僅紀錄當天的K棒數。
if getfieldDate("date") <> getfieldDate("date")[1] then value1 = 0;

//當時間小於「停止更新時間」時,用value2去動態該時段的期數
//當時間大於等於「停止更新時間」時,則value2不再更新
//例如:09:00:00 ~ 09:30:00 要動態紀錄期數,就可以用此法來達到。
if time <= StopUpdateTime then value2 = value1;

//有了 value2 就能拿來動態變化 trueall 的期數
condition1 = trueAll(close>close[1],value2);

{//驗證數值
print(date,time,StopUpdateTime,value2,value1);}

附加文件

阿林 發文於   2021/03/18

請問小編我腳本是否有誤

 

if barfreq <> "Min" or Barinterval <> 2 then RaiseRuntimeError("請設定頻率為2分鐘");

 

variable:cc(0);

 

 

cc = highest(GetField("最高價","D")[1],5)[2];   從昨天開始往前算五日內的第二個高點

 

 

if GetField("成交量","D") > 1000 and high[1] = cc and high <= cc and  如果前一根兩分k棒有來到五日內的第二個高點

high < 100 and GetField("最高價","D") <= cc then ret = 1;

 

可是我寫這樣 我發現跑出來的股票都會是從昨天開始往前算五日內的第一個高點

而不是我要的第二個高點耶 不知道問題出在哪裡再麻煩小編了

XQ小幫手 發文於   2021/03/21

Hi 阿林,

Q:從昨天開始往前算五日內的第二個高點

A:請使用 NthHighest 這個函數來尋找第二個高點,以上撰寫方向供您參考,請您先嘗試改寫看看,謝謝。

原本您使用的 highest 函數,僅會找到最大的那個高點,所以請您使用 NthHighest 這個函數來尋找第二個高點。

阿林 發文於   2021/05/02

那請問小編 上述您給我的腳本 是不是可以改成昨日

我自己是有試著改 但好像不行 因為如果

例如我把StopUpdateTime 改成132500

這樣我就可以例如我 trueall(close > close[1],)後面的期數

是希望電腦去算昨天一整天的這樣

再麻煩小編了 

 

Show More Posts 發表回覆
Close