選股腳本這兩天有部分無法執行

  •   530 
  • 最後發表   好朋友888  2021 十一月 30
好朋友888 發文於   2021/11/18

小幫手您好,

我每天都會人工執行約10個選股腳本,最近我並沒有對腳本做任何修改,但自從昨天有個腳本無法執行完成,產生"逾時"問題,不同時間段試了很多次,都無法順利執行,不知貴公司系統是否做甚麼改變所導致?(p.s. 以前也發生過約持續一個星期,後來它就自己變好了),附上無法順利執行的腳本.

以上

好朋友敬上

附加文件

排序方式: 標準 | 最新
好朋友888 發文於   2021/11/20

小幫手您好,

補充上述問題說明如下,首先更正我的附件是選股策略,內含2個選股腳本.  經分開單獨測試,會造成"連線逾時"是第一個腳本"45籌_661量",這是一個內容非常簡單的腳本,但會引用到較長的歷史資料,以前整個選股策略雖然執行時間會較久,但都是可執行出結果. 

以上

好朋友敬上

XQ小幫手 發文於   2021/11/23

Hello 好朋友888,

 

小幫手看了您的腳本,由於您腳本沒有需要用到前期值運算結果的邏輯,所以其實不必設這麼長的SetTotalBar。

您可以改為 SetTotalBar(1) 一樣可以得出正確資訊,且運算速度快速許多。

好朋友888 發文於   2021/11/23

小幫手您好,

很感謝您的指點和快速回覆,如您所說,我將腳本"45籌_661量"改為SetTotalBar(1),經測試,完全符合您說的結果,速度的確快很多,結果也正確. 我一直以為在腳本要用到多久的前期資料,至少就要設多久的"settotalbar",不然就抓不到資料,會導致執行結果錯誤. 所以在此,請您為我解釋

1. 何謂"腳本沒有需要用到前期值運算結果的邏輯"

2. 又在那些情況下,才需要在腳本要用到多久的前期資料,至少就要設多久的"settotalbar". 例如,在原本選股略中的第二個腳本"45籌_60天大小量",算不算是"用到前期值運算結果的邏輯",如果是的話,是否將settotalbar設為61更為合理?

請參閱本次附件,這個選股策略也是會有同樣執行時間過長而導致"連線逾時",該如何修改,感恩!謝謝!(P.S. 本次附件(最近季度巨小量漲跌幅1(重要).DSTX)和原本附件,共二個選股策略,是我到目前為止,碰到的問題)

以上,

好朋友,敬上

 

附加文件

XQ小幫手 發文於   2021/11/25

Hello 好朋友888,

 

1.

您的理解在策略雷達和交易中心時設定讀取筆數是正確的,不過在選股中心有點不太一樣。

選股中心的一開始預設就是會讀取所有的資料,而設定的資料讀取筆數是 需要運算的筆數。

舉個簡單的例子,假設您的腳本:

ret = 1;

value1 += 1;

outputfield1(value1);

那麼當您資料讀取筆數為10時就會顯示10,100的話就會顯示100。

因為value1會隨著腳本每次執行而增加。

KD和MACD函數也是常見會受前期值影響的指標。

 

2.

您可以實際嘗試一下,將 45籌_60天大小量 資料筆數設為不同的數字,看會不會隨著筆數變動就知道是否與前期值有關。

小幫手測試過是會的,要到120筆以上才不會繼續變動 (因為for迴圈與Cextremes)。

 

3.

您的腳本 01籌_最近季度巨量漲跌幅 裡面value31 應該有誤,看註解這應該是要取得成交量不是最高價。

這個腳本看起來是沒有需要取用前期值,所以可以設為1。

小幫手測試改變讀取筆數篩選出來的結果不會變動。

但另一個 60天小量_支撐與壓力 的和 45籌_60天大小量 有一樣的狀況 (for迴圈與Cextremes)。

所以最少也要設為120以上才不會繼續變動。

好朋友888 發文於   2021/11/27

小幫手您好,

謝謝您的指導與說明,經修正後選股策略如附件,執行也正常,不過在第一個腳本 "01籌_最近季度巨量漲跌幅" 最後我增加了一段

//補足當日所有紅黑K

if strlen(BigVK) <= 2 then

if GetField("漲跌幅", "D")[value32]>0 then

if C[value32]>O[value32] then

BigVK = "上漲紅K"

else if C[value32]<=O[value32] then

BigVK = "上漲黑K"

else 

if C[value32]>O[value32] then

BigVK = "下跌紅K"

else if C[value32]<=O[value32] then

BigVK = "下跌黑K";

if strlen(HPriceK) <= 2 then

if GetField("漲跌幅", "D")[value34]>0 then

if C[value34]>O[value34] then

HPriceK = "上漲紅K"

else if C[value34]<=O[value34] then

HPriceK = "上漲黑K"

else

if C[value34]>O[value34] then

HPriceK = "下跌紅K"

else if C[value34]<=O[value34] then

HPriceK = "下跌黑K";

其目的使用以補足,經前方腳本過濾後剩下. 只要不是value31<=2000(原本腳本中已設定), 所有股票的BigVK和HPriceK當日的漲跌情況,有些能抓到資料,

有些抓不到, 如1101台泥, 不知為何抓不到,請協助,謝謝!

附加文件

XQ小幫手 發文於   2021/11/30

Hello 好朋友888,

 

您最後增加的一段else和else if 的部分有誤。

可以修改成:

if strlen(BigVK) <= 2 then

    if GetField("漲跌幅", "D")[value32]>0 then begin

if C[value32]>O[value32] then

    BigVK = "上漲紅K"

else if C[value32]<=O[value32] then

    BigVK = "上漲黑K";

    end else begin

if C[value32]>O[value32] then

    BigVK = "下跌紅K"

else if C[value32]<=O[value32] then

    BigVK = "下跌黑K";

    end;

if strlen(HPriceK) <= 2 then

    if GetField("漲跌幅", "D")[value34]>0 then begin

if C[value34]>O[value34] then

    HPriceK = "上漲紅K"

else if C[value34]<=O[value34] then

    HPriceK = "上漲黑K";

    end else begin

if C[value34]>O[value34] then

    HPriceK = "下跌紅K"

else if C[value34]<=O[value34] then

    HPriceK = "下跌黑K";

    end;

就可以正確的對BigVK和HPriceK賦值。

發表回覆
Close