請教小編 策略雷達可以寫成 例如我希望
close > close[1] 例如這個條件
可是我希望假設我設定執行商品為500檔股票
但我希望達到close > close[1]這個條件的股票
例如有超過50檔 我才希望策略雷達觸發通知我
請教小編有辦法寫這種語法嗎 感謝
請教小編 策略雷達可以寫成 例如我希望
close > close[1] 例如這個條件
可是我希望假設我設定執行商品為500檔股票
但我希望達到close > close[1]這個條件的股票
例如有超過50檔 我才希望策略雷達觸發通知我
請教小編有辦法寫這種語法嗎 感謝
Hello 阿林,
由於各個商品都是獨立運算,所以一般是沒有辦法作到您的需求。
小幫手想到的解法是使用 GetSymbolField 來取得500檔商品的收盤價資訊,接著在統計符合條件的數量。
舉例來說:
value1 = 0;
if getsymbolfield("1101.TW", "Close") > getsymbolfield("1101.TW", "Close")[1] then value1 +=1; //若條件符合的話value1就增加1
if getsymbolfield("1102.TW", "Close") > getsymbolfield("1102.TW", "Close")[1] then value1 +=1;
...其他所需商品...
if value1 > 50 and close > close[1] then ret = 1;
不過這樣的話缺點就是要寫很長的腳本。
感謝小編回答 另外想請教小編一個問題
請問要怎麼寫出例如 上櫃跟加權指數兩個指數的漲跌幅
有相差到1.5%以上的程式 我自己是有寫一些下去跑
但是好像不知道是哪裡出問題了 寫出來不是我要的那個樣子
再麻煩小編了 感謝
還有第二個問題請教小編
我之前有些一個程式 程式內容大概就是寫
有股票拉到3%以上 然後使用兩分k棒 如果有單根兩分k棒的close
漲幅超過1% 然後開盤的第一根兩分k的close不納入計算這樣
只是最近遇到一個問題就是 後來因為需求 我把它改成逐筆洗價
變成會出現一種情形 例如 逐筆洗價模式有成交就會去搜尋一次
然後可能當根正在成交的兩分k棒 剛好有拉超過1% 然後程式跳出來通知我
可是最後這根兩分k卻收盤完漲幅並沒有超過1%
想請問小編請問怎樣可以改成例如
情況一 開盤後 有兩分k的close漲幅超過1% 然後日漲幅有超過3%
(開盤後的第一根兩分k的收盤價漲幅不納入計算) 請電腦通知我
意思是只要有出現當根2分k棒漲幅超過1%然後剛好日漲幅有超過3%
用逐筆洗價的方式可以馬上通知我這樣
情況二 開盤後都沒有兩分K的 close漲幅有超過1% 但是剛好在成交的那一根兩分k有超過1%
然後日漲幅超過3%
(開盤後的第一根兩分k的收盤價漲幅不納入計算)
但我用逐筆洗價我又不希望他在最後收盤價之前沒有真的漲幅有1%以上通知我 我希望它是這一根兩分k結束過後
確認漲幅有1%以上再來通知我這樣 意思就是慢一根k棒 確認兩分k的close有超過1% 而不要前面都沒有收盤超過
1%的兩分k 但是正在成交的這根的close有超過1% 但是很可能收盤就小於1% 希望能夠等正在成交的這根最後收盤完
確認漲幅有超過1%再來通知我這樣
以上再麻煩小編了 感謝
Hello 阿林,
小幫手不知道您是怎麼寫的,不過如果是小幫手的話會這樣計算:
// TSE漲跌幅
value1 = 100 * (getsymbolfield("TSE.TW", "Close", "D") - getsymbolfield("TSE.TW", "Close", "D")[1]) / getsymbolfield("TSE.TW", "Close", "D")[1];
// OTC漲跌幅
value2 = 100 * (getsymbolfield("OTC.TW", "Close", "D") - getsymbolfield("OTC.TW", "Close", "D")[1]) / getsymbolfield("OTC.TW", "Close", "D")[1];
condition1 = absvalue(value1 - value2) > 1.5; //漲跌幅差距大於1.5%
if condition1 then ret = 1;
如果您在逐筆洗價上希望可以有 觸發當下馬上通知 及 當Bar結束時有符合條件才通知 的作法,可以使用 condition1 和 condition1[1] 來達成。
舉例來說:
condition1 = 觸發條件...;
if condition1 then ret = 1; //洗價時條件一符合就警示
if condition1[1] then ret = 1; //要完成的Bar (上一根Bar) 條件符合才警示
感謝小編解答 這邊還有兩個問題請教小編
以下是我程式
if barfreq <> "Min" or Barinterval <> 2 then RaiseRuntimeError("請設定頻率為2分鐘");
variable:ss(0);
if date <> date[1] then
if high <= GetField("收盤價", "D")[1] and high[1] <= GetField("收盤價", "D")[1] and high[2] <= GetField("收盤價", "D")[1] then
ss += 1;
我寫這樣是希望開盤過後如果有連續超過三根兩分k的high小於或等於一日前的收盤價 那記錄起來
可是我寫這樣下去跑 好像怪怪的 不知道是哪裡出了錯 再麻煩小幫手檢查
第二個問題
if high >= highest(GetField("最高價", "D"),40) 這樣寫是代表high >= 40天內的日最高價嗎
但我寫這樣去跑 好像也怪怪的 再麻煩小幫手檢查
Hello 阿林,
1.您應該是先將該變數每日歸0,接著再判斷是否有發生超過三根兩分k的high小於或等於一日前的收盤價的狀況。
所以會是:
if date <> date[1] then ss = 0;
if high <= GetField("收盤價", "D")[1] and high[1] <= GetField("收盤價", "D")[1] and high[2] <= GetField("收盤價", "D")[1] then ss += 1;
2.小幫手這邊測試是正常的。
需注意 highest(GetField("最高價", "D"),40) 是包含當根Bar在內的40天,所以實際上不會發生 high > highest(GetField("最高價", "D"),40) 的狀況,只會有 high = highest(GetField("最高價", "D"),40) 的狀況。
另外在跨頻率時,會建議您改用 simplehighest 比較好,因為在大頻率跨到小的時候 highest 會出錯。
您可以將相關數值print出來檢查看是否有如您預想。
另外建議您,以後發問時可以描述一下為何您覺得怪怪的 (商品,發生的日期時間),小幫手會比較容易針對問題研究。
好的 感謝小編 另外請問小編一個問題
請問我寫這樣是不是有問題
variable:today(0);
if date <> date[1] then
today = 1
else
today+=1;
high[today[1]] <= GetField("收盤價", "D")[1]*1.045
請問小編 high[today[1]] 這樣是不是代表今天開始的第一根兩分k棒(我頻率為兩分鐘k棒)
high[today[1]] <= GetField("收盤價", "D")[1]*1.045 我寫意思是 我希望當天第一根兩分K棒的high
小於4.5% 但是我實際再跑 還是會有些有超過4.5%的第一根兩分k的high跳出來耶
想請問小編我上述語法是不是有誤? 感謝小編
Hello 阿林,
小幫手會建議您可以這樣寫:
if date <> date[1] then today = 0 else today + 1;
這樣 high[today] 就會是今天開始的第一根2分K棒。
today[1] 的方式在開盤的時候會取到昨日最後一根Bar的數值,因此錯誤。
另外,您也可以直接用變數儲存high的值即可。
舉例來說:
if date <> date[1] then value1 = high;
這樣value1就會是當日第一根bar的high。
小幫手建議您,可以實際將數值print出來,這樣就可以確認取到的值是否正確。
像是 print(date, time, time[today[1]], high[today[1]], GetField("收盤價", "D")[1]*1.045); 您就可以確認哪裡有誤。
小幫手不好意思print這個我不會用 可以請小幫手稍微解釋一下嗎
另外想請問小幫手幫我檢查看看 我這個腳本哪裡有問題嗎
因為好像回復字太多 所以我就把腳本分成兩個留言
再請小幫手檢查 腳本問題在於不知道為什麼今天6235雷達也會跳出來
因為今天的漲幅並沒有達到我寫的
有大於或等於5.7%
而且還有1539的確早上漲幅是有達到5.7% 雷達卻沒有跳出來
再麻煩小幫手幫我檢查看看了 感謝
以上為一個腳本 只是我分成兩個回文這樣 再麻煩小幫手了
11 評論