累計觸發

  •   538 
  • 最後發表   阿林  2022 七月 20
阿林 發文於   2022/04/09

請教小編 策略雷達可以寫成 例如我希望

close > close[1] 例如這個條件

可是我希望假設我設定執行商品為500檔股票

但我希望達到close > close[1]這個條件的股票

例如有超過50檔 我才希望策略雷達觸發通知我

請教小編有辦法寫這種語法嗎 感謝

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/04/14

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;

不過這樣的話缺點就是要寫很長的腳本。

阿林 發文於   2022/06/04

感謝小編回答 另外想請教小編一個問題

請問要怎麼寫出例如 上櫃跟加權指數兩個指數的漲跌幅

有相差到1.5%以上的程式 我自己是有寫一些下去跑

但是好像不知道是哪裡出問題了 寫出來不是我要的那個樣子 

再麻煩小編了 感謝

阿林 發文於   2022/06/05

還有第二個問題請教小編

我之前有些一個程式 程式內容大概就是寫

有股票拉到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%再來通知我這樣 

 

以上再麻煩小編了 感謝

 

XQ小幫手 發文於   2022/06/09

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) 條件符合才警示

阿林 發文於   2022/06/26

感謝小編解答 這邊還有兩個問題請教小編

以下是我程式

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天內的日最高價嗎

但我寫這樣去跑 好像也怪怪的 再麻煩小幫手檢查

 

XQ小幫手 發文於   2022/06/30

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出來檢查看是否有如您預想。

 

另外建議您,以後發問時可以描述一下為何您覺得怪怪的 (商品,發生的日期時間),小幫手會比較容易針對問題研究。

阿林 發文於   2022/07/10

好的 感謝小編 另外請問小編一個問題

請問我寫這樣是不是有問題

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跳出來耶

想請問小編我上述語法是不是有誤? 感謝小編

XQ小幫手 發文於   2022/07/14

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); 您就可以確認哪裡有誤。

阿林 發文於   2022/07/15

小幫手不好意思print這個我不會用 可以請小幫手稍微解釋一下嗎

另外想請問小幫手幫我檢查看看 我這個腳本哪裡有問題嗎

因為好像回復字太多  所以我就把腳本分成兩個留言

再請小幫手檢查 腳本問題在於不知道為什麼今天6235雷達也會跳出來

因為今天的漲幅並沒有達到我寫的

有大於或等於5.7% 

而且還有1539的確早上漲幅是有達到5.7% 雷達卻沒有跳出來

再麻煩小幫手幫我檢查看看了 感謝

 

阿林 發文於   2022/07/15

以上為一個腳本 只是我分成兩個回文這樣 再麻煩小幫手了

顯示更多回應 發表回覆
Close