交易量判斷及print的問題

  •   240 
  • 最後發表   Buffalo  2021 六月 24
Buffalo 發文於   2021/06/20

小編您好

問題如下:

1.程式裡有寫條件判斷,但不符合條件卻出現訊號(詳細請看附圖)

2.程式裡我也寫print以便debug,在執行欄裡有時很快就顯示有時不會顯示,想說是否為系統bug?還是另有解法

謝謝~

以下是我的程式碼:

 

variable:TNN_volume(0);

input:startdatetime(20210616000000,"開始時間YYYYMMDDHHMMSS"),enddatetime(20210620120000,"結束時間YYYYMMDDHHMMSS");

 

TNN_volume=GetSymbolField("TNN*1.SG", "成交量","1");

 

if TNN_volume >= 200 and datetime>=startdatetime and datetime<=enddatetime  

then 

begin

plot1(close,"超過200口");

plot2(TNN_volume,"成交量");

end;

 

print(datetime,"datetime");

print(startdatetime,"startdatetime");

print(enddatetime,"enddatetime");

print(TNN_volume,"volume"); 

 

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

Hello Buffalo,

 

小幫手用您的腳本測試,一樣是在 TNN*1.SG 6/19 05:14 這個時間點沒有發生您所說的問題。(參考附圖)

請問您關掉重開後還有發生一樣的狀況嗎?

如果有的話需要麻煩您提供 頁面匯出檔包含腳本,以及XQ Log 來檢視問題原因。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

 

另外,執行欄顯示是當您指標建置計算完成後才會顯示。

所以有時您CPU使用度高時可能會比較慢。

附加文件

Buffalo 發文於   2021/06/22

小幫手您好

1.針對第一點我星期一開盤後就沒有這問題,所以我現在也無法提供您Log檔,需要等週末再測試看看,我想有可能是週末系統的時間關係導致的bug,可能再請您反映給工程師

2.針對以下程式碼1分K畫出的成本線如何把相同的值顯示在日K或其他分K,且我切換其他分K時成本會根據不同分K算出不同成本,照理說我的是針對1分K去計算應該要一樣才對!

麻煩您了,謝謝~

variable:TNN_volume(0),price_average(0),price_multiply_volume(0),TNN_sum(0),volume_sum(0),cost(0),count(0);

input:startdatetime(20210618150000,"開始時間(YYYYMMDDHHMMSS)"),enddatetime(20210619000000,"結束時間(YYYYMMDDHHMMSS)"),volumelimit(200,"多少口以上");

array:ArrayTNN[](0),Arrayvolume[](0);

 

TNN_volume=GetSymbolField("TNN*1.SG", "成交量","1");

 

if TNN_volume >= volumelimit and datetime>=startdatetime and datetime<=enddatetime  

then 

begin

count=count+1;  //紀錄筆數

array_SetMaxIndex(ArrayTNN,count);//設定平均乘成交量矩陣大小

array_SetMaxIndex(Arrayvolume,count);//設定成交量矩陣大小

price_average=(GetSymbolField("TNN*1.SG", "開盤價", "1")+GetSymbolField("TNN*1.SG", "收盤價", "1")+GetSymbolField("TNN*1.SG", "最高價", "1")+GetSymbolField("TNN*1.SG", "最低價", "1"))/4;

price_multiply_volume=price_average*TNN_volume;

ArrayTNN[count]=price_multiply_volume; //紀錄平均乘成交量

Arrayvolume[count]=TNN_volume;//紀錄成交量

plot1(close,"超過200口");

plot2(TNN_volume,"成交量");

end;

 

 

//計算主力成本

TNN_sum=array_Sum(ArrayTNN,1,count);

volume_sum=array_Sum(Arrayvolume,1,count);

 

if volume_sum<>0

then

begin

cost=TNN_sum/volume_sum;

plot3(cost,"主力成本線");

end;

XQ小幫手 發文於   2021/06/24

Hello Buffalo,

 

您之所以會不一樣是因為只取到當根 Bar 的1分鐘資料。

舉例來說,假設您用在 30分鐘 跟 60分鐘好了,10:00 這跟Bar完成時,30分鐘是 10:00 - 10:30,而60分鐘是 10:00 - 11:00 (XQ的時間是指Bar開始的時間)。

所以您在使用 GetSymbolField("TNN*1.SG", "成交量","1") 的時候,在30分鐘是代表 10:29 - 10:30 這段時間的資訊,而60分鐘是代表 10:59 - 11:00 的資訊。

算出來自然不一樣。

 

另外需注意的一點:

GetSymbolField("TNN*1.SG", "成交量","1")[1];

TNN_volume=GetSymbolField("TNN*1.SG", "成交量","1");

TNN_volume[1];

是不一樣的。

依上面的例子,30分鐘頻率的10:00這根Bar

GetSymbolField("TNN*1.SG", "成交量","1")[1] 代表的是 10:28 - 10:29 的成交量。(往前一分鐘的成交量)

而 TNN_volume[1] 代表的是 09:59 - 10:00 的成交量。(30分鐘頻率往前一根的一分鐘成交量)

 

那麼要抓 30分鐘頻率 10:00 這根 Bar 的 1分鐘累積成交量,跟 1分鐘平均成交量 可以用迴圈去抓前幾期的值並加總。

附上參考用的指標腳本,您可以觀察print出來的資訊。

 

額外在補充,如果您用的是日頻率以上的資料,time一律是 0,所以您需要用其他的方式去做迴圈限制,例如改用 getfield("Date", "1")。

附加文件

發表回覆
Close