語法bug請教

  •   253 
  • 最後發表   ChaosFractal  2020 六月 27
ChaosFractal 發文於   2020/06/09

我預期變數upCnt、downCnt最大不超過4,但結果卻會超過,想請教我語法哪邊寫錯?

腳本目的,統計當天突破/跌破均線數量

Input: 
direction(0, "類型(0不限 1多方 2空方)");

var:upCnt(0);
var:downCnt(0);

// 統計長紅突破均線數
if close > Average(close, 5) and open < Average(close, 5) then upCnt = upCnt + 1; // 突破5MA
if close > Average(close,10) and open < Average(close,10) then upCnt = upCnt + 1; // 突破10MA
if close > Average(close,20) and open < Average(close,20) then upCnt = upCnt + 1; // 突破20MA
if close > Average(close,60) and open < Average(close,60) then upCnt = upCnt + 1; // 突破60MA

// 統計長黑跌破均線數
if close < Average(close, 5) and open > Average(close, 5) then downCnt = downCnt + 1; // 跌破5MA
if close < Average(close,10) and open > Average(close, 10) then downCnt = downCnt + 1; // 跌破10MA
if close < Average(close,20) and open > Average(close, 20) then downCnt = downCnt + 1; // 跌破20MA
if close < Average(close,60) and open > Average(close, 60) then downCnt = downCnt + 1; // 跌破60MA


outputfield1(upCnt,"突破均線數");
outputfield2(downCnt,"跌破均線數");

Ret = (upCnt>=3 and direction <> 2) or (downCnt>=3 and direction <> 1);

以3701大眾控為例,突破均線數應為0,跌破均線數2但outputfield結果卻是突破均線數12 跌破4 ,數量感覺很異常,想請教一下我哪邊語法有誤??

感恩

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

Hi ChaosFractal

建議您把資料讀取範圍筆數增加至60,因為看見腳本有計算

Average(close,60)

需要有足夠的資料讀取筆數,系統運算才會正常喔~

以上說明,謝謝。

ChaosFractal 發文於   2020/06/17

請問一下,資料讀取範圍筆數增加至60,是這樣嗎?

settotalbar(1); // 我只要計算當天就好
SetBackBar(60); // 因應Average(close,60)而設定

 

XQ小幫手 發文於   2020/06/18

Hi ChaosFractal,

請問一下,資料讀取範圍筆數增加至60,是這樣嗎?

settotalbar(1); // 我只要計算當天就好

SetBackBar(60); // 因應Average(close,60)而設定

優秀,這樣撰寫 OK 與 settotalbar(60); 跑出來的結果相同,以上說明,謝謝。

 

ChaosFractal 發文於   2020/06/18

再詢問一下,我把腳本調整了一下,但不知道為什麼昨日20MA( Average(close,20)[1] )竟然都是0 ?

Input: 
direction(0, "類型(0不限 1多方 2空方)");

settotalbar(1); // 我只要計算當天就好
SetBackBar(61); // 因應Average(close,60)[1] 而設定60+1


var:cnt(0); // 執行次數
var:upCnt(0); // 紅棒突破均線數量
var:downCnt(0); // 黑棒跌破均線數量
var:ma5(Average(close, 5)); // 5 MA
var:ma10(Average(close,10)); // 10 MA
var:ma20(Average(close,20)); // 20 MA
var:ma20prev(Average(close,20)[1]);//昨日月線
var:ma60(Average(close,60)); // 60 MA 季均線
var:ma20d(""); // 月線方向
var:kcolor(""); // K棒顏色


cnt = cnt +1;// 執行次數+1

// 長紅突破均線數
if close > ma5 and open < ma5 then upCnt = upCnt + 1; // 突破5MA
if close > ma10 and open < ma10 then upCnt = upCnt + 1; // 突破10MA
if close > ma20 and open < ma20 then upCnt = upCnt + 1; // 突破20MA
if close > ma60 and open < ma60 then upCnt = upCnt + 1; // 突破60MA

// 長黑跌破均線數
if close < ma5 and open > ma5 then downCnt = downCnt + 1; // 跌破5MA
if close < ma10 and open > ma10 then downCnt = downCnt + 1; // 跌破10MA
if close < ma20 and open > ma20 then downCnt = downCnt + 1; // 跌破20MA
if close < ma60 and open > ma60 then downCnt = downCnt + 1; // 跌破60MA

// 月線方向判斷
if ma20 > ma20prev then ma20d="上升";
if ma20 < ma20prev then ma20d="下跌";

// K棒顏色
if close > open then kcolor = "紅";
if close < open then kcolor = "黑";

outputfield1(upCnt,"突破均線數");
outputfield2(downCnt,"跌破均線數");
outputfield3(ma20d,"月線方向");
outputfield4(kcolor,"K棒顏色");

outputfield5(ma5,"5MA");
outputfield6(ma10,"10MA");
outputfield7(ma20,"20MA");
outputfield8(ma20prev,"昨20MA");
outputfield9(ma60,"60MA");
outputfield10(close,"收盤");
outputfield11(open,"開盤");
outputfield12(cnt,"執行次數");

Ret = (upCnt>=3 and direction <> 2) or (downCnt>=3 and direction <> 1);

還有XScrip介面有一個叫做執行的地方,這個地方要怎麼使用?

 

  • 按讚來自於
  • SEJU0313
XQ小幫手 發文於   2020/06/22

Hi ChaosFractal,

不知道為什麼昨日20MA( Average(close,20)[1] )竟然都是0

請將 var 宣告部分,改為以下語法,再試試看,

var:ma20prev(Average(close[1],20));//昨日月線

 

還有XScrip介面有一個叫做執行的地方,這個地方要怎麼使用?

XScrip介面有一個叫做執行的地方,是給XS指標與XS警示雷達用,

當盤中加入XS指標至技術分析圖或執行雷達時,會隨著K線資料成長,將 Print 語法內的資料數據,顯示在此地,

 

以上說明與方向供您參考,謝謝。

 

ChaosFractal 發文於   2020/06/27

 感恩解惑,謝謝您

  • 按讚來自於
  • b24524658
發表回覆
Close