XS 使用報價欄位&資料欄位 取"價"的問題

  •   1.3K 
  • 最後發表   阿良  2018 九月 13
阿良 發文於   2018/08/31

我有幾個關於盤中當沖警示的腳本關於取價的問題條列如下:

1.盤中警示我要用到當日目前最高價用報價欄位的DailyHigh 跟使用資料欄位的High 回傳的是一樣的嗎?

2.我要取得昨高跟昨低是用High[1] 跟Low[1]嗎?

3.承上1,2 ,我要簡單的警示股價創當日新高的條件,應該不能用if ( Last > DailyHigh )吧?

而是要用之前你們的教學:

XS警示腳本撰寫 盤中指定時間後的創高(當沖)

裡面提到的,需要用一個變數_high 來紀錄當日高點,然後再用if ( Last > _high )吧?

4.承 3.,那篇文章的教學裡面提到用變數來紀錄最高價在一般我們寫程式的認知很平常的事,

可是那個初始化的var:_high(0),不會把紀錄的的最高價洗掉歸零?我不大清楚警示腳本運作

模式@@ 抱歉,因為我也是寫程式的,深怕邏輯謬誤…

5.來這邊po文發問好麻煩@@,你們有客服電話,可以直接在上班的盤後時間致電問你們比較快嗎?

 

以上~~

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2018/08/31

Hi 阿良,

1.盤中警示我要用到當日目前最高價用報價欄位的DailyHigh 跟使用資料欄位的High 回傳的是一樣的嗎?

不太一樣唷,報價欄位的DailyHigh,是傳回當日的最高價;資料欄位的High,是傳回資料的最高成交價位,

也就是要看策略雷達的執行頻率而定。所以若執行頻率是日,則會與報價欄位的DailyHigh一樣。


我要取得昨高跟昨低是用High[1] 跟Low[1]嗎?

同 1. 所述,因 High、Low 是要看策略雷達的執行頻率而定,故若執行頻率是日,則可以使用High[1] 跟Low[1]來表達昨高跟昨低;

但如果執行頻率是分K,則要使用 GetField 跨頻率來取資料,例如:

value1 = GetField("最高價","D")[1];   //跨頻率取昨日高

 

3.承上1,2 ,我要簡單的警示股價創當日新高的條件,應該不能用if ( Last > DailyHigh )吧?

應該是可以的,應該能用 if 判斷 q_last >= q_dailyhigh 的狀況下觸發警示。


 

初始化的var:_high(0),不會把紀錄的的最高價洗掉歸零?

var:_high(0) 在 XS 語法中,並不是初始化的意思,而是宣告 _high 此變數為 0,故不會把紀錄的最高價洗掉歸零。


 

5.來這邊po文發問好麻煩@@,你們有客服電話,可以直接在上班的盤後時間致電問你們比較快嗎?

XS相關問題,較複雜,需要知道使用者撰寫的腳本語法,以及使用者的策略想法,分析是否使用者的想法與撰寫的語法是否有落差?

腳本語法有無地方寫錯?相關UI設定有無問題?...等等,故需要來信或發文提問,經過相關人員分析一段時間,才能嘗試解決您的問題。

 

以上說明,謝謝。

阿良 發文於   2018/09/06

Hi... 我繼續試了盤中價創新高,搭配過昨天前天高& 量的警示大致了一下有兩個情況:

先列下面第1個,我聽從你的用_high & _low 來紀錄今高、今低,然後後面跑了一陣子

發現它腳本在讀完後,_high 的值就定了紀錄應該是啟動完後的53.2,然後都不會更新

參考附件的log(1515-20180905.txt ,它就變成價格大於53.2然後就一直觸發,我要的

是價創高才觸發

variable:Est_Vol(0);                 Est_Vol = GetQuote("EstimatedTotalVolume"); //取得預估量
variable:Pre_Vol(0);                 Pre_Vol = GetQuote("PreTotalVolume"); ; //取得昨量
input:Estimate_vol_times(1.5);       setinputname(1,"預估量倍數");

variable:_high(q_DailyHigh);                                           //今高
variable:_low(q_DailyLow);                                             //今低
// 三日內高低

if (Pre_Vol >300 )
then
begin
    if ((Est_Vol >= Estimate_vol_times*Pre_Vol) and (q_last > _high))
    then 
    begin
     _high = q_DailyHigh;
     if(q_last > High[1] and q_last > High[2])
     then
         begin
         ret = 1;
         retmsg = Text("創高量增三日高");
         end
     else if(q_last > High[1])
     then
         begin
         ret = 1;
         retmsg = Text("創高量增過昨高");
         end
     else
         begin
         ret = 1;
         retmsg = Text("創高量增");
         end;
     end;

end;

 

附加文件

阿良 發文於   2018/09/06

奇怪,不能上傳文字檔,我傳截圖

阿良 發文於   2018/09/06

附上雷達設定

阿良 發文於   2018/09/06

然後我試了你用q_last >= q_dailyhigh  這個來做條件:

它的問題是,它是拿目前成交價大於等於最高價,所以當價格一直在最高價的同一價位,它也會連續警示

在XQ的報價系統架構下,當創高,成交價一定是最高價,我要如何達到我要的目的呢?價創新高才提示

就像即時選股的"股價當日新高股" 的一樣

這個功能看似簡單,怎麼用腳本寫好像很難實踐@@,到底能不能用變數把最高價紀錄起來,然後下次洗價時去比呢?

如果我要紀錄委買賣的大單變化,應該也是要用這些變數來暫存吧@@…

 

variable:Est_Vol(0);                 Est_Vol = GetQuote("EstimatedTotalVolume"); //取得預估量
variable:Pre_Vol(0);                 Pre_Vol = GetQuote("PreTotalVolume"); ; //取得昨量
input:Estimate_vol_times(1.5);       setinputname(1,"預估量倍數");

// 三日內高低
if (Pre_Vol >300 )
then
begin
 if ((Est_Vol >= Estimate_vol_times*Pre_Vol) and (q_last >= dailyhigh))
 then
  begin  
  if(q_last > High[1] and q_last > High[2])
  then
   begin
   ret = 1;
      retmsg = Text("創高量增三日高");
      end
  else if(q_last > High[1])
  then
   begin
   ret = 1;
      retmsg = Text("創高量增過昨高");
      end
  else
   begin
   ret = 1;
      retmsg = Text("創高量增");
      end;
     end
 else if ((Est_Vol >= Estimate_vol_times*Pre_Vol) and (q_last < value2-0.01) )
 then
  begin
  value2 = q_DailyLow;
  if((q_last < Low[1]) and (q_last < Low[2]) )
  then
   begin
   ret = 1;
      retmsg = Text("創低量增三日低");
      end
  else if(q_last < Low[1])
  then
   begin
   ret = 1;
      retmsg = Text("創低量增破昨低");
      end
  else
   begin
   ret = 1;
      retmsg = Text("創低量增");
      end;
     end;
end;

XQ小幫手 發文於   2018/09/07

Hi 阿良,

您好,小幫手查看您的 09/06 程式碼,與 09/06 的 1515-20180905 紀錄,再搭配技術分析Tick圖查看,

發現您的  _high 雖然有用 _high = q_DailyHigh; 去做紀錄,但沒納入在 if 判斷 close > _high 的狀況下去做觸發,

且觸發警示訊號的 if 判斷是 High[1] 與 High[2] 在執行頻率為日資料頻率的狀況下,

High[1] 表示 09/04 的最高價 52.8元,High[2] 表示 09/04 的最高價 48.1元,

觀察您提供的截圖觸發紀錄,成交價都是大於 52.8元 與 48.1元的,所以就一直觸發,


 

用變數把最高價紀錄起來,然後下次洗價時去比呢?

在這篇文章中 XS警示腳本撰寫 盤中指定時間後的創高(當沖) 有明確定義要記錄哪一段時間的最高價,

然後過了這段時間後,再用 close 去跟紀錄的最高價,洗價去相比。

 

請您先定義您要記錄哪一段時間的最高價?定義好後再去做撰寫,可能會比較妥當,

以上方向供參考,謝謝。

P.S. 若沒有指定哪段時間的話,High 即是執行資料頻率的最高價,不用去使用變數做紀錄。

 

阿良 發文於   2018/09/11

 Hi 小幫手… 我再試了一次最簡單的,不牽扯過去的判斷式,單就當天要抓創新高新低的個股,程式簡單如下:

再搭配print 來列印當下的_high & _low 的值,我看到的結果是如我最當初的質疑,變數的宣告按你們XS的規

則一定會給予初值,然後我每次去變動該變數,做了運算,但是在下一次腳本的執行時,該變數又會初始化

成原本那個值,這麼一來,我要如何儲存我需要的暫成變數來做其它運用呢? 困擾了真久 @@

variable:_high(q_DailyHigh);
variable:_low(q_DailyLow);
print("Before if q_Last: ",q_Last,"_high: ",_high,"_low: ",_low,"Day high:",q_DailyHigh,"Day low:",q_DailyLow);

if (q_Last > _high)
then
    begin
    _high = q_DailyHigh;
    print("After q_Last > _high: q_Last: ",q_Last,"_high: ",_high);
    ret = 1;
    retmsg = Text("股價創當日新高");
    end
else
    if (q_Last < _low)
    then
    begin
    _low = q_DailyLow;
    print("After q_Last < _low: q_Last: ",q_Last,"_low: ",_low);
    ret = 1;
    retmsg = Text("股價創當日新低");
    end;

麻煩參考一下我的LOG檔

20180911

XQ小幫手 發文於   2018/09/11

Hi 阿良,

您好,應該可以試試看使用 IntrabarPersist 語法,應該就能記錄 _high 與 _low,相關說明可以參考連結網頁說明,

若是針對盤中執行,可以用 if 搭配 getinfo 判斷,來針對盤中執行,

最後,應該使用 once 語法來記錄初次的 _high 與 _low 變數,

 

小幫手嘗試修改後的程式碼範例如下,先提供給您參考,您可以先試試看,謝謝。

variable:IntrabarPersist _high(0);
variable:IntrabarPersist _low(0);
print("Before if q_Last: ",q_Last,"_high: ",_high,"_low: ",_low,"Day high:",q_DailyHigh,"Day low:",q_DailyLow);

if getinfo("IsRealTime") <> 1 then    return;

once(true) begin
    _high = q_DailyHigh;
    _low = q_DailyLow;
end;

if (q_Last > _high)
then
    begin
    _high = q_DailyHigh;
    print("After q_Last > _high: q_Last: ",q_Last,"_high: ",_high);
    ret = 1;
    retmsg = Text("股價創當日新高");
    end
else
    if (q_Last < _low)
    then
    begin
    _low = q_DailyLow;
    print("After q_Last < _low: q_Last: ",q_Last,"_low: ",_low);
    ret = 1;
    retmsg = Text("股價創當日新低");
    end;

阿良 發文於   2018/09/12

Hi  小幫手 …

可以了,謝謝啦,就是要這種變數的特殊屬性的宣告啦~~

對了,除了這種像是C 語言靜態變數的東西不隨著腳本的洗價重新設定初值…。 不曉得XS 有沒有那種靜態全域變數的東西?

就是可以讓該腳本下的所有執行的標的共同存取的變數?有些想法類似類股或族群連動的強弱指標設計需要那種共用變數來做

counter,單純只有腳本參照商品好像沒有辦法滿足我的想法…

不管怎樣還是先謝謝…

XQ小幫手 發文於   2018/09/13

Hi 阿良,

您好,XS 無全域變數的語法,也就是沒有可以讓該腳本下的所有執行的標的共同存取的變數,

以上說明,謝謝您的詢問。

發表回覆
Close