關於while的運用

  •   263 
  • 最後發表   risk  2022 六月 16
risk 發文於   2022/05/25

小幫手你好~

小弟想寫出找到今日最低價為近期第九根最低價的個股(如圖),迴圈運用為小弟第一次練習,篩選後亮紅燈顯示"連線逾時",應該是小弟邏輯上有誤,修改之後仍找不出問題,請教小幫手或高手們小弟問題是出在哪 ? 謝謝

var:period(0),count(0);
count=0;
while low = lowest(low,period+2)
begin
count=count+1;
end;
if count=9 then ret=1;

 

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

Hello risk,

 

您腳本中的錯誤應該是因為發生無限迴圈的狀況。

由於您的period不會變,所以 lowest(low,period+2) 會是相同數值。

只要一發生 low = lowest(low,period+2) 的狀況,就會進入無窮迴圈。

另外,由於lowest是省效能的函數,所以在第二個參數會變動時有可能會出錯,建議您使用simplelowest。

 

小幫手會建議您使用Array紀錄最近的最低價。

然後當最近的最低價是近九個最低價中最低的那個的時候就是符合您的條件。

這樣就不用使用while迴圈,效能會更好。

risk 發文於   2022/06/01

感謝小幫手的建議,小弟不知該如何用Array寫出找出第9根新低價的程式(自己寫了幾次都不行),可否請小幫手寫一個範例供小弟參考,謝謝

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

Hello risk,

 

您需要先定義最低價,是近幾期的最低價。

舉例來說,若該根low為近5期最低的話就納入紀錄的話:

array: _record[9](0);

 

if low = lowest(low, 5) then begin    

    array_copy(_record, 1, _record, 2, 8);   //將近8筆最低價資訊向後移動1格

    _record[1] = low;    //紀錄最新1筆近5期最低價在位置1

    if _record[9] <> 0 and LowestArray(_record, 9) = _record[1] then ret = 1;    //若陣列中有9筆資料,且最新1筆最低價為9筆中最低的話就警示。

    end;  

risk 發文於   2022/06/12

謝謝小幫手

      小弟再研究array 與 record的用法,但查xs函數好像沒有單純 record函數,都是FilledRecordXXX..........等七種,就先從這七種下手,再次感謝小幫手^^

 

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

Hello risk,

 

_record 只是個陣列名稱,跟 FilledRecord... 等函數沒有關係,上面的回覆也只有運用到Array相關的函數。

您可以把他替換成 NumArray 或任何您喜歡的名字來宣告。

 

發表回覆
Close