while函數bug

  •   369 
  • 最後發表   程式菜鳥  2020 一月 07
程式菜鳥 發文於   2019/12/21

小幫手您好

 

我使用while迴圈計算RSI值計算至小於20停止(如下) 選股策略可以正常執行

RSIValue = RSI(Close, 9); 

i=0;

while RSIValue[i] > 20

begin

   i=i+1;

end;

 

但若把while迴圈改為RSI值計算至大於80停止(如下) 就會一直執行無法停止

RSIValue = RSI(Close, 9); 

i=0;

while RSIValue[i] < 80

begin

   i=i+1;

end;

 

另外repeat迴圈則until RSIValue[i] < 20可以執行,until RSIValue[i] > 80同樣出現無法停止

請問這是不是XS迴圈的bug? 請協助除bug 

排序方式: 標準 | 最新
XQ小幫手 發文於   2019/12/24

Hi 程式菜鳥

您好,請您提供您的選股中心匯出檔案(*.DSTX)給小幫手,以利小幫手替您確認。

因為不確定您想要在選股腳本內判斷什麼資料,再請您詳述,謝謝。

因為選股中心的報價資料屬於序列資料,

假設您在12/24日計算RSI(Close, 9),那就會是12/24去計算9天天期的RSI資料

假設您在12/23日計算RSI(Close, 9),那就會是12/23去計算9天天期的RSI資料

再請您詳述您的需求,小幫手再協助您處理,謝謝。

程式菜鳥 發文於   2019/12/24

小幫手您好

謝謝您的回覆,麻煩提供一下您郵件信箱以便寄.DSTX檔

程式菜鳥 發文於   2019/12/28

小幫手

詳述要求如下

附件利用while迴圈寫的選股程式執行後無法停止

請告知原因

附加文件

XQ小幫手 發文於   2020/01/02

Hi 程式菜鳥

小幫手有收到您的問題,但因為問題仍在確認中

非常抱歉造成您的不便,如果有儘快消息,小編會再回覆您。

不過小編有找到您的語法可以做的修改,就可以符合您的需求囉,請您參考,謝謝。

variable: rsiValue1(0),i(0);

//settotalbar(36); 

RSIValue1 = RSI(Close, 5);  //計算RSI值

while RSIValue1[i] > 80


begin
   i=i+1;
end;

Ret = i>0;

 

程式菜鳥 發文於   2020/01/04

小幫手您好

 

謝謝您提供修改的語法

但您修改的策略邏輯與我的完全不同

您修改的是計算rsi持續在80以上的天數,

而我要算的是rsi在80以下的天數.....

 

但 由您提供的語法可以驗證一件事  

while後可以放RSIValue1[i] > 80,但不可放RSIValue1[i] < 80

而且其他技術指標可以,RSI就不行,是不是RSI函數有啥問題?

麻煩撥空確認下

XQ小幫手 發文於   2020/01/07

Hi 程式菜鳥

小幫手與相關人員討論之後,並不建議您用while語法判斷此邏輯

因為XS系統的資料是屬於序列資料,因此也有資料筆數的設定長度。

在您的語法內,

while RSIValue[i] < 80

在一進入while迴圈之後,他就會跑序列資料到完整的資料

但取得第一根bar的時候,就因為取不到值,系統會自動補0進去運算

因此就會永遠<80而進入無窮迴圈

先前提供給您的語法,則是因為取不到值的地方補0之後,RSIValue[i] > 80 是false

才得以繼續運作,是先前小幫手思考不周,請見諒。

--------------------------------------

您可以告訴小幫手您原本想要寫的語法的用意嗎,或許小幫手可以替您思考一個其它的解決方法。

謝謝您的詢問。

發表回覆
Close