如何跨頻率抓20日內"最大成交量"當天的最高價

  •   223 
  • 最後發表   jack121974  2021 四月 19
jack121974 發文於   2020/10/15

請問小幫手,如果是在分鐘頻率下,要如何抓出  <20日內"最大成交量"當天的最高價>,麻煩你了

我是寫value1=xfmin_getvalue("d",highestbar(volume,20),0)

但抓到的資料是20根"分鐘頻率"的最大量所在

麻煩您了

 

 

 

排序方式: 標準 | 最新
jack121974 發文於   2020/10/21

請問小幫手,有看到這個提問嗎 ?

謝謝

XQ小幫手 發文於   2020/10/21

jack121974 您好

因為思考策略需要一些時間

待小幫手有解決方法後會再回覆給您

感謝 

jack121974 發文於   2020/10/22

顯然最近大家的問題很多,小幫手持續燒腦中........

麻煩您了

jack121974 發文於   2021/04/16

請問小幫手,這題有解嗎 ?謝謝

GaryChiang 發文於   2021/04/16

XS 可以在分K頻率下,跨頻率取得資料! 

getField("成交量", "D")

也可以取得其極大值和K棒

Extremes(getField("成交量", "D"),20,1,value1,value2);

其中, value1 就是成交量最大值, value2 就是成交量最大值對映的K棒...

但....有這麼簡單就好!

成交量最大值是對的!

但最大值對映的K棒, 因為跨頻率的關係...是錯的!

所以, 必需改寫Extremes函式!

我將它命名為 ExtremesA

setBarMode(1);

input:  

SourceSeries(numericseries), //來源數列

Length(numericsimple), //計算期間

       DscAsc(numericsimple), //極大值(1)或極小值(-1)

refExtremeValue(numericref), //輸出極值

refExtremeBar(numericref);//輸出極值K棒相對位置

 

if 1 > Length then 

begin

  refExtremeValue = 0 ;

  refExtremeBar = -1 ;

  ExtremesA = -1 ;

  return;

end;

 

value1 = SourceSeries;

value2 = 0;

for value3 = 1 to Length - 1

  begin

if DscAsc * SourceSeries[value3] > DscAsc * value1 then

  begin

value1 = SourceSeries[value3];

value2 = value3;

  end;

end;

 

refExtremeValue = value1;

refExtremeBar = value2;

ExtremesA = 1;

 

=== 以上程式

編輯完之後, 就可以用

ExtremesA(getField("成交量", "D"),20,1,value1,value2);

value2 就是你想要的K棒數

highD(value2) 就是你要的答案!

  • 按讚來自於
  • pon404
XQ小幫手 發文於   2021/04/16

Hello jack121974,

 

您可以宣告一個Array儲存近20日的日成交量及日高價。

然後取得裡面最高成交量對應的日高價即可。

這邊提供簡單範例:

 

array: volume_high[20, 2](0);

 

//用volume_high去存近20天的日成交量及日高價

for value1 = 1 to 19 begin

    if value1 = 1 then begin

    volume_high[1, 1] = getfield("Volume", "D");

    volume_high[1, 2] = getfield("High", "D");

    end

else begin

    volume_high[value1 + 1, 1] = getfield("Volume", "D")[value1];

    volume_high[value1 + 1, 2] = getfield("High", "D")[value1];

    end;

end;

 

//找出最高的日成交量及其對應位置

value2 = volume_high[1, 1];

value3 = 1;

for value1 = 2 to 20 begin

    if volume_high[value1, 1] > value2 then begin

value3 = value1;

value2 = volume_high[value1, 1];

end;

    end;

 

print("Date:", date, " Highest Volume:", value2, " Correspond High:", volume_high[value3, 2]);

  • 按讚來自於
  • united7878
jack121974 發文於   2021/04/16

Dear gary63chiang兄,非常感謝您的回覆,小弟就來試試

jack121974 發文於   2021/04/16

Dear 小幫手,非常感謝您的回覆;所以這個在任一分鐘頻率上都可直接用嗎 ?

jack121974 發文於   2021/04/17

gary63chiang兄您好,當我按下編譯後,出現這段文字:

 

"變數 "ExtremesA" 沒有宣告,請用 Vars: 的方式宣告,冒號後面是變數名稱再用括號填入預設值。例如: Vars:varA(100); 如果要宣告陣列請用 Arrays: 冒號後面是名稱再用 [] 設定維度與大小,括號填入預設值。例如 Arrays:arr1[10](0);。"

想請問是我露了甚麼嗎 ?

 

另外,想請教這是否有辦法變成指標?在副圖中show出來value1  value2,謝謝

 

 

jack121974 發文於   2021/04/17

小幫手您好,當我將腳本用指標畫出時,發現數值不太正確,

例如在4/16 看 2603長榮,其20日來最高量(629635張)及最高價(60.4)都是在4/14,

但當游標移到4/15,卻顯示(589753張)及(47.6元),還請檢查一下,謝謝

GaryChiang 發文於   2021/04/18

你要先建立一個新函式!

XQ小幫手 發文於   2021/04/19

Hello jack121974,

 

原本的腳本 array 設值時昨日的值無法存入導致為0,會再檢查問題原因。

您可以先將腳本改為如此

 

array: volume_high[20, 3](0);

for value1 = 1 to 20 begin

    volume_high[value1, 1] = getfield("Volume", "D")[value1 - 1];

    volume_high[value1, 2] = getfield("High", "D")[value1 - 1];

    volume_high[value1, 3] = getfield("Date", "D")[value1 - 1];

end;

 

value2 = volume_high[1, 1];

value3 = 1;

for value1 = 2 to 20 begin

    if volume_high[value1, 1] > value2 then begin

        value3 = value1;

        value2 = volume_high[value1, 1];

        end;

end;

 

print("Date:", date, " Highest Volume:", value2, " Correspond High:", volume_high[value3, 2], " Correspond Date:", volume_high[value3, 3]);

 

應該就沒有問題了。

感謝。

jack121974 發文於   2021/04/19

可以使用了,多謝gary兄的指點,大感謝!!

發表回覆
Close