盤中計算商品組合平均漲跌幅

  •   16 
  • 最後發表   WIJU0509  13 小時前
WIJU0509 發文於   2026/03/06

在執行以下腳本時

如何讓 v___ 紀錄到每檔的第一筆進迴圈計算的tick序號?

目前執行遇到的問題:

1. v___ 只能記錄到第一檔執行商品第一筆的tick序號

2. 如何抓取漏tick的資料

腳本如下:

-----------------------------------------------------------------------

input:mygroup(group,"股池");

var: mygroupsize(0),i(0);

var:intraBarPersist groupratio(0);

mygroupsize=groupSize(mygroup);

var:intraBarPersist v___(0);

var: intraBarPersist v1(0);

if GetSymbolInfo("買賣現沖")=false then return;

if getinfo("isrealtime")=0 then return;

if date<>date[1] then 

   begin

         groupratio=0;

         flag=false;

         v___=0;

   end;

 

for i=1 to mygroupsize 

   begin

         //計算每檔第一筆進來的tick平均漲跌幅

      if  v___=0 and i<= mygroupsize then

         begin

            groupratio +=(getsymbolField(mygroup[i], "收盤價","tick")-getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize;

            v___=getsymbolField(mygroup[i], "當日序號", "Tick");

            print("1",v___,v1,groupratio,getsymbolField(mygroup[i], "收盤價","tick"),getsymbolField(mygroup[i], "收盤價","tick")[1]);

   end;

      //每新一筆tick進來重新計算平均漲跌幅

      if v___<>0 and islastBar and v1<>0  and getsymbolField(mygroup[i], "當日序號", "Tick")-v1=1 then

         begin

            groupratio +=(((getsymbolField(mygroup[i], "收盤價","tick")-getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize)-((getsymbolField(mygroup[i], "收盤價","tick")[1]-            getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize));

            v1=getsymbolField(mygroup[i], "當日序號","tick");

         end;

         //漏tick則略過漏tick的資料重新計算平均漲跌幅

      if v___<>0 and islastBar and v1<>0 and getsymbolField(mygroup[i], "當日序號", "Tick")>v___ and getsymbolField(mygroup[i], "當日序號", "Tick")-v1>1 then

         begin

            groupratio +=(((getsymbolField(mygroup[i], "收盤價","tick")-getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize)-((getsymbolField(mygroup[i], "收盤價","tick")[getsymbolField(mygroup[i], "當日序號", "Tick")-v1]-getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize));

            v1=getsymbolField(mygroup[i], "當日序號","tick");

         end;

print("4",file("d:\print\"),v___,v1,getsymbolField(mygroup[i], "收盤價","tick"),getsymbolField(mygroup[i], "收盤價","tick")[1],getsymbolField(mygroup[i], "當日序號","tick"),v1[1]);

   end;

 print(CurrentTimeMS,symbol,symbolName,"股池平均漲跌幅:"+numtoStr(groupratio,2),"個股漲跌幅"+numtoStr(q_PriceChangeRatio,2),mygroupsize,i);

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/03/06

宣告一個變數mytime

var: intrabarpersist mytime(0);

將date<>date[1]改成time<>mytime,並在begin end之間加入mytime=time;

 

 

  • 按讚來自於
  • WIJU0509
WIJU0509 發文於   2026/03/06

謝謝教授

再請問教授修改成以下這樣就好了嗎?

修改如下:

input:mygroup(group,"股池");

var: mygroupsize(0),i(0);

var:intraBarPersist groupratio(0);

mygroupsize=groupSize(mygroup);

var:intraBarPersist flag(false);

var:intraBarPersist v___(0);

var:intraBarPersist v1(0);

var:intraBarPersist mytime(0);

if GetSymbolInfo("買賣現沖")=false then return;

if getinfo("isrealtime")=0 then return;

if mytime<>time then 

   begin

      groupratio=0;

   end;

 

for i=1 to mygroupsize 

     begin

         groupratio +=((getsymbolField(mygroup[i], "收盤價","tick")-getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize);

         mytime=time;

      end;

虎科大許教授 發文於   2026/03/06

If mytime<>time then 

   begin

      groupratio=0; 

mytime=time;

for i=1 to mygroupsize 

     begin

         groupratio +=((getsymbolField(mygroup[i], "收盤價","tick")-getsymbolField(mygroup[i], "參考價","D"))/getsymbolField(mygroup[i], "參考價","D")*100/mygroupsize);

      end;   

      end;

  • 按讚來自於
  • WIJU0509
WIJU0509 發文於   2026/03/06

收到!謝謝教授 我再進行測試~

虎科大許教授 發文於   2026/03/06

需要留意的是,這是洗價商品每根K的第一個Tick時進行的運算。在迴圈中跨商品抓的群組商品Tick,不一定是該商品K棒的第一個Tick。

發表回覆
Close