小幫手您好,
我每天都會人工執行約10個選股腳本,最近我並沒有對腳本做任何修改,但自從昨天有個腳本無法執行完成,產生"逾時"問題,不同時間段試了很多次,都無法順利執行,不知貴公司系統是否做甚麼改變所導致?(p.s. 以前也發生過約持續一個星期,後來它就自己變好了),附上無法順利執行的腳本.
以上
好朋友敬上
小幫手您好,
補充上述問題說明如下,首先更正我的附件是選股策略,內含2個選股腳本. 經分開單獨測試,會造成"連線逾時"是第一個腳本"45籌_661量",這是一個內容非常簡單的腳本,但會引用到較長的歷史資料,以前整個選股策略雖然執行時間會較久,但都是可執行出結果.
以上
好朋友敬上
Hello 好朋友888,
小幫手看了您的腳本,由於您腳本沒有需要用到前期值運算結果的邏輯,所以其實不必設這麼長的SetTotalBar。
您可以改為 SetTotalBar(1) 一樣可以得出正確資訊,且運算速度快速許多。
小幫手您好,
很感謝您的指點和快速回覆,如您所說,我將腳本"45籌_661量"改為SetTotalBar(1),經測試,完全符合您說的結果,速度的確快很多,結果也正確. 我一直以為在腳本要用到多久的前期資料,至少就要設多久的"settotalbar",不然就抓不到資料,會導致執行結果錯誤. 所以在此,請您為我解釋
1. 何謂"腳本沒有需要用到前期值運算結果的邏輯"
2. 又在那些情況下,才需要在腳本要用到多久的前期資料,至少就要設多久的"settotalbar". 例如,在原本選股略中的第二個腳本"45籌_60天大小量",算不算是"用到前期值運算結果的邏輯",如果是的話,是否將settotalbar設為61更為合理?
請參閱本次附件,這個選股策略也是會有同樣執行時間過長而導致"連線逾時",該如何修改,感恩!謝謝!(P.S. 本次附件(最近季度巨小量漲跌幅1(重要).DSTX)和原本附件,共二個選股策略,是我到目前為止,碰到的問題)
以上,
好朋友,敬上
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以上才不會繼續變動。
小幫手您好,
謝謝您的指導與說明,經修正後選股策略如附件,執行也正常,不過在第一個腳本 "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台泥, 不知為何抓不到,請協助,謝謝!
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賦值。
6 評論