使用XS警示腳本抓今日兩分K成交量最大的那個成交量

  •   2.2K 
  • 最後發表   Jack  2020 二月 20
Jack 發文於   2017/02/03

大家好:

如果用2分K看盤,商品是小型台指02(FIMTX02.TF)

想要抓今日兩分K,成交量最大的那個成交量

要怎麼做呢?

 

大致分為二個步驟

第一步:先用一個 if 判斷今日,若是今日,則到第二個步驟

第二步:再用一個 if 判斷開盤時間,若是08點45分,則今日最大成交量(Jack先設此變數為 _BigV)為此時的成交量;若否,且成交量大於 _BigV,則 _BigV 為 當根Bar的成交量。

 

XS警示腳本程式碼範例如下:

var:_BigV(0);

if date = currentdate then begin
    if time = 084500 then _BigV = volume
    else if volume > _BigV then _BigV = volume;
end;

print(date,time,_BigV);

 

Note:程式碼範例最後一段的Print,是將相關數值(日期、時間、_BigV)匯出.txt檔案,以便驗證是否正確。

 

Jack 盤後使用單次洗價模式,匯出.txt檔案,驗證此程式碼範例,如圖與附檔。

 

若有問題,歡迎詢問。

附加文件

  • 按讚來自於
  • sushozin
排序方式: 標準 | 最新
sushozin 發文於   2017/04/16

您好,請問想找出最近三日累積最大成交量的價,做為短期壓力的指標,該怎麼思考呢?謝謝

Jack 發文於   2017/04/17

sushozin兄:

不太明白您的意思,是否能詳述?謝謝。

只能猜想,

   1. 詢問策略方向?

   2. 詢問Code 怎麼寫?

   3. 以上皆是。

sushozin 發文於   2017/05/06
sushozin 發文於   2017/05/06

3. 以上皆是。這是精業的分假分量功能,可手動累積一段期間內的累積成交量價表,我的想法是把最近三日的累積最大量的價,當作是支撐或壓力價,像上圖1301三日累積最大量的價是在91元,拉回趨勢中如果收盤價站上這個價,應該可以當作是個買進訊號,如果能用程式算出這個價就好了,可拿來作選股,以前我都是從自選股中,一支一支手動找出這個價來看,效率很差

sushozin 發文於   2017/05/06

分價分量功能

Jack 發文於   2017/05/08

Sushozin 兄:

謝謝您的回覆,

我會盡量協助你完成Code部分,不過策略方向,不好意思,我就不予協助了,

因此請你詳細描述一下想撰寫什麼樣功能的程式碼,我會盡量協助。

sushozin 發文於   2017/05/08

謝謝,題目應該是使用XS警示腳本抓最近3日累積日K成交量最大的那個成交價

Jack 發文於   2017/05/18

sushozin 兄,

Code已經完成了,待盤後對過數值,詢問您是否正確,我在提供程式碼範例給你參考,

但是,有以下的限制,先告知你

  • 每天都要調整資料取範圍的日期
  • 不適合跑回測

請你先評估以上限制是否OK,謝謝。

Jack 發文於   2017/05/18

sushozin 兄,

使用XS警示腳本抓最近3日累積日K成交量最大的那個成交價,

 

大致撰寫邏輯如下:

1. 手動調整資料讀取範圍日期,每天記得要調整資料讀取範圍的日期(T+1)

近T日,則資料讀取範圍的日期請選擇包含今日(20170518),往前算的第四個營業日(20170515,資料讀取範圍請設此日期)。

2. 到最新的K棒(Tick)才會跑警示腳本,往回蒐集近三日的Tick收盤價與單量。

3. 第一個While計算檔數價差、近三日收盤價最大值與收盤價最小值

4. 第二個While將單量累計在各個價格中

5. 最後用陣列找出最大累計成交量後,就能找到最近3日累積日K成交量最大的那個成交價。

 

策略雷達屬性設定:

因為我是在盤後跑策略,故使用單次洗價模式,請注意資料讀取務必記得要調整資料讀取範圍的日期(T+1)

近三日,則資料讀取範圍的日期請選擇包含今日(20170518),往前算的第四個營業日(20170515,資料讀取範圍請設此日期)。

 

程式碼範例腳本:

Value1即是,最近3日累積日K成交量最大的那個成交價。

// 每天記得要調整資料讀取範圍的日期(T+1),
//  近T日,則資料讀取範圍的日期請選擇包含今日(20170518),
//  往前算的第四個營業日(20170515,資料讀取範圍請設此日期)。

variable:DateChageFlag(0),while_i(0),MaxClose(0),MinClose(0),DiffClose(0),DiffFlag(0),ArrayIndex(0),for_i(0),MaxVolume(0),MaxVolumeIndex(0);
Array: NumArray[](0);

//  到了最新的K棒(Tick)才Run程式碼
if IsLastBar = false then return;
//  最大值與最小值變數先儲存最新K棒的收盤價
MaxClose = close;
MinClose = close;
//  第一個While
while DateChageFlag < 3
    begin       
        //  計算檔數價差,因為只需要計算一次,故用Flag停止計算
        if DiffFlag = 0 and time[while_i] >= 090000 and time[while_i] <= 132500 and close[while_i] <> close[while_i+1] then 
            begin
                DiffFlag = 1;
                //  檔數價差,需使用絕對值。
                DiffClose = AbsValue(close[while_i] - close[while_i+1]);
            end;
        //  計算近三日最大值與最小值
        if close[while_i] > MaxClose then MaxClose = close[while_i];
        if close[while_i] < MinClose then MinClose = close[while_i];
        //  只要讀取近三日的序列資料,故換日超過兩次,就停止迴圈
        //print(date[while_i],time[while_i],close[while_i]);
        if date[while_i] <> date[while_i+1] then DateChageFlag += 1;
        while_i += 1;       
    end;
//print(date,time,close,while_i);
//print(DiffClose,DiffFlag,"Diff");
//print(Maxclose,Minclose,"MAX_MIN");
//  計算陣列有幾個差距(近三日最大值-最小值後,再除以檔數價差)
ArrayIndex = (MaxClose - MinClose)/DiffClose;
//print(ArrayIndex,"ArrayIndex");
//  設定陣列大小,差距 + 1
Array_SetMaxIndex(NumArray,ArrayIndex + 1);
//  DateChageFlag與while_i先歸零,因為要Run第二個While分價分量
DateChageFlag = 0;
while_i = 0;
//  第二個While
while DateChageFlag < 3
    begin
        //  Tick成交量累積在各個價格
        for for_i = 0 to ArrayIndex
            begin
                if close[while_i] = MaxClose - for_i * DiffClose then NumArray[for_i + 1] += GetField("成交量","Tick")[while_i];
                //print(NumArray[for_i + 1],for_i + 1,"NumArray[for_i + 1]");
            end;
        //print("");    
        //  只要讀取近三日的序列資料,故換日超過兩次,就停止迴圈
        if date[while_i] <> date[while_i+1] then DateChageFlag += 1;
        while_i += 1;
    end;

//  找到最大累計成交量
ExtremesArray(NumArray,ArrayIndex + 1,1,MaxVolume,MaxVolumeIndex);
//print(MaxVolume,MaxVolumeIndex,"MaxVolumeIndex");

value1 = MaxClose - (MaxVolumeIndex - 1) * DiffClose;
print(value1,"最近3日累積日K成交量最大的那個成交價");

 

以上,供參考,有問題歡迎詢問,謝謝。

  • 按讚來自於
  • sushozin
sushozin 發文於   2017/05/30

非常謝謝您,我在後面加上

//今日站上三日壓力價

if  close > value1
 and close[1] < value1
then ret=1;

好像還是出錯,找不出半支股票,可否再幫忙看看

顯示更多回應 發表回覆
Close