盤中警示,如何設定A商品(股期標的),下B商品(股票期貨)
盤中警示,如何設定A商品(股期標的),下B商品(股票期貨)
- 764
- 最後發表 alpa 2023 七月 28
alpa 您好
您可以在腳本中以 getsymbolfield的方式抓取指定股票的數值
像是GetSymbolField("2330.TW","收盤價","D")
請參考該函式的介紹
https://xshelp.xq.com.tw/XSHelp/?HelpName=GetSymbolField&group=FIELDFUNC
這部分就是設定商品A
-------------
而撰寫完成後,您只要在雷達上選擇"股期" 就是指定商品B下單了

所以,XQ目前無法針對所有股期商品,做盤中策略雷達下單,只能針對單一股期商品?
XQ大大您好:小弟有一程式(盤中策略雷達),以5分鐘頻率執行,程式中有跨頻率60分鐘;但是一直都沒有觸發商品,不知道程式哪裡有錯?可否麻煩指正,謝謝! 程式如下:
variable:rsv_60(0),kk_60(0),dd_60(0),jj_60(0); //60分KD
value1 = xfMin_XAverage("60",GetField("Close","60"),30); //計算60分鐘線30ma
value2 = xfMin_XAverage("60",GetField("Close","60"),60); //計算60分鐘線60ma
value3 = xfMin_XAverage("60",GetField("Volume","60"),5); //計算60分鐘線5mv
value4 = xfMin_GetValue("60",volume,1); //計算60分鐘線Volume
xfMin_Stochastic("60",9,3,3,rsv_60,kk_60,dd_60);
condition1= xfMin_CrossOver("60",kk_60,dd_60);
value5 = xfMin_GetValue("60",kk_60,1) ;
value6 = xfMin_GetValue("60",dd_60,1) ;
condition2= value5 <= 50 ;
condition3= value6 <= 50 ;
input: x(7) ; //漲幅 %
input: y(50) ; //量增率 %
input: length(5);
variable:vi(0);
vi= q_EstimatedTotalVolume; //q_EstimatedTotalVolume 為內建預估量
input:Leng1(5),Leng2(10),Leng3(30),Leng4(60);
variable: ma5(0), ma10(0),ma30(0), ma60(0);
variable:volume5(0) ;
ma5 = average(close, Leng1);
ma10 = average(close, Leng2);
ma30 = average(close, Leng3);
ma60 = average(close, Leng4);
volume5=average(volume, 5);
input: Length1(9), RSVt(3), Kt(3);
variable: rsv(0), k(0), _d(0);
Stochastic(Length1, RSVt, Kt, rsv, k, _d);
if vi >600 and q_Last <= q_RefPrice *(1 + x/100) and k cross Above _d and k <= 50 and _d <= 50
and condition1 and condition2 and condition3 and value4 >= value3*3
then
ret=1;
Hello alpa,
您可以在腳本中使用print計算相關數據來確認運算情況。
舉例來說:
print(date, time, vi >600, q_Last <= q_RefPrice *(1 + x/100), k cross Above _d, k <= 50, _d <= 50, condition1, condition2, condition3, value4 >= value3*3);
您的 value4 >= value3*3 條件感覺有點奇怪,如果要取60分鐘成交量的話,應該是使用getfield("volume", "60")才對。
value4 = xfMin_GetValue("60",volume,1); 取到的會是上根60分鐘頻率時最後一根5分鐘的成交量。
所以 value4 >= value3*3 會是5分鐘成交量與60分鐘成交量的指數平均乘以3比較,應該很難達成。
另外您在計算時資料讀取筆數可能不夠。
xfMin_XAverage 計算的不是移動平均(ma),是指數移動平均(ema)。
指數移動平均需要大約4倍的前期值才能得出正確結果,由於您是5分鐘頻率跨60分鐘頻率,小幫手會建議您設定 settotalBar((60+1) * 4 *12); 才夠。
同理KD的也是如此,需要的筆數可以參考選股腳本,您的狀況應該會是 (9 * 3 * 12),比指數平均所需的筆數還要少,所以不用另外設定。
謝謝!
XQ大大您好:小弟有一程式(盤中策略雷達),以5分鐘頻率執行,成交價高於條件K棒之最高價,觸發
但觸發價不是想要的價位,不知程式哪裡有錯?可否麻煩指正,謝謝! 程式如下:
condition1=false;
input: x(5) ; //漲幅 %
input: y(50) ; //量增率 %
input: length(5);
variable:vi(0);
variable: xHigh1(0) ;
vi= qEstimatedTotalVolume; //qEstimatedTotalVolume 為內建預估量
if close[1] > qRefPrice *(1 + x/100) and close[1] >500 then return;
if vi > qPreTotalVolume * 2
and close[1] >= 5 and close[1] >= qRefPrice *1.025 and volume[1] >30 and volume[1] > highest(volume[2],162)
and close[1] <= qRefPrice (1 + x/100) and average(GetField("Volume","D"),5)>100
and vi > highest(GetField("Volume","D")[1],length)(1+y/100) and xHigh1 = high
then
condition1=true ;
//=================
value1=barslast(condition1) ;
if value1 <> currentbar and vi > 2000
and qLast >= qRefPrice *1.025 and qLast <= qRefPrice *(1 + x/100) and q_Last > xHigh1
then ret=1;
Hello alpa,
小幫手不知道您想要的觸發價位是什麼,觸發條件是什麼,所以很難找出腳本錯誤的原因。
建議您可以使用 print 函數將條件相關數值印出,確認運算是否有如您所想一樣的運作。
如果還是有問題,麻煩您提供 策略雷達匯出檔勾選(包含)警示腳本,並詳細描述遇到的問題情況和需求條件,讓小幫手確認。
您可以直接將檔案上傳,也可以Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。
感謝。
XQ大大您好:小弟有一程式(盤中策略雷達),以5分鐘頻率執行
settotalBar(200);
input: x(5) ; //漲幅 %
input: y(50) ; //量增率 %
input: length(5);
variable:vi(0);
vi= q_EstimatedTotalVolume; //q_EstimatedTotalVolume 為內建預估量
if close[1] > q_RefPrice *(1 + x/100) and close[1] >500 then return;
condition1 = vi > qPreTotalVolume *2
and close[1] >= 5 and close[1] >= qRefPrice 1.025 and volume[1] >30 and volume[1] > highest(volume[2],162)
// 往前推3日(5分K棒,共162根K棒)
and close[1] <= q_RefPrice *(1 + x/100) and average(GetField("Volume","D"),5)>100
and vi > highest(GetField("Volume","D")[1],length)(1+y/100) ;
if condition1
then begin
value1 = high ; //紀錄符合條件K棒之最高價
end ;
value2=barslast(condition1) ;
if value2 <> currentbar and vi > 2000
and qLast >= qRefPrice *1.025 and qLast <= qRefPrice *(1 + x/100) and qLast > value1 and qLast = q_DailyHigh
then ret=1;
Hello alpa,
您可以將條件中使用的數值和 value1 print出來檢查看是否有如同您想像中的運作。
小幫手推測可能是因為您使用逐筆洗價,所以value1和value2不會保存在K棒中符合條件時的數值。
您可以將所使用的變數宣告為 intrabarpersist,這樣就可以在同根Bar洗價的時候保留符合條件時的數值。
另外需注意, highest/lowest 在計算跨頻率的時候有可能會出錯,所以小幫手會建議您遇到這樣的情況改使用 simplehighest / simplelowest。
不過您這邊的使用的方式應該不會計算錯誤。
還有可以將報價欄位改為資料欄位 (ex. q_EstimatedTotalVolume 改為 GetField("估計量")),這樣就可以在回測上作測試。
如果還是有問題,麻煩告知您覺得有問題的日期時間商品和應該有的數值,讓小幫手確認是資料有誤還是腳本撰寫的方式有問題。
感謝。
Hello alpa,
您可以用變數來記錄當天經過幾根Bar,接著在取用 highest 的時候套入該數值。
舉例來說:
if issessionfirstbar then value1 = 1 else value1 +=1;
highest(volume[value1], 162) 就會是不包含當日的162根5分鐘Bar。
13 評論