淺談K棒生成

更新 發佈閱讀 15 分鐘


聊到股票或是期貨技術分析,最基本的事情就是將即時報價轉換成K棒,也就是OHLC格式﹔某個時段的開始價 (Open),最高價 (High),最低價 (Low) 與結束價 (Close),時段長短常見的有三分鐘,五分鐘,一小時,或是一天,端看個人喜好。


前文有提到過小弟是透過群益API接收即時報價,他的格式大概就像這樣﹔某一檔股票在幾月幾號幾點幾分幾秒的成交價與成交量。這邊是一秒內所接收的資料量範例。


TX00,20230508 090000 006000,15749.00,12
TX00,20230508 090000 057000,15749.00,3
TX00,20230508 090000 167000,15749.00,2
TX00,20230508 090000 263000,15747.00,1
TX00,20230508 090000 289000,15747.00,1
TX00,20230508 090000 304000,15747.00,1
TX00,20230508 090000 308000,15747.00,1
TX00,20230508 090000 309000,15747.00,4
TX00,20230508 090000 309000,15748.00,1
TX00,20230508 090000 338000,15746.00,2
TX00,20230508 090000 350000,15748.00,2
TX00,20230508 090000 383000,15748.00,1
TX00,20230508 090000 403000,15748.00,1
TX00,20230508 090000 410000,15748.00,1
TX00,20230508 090000 439000,15748.00,1
TX00,20230508 090000 448000,15748.00,1
TX00,20230508 090000 452000,15748.00,3
TX00,20230508 090000 547000,15748.00,1
TX00,20230508 090000 607000,15746.00,1
TX00,20230508 090000 620000,15746.00,1
TX00,20230508 090000 664000,15746.00,1
TX00,20230508 090000 678000,15747.00,1
TX00,20230508 090000 690000,15745.00,1
TX00,20230508 090000 817000,15745.00,1
TX00,20230508 090000 844000,15745.00,1
TX00,20230508 090000 998000,15747.00,1
TX00,20230508 090000 998000,15748.00,5
TX00,20230508 090001 003000,15749.00,6


這邊需要注意的是有時候成交量跟次數會突然爆大量,所以小弟採用RAMDisk與ConcurrentQueue來處理巨量資料產生的現象。另外一個常遇到的問題就是群益API接收即時報價有時候會缺少某些筆的資料,所以往往還需要在收盤之後,重新要求重送當日全部的報價資料做一個回歸校正,至於為什麼即時報價會少資料,小弟還是不清楚原因,可能跟網路頻寬或是設備負載有關吧,還希望網路神人能夠幫忙解惑,只求即時技術分析的精準度不要受到太大影響。


接著我們透過C#的LINQ表示式將即時報價轉為OHLC格式,在這邊我們需要注意到依據不同分析習慣,有退位與進位表示式,也就是說早上九點到九點五分時段裡所有報價匯集成的K棒是應該放在九點這個點還是九點五分這個點。小弟是習慣採用進位表示式,所以以下的內文都以此為準。


private IEnumerable<OHLCBar> GenerateOHLCBars(IEnumerable<Tick> ticks, long barSizeInTicks)
{
TimeSpan naturalTime = new TimeSpan(8, 45, 0);
var bars = from tick in ticks
let barIndexForDay = Math.Floor(tick.Timestamp.TimeOfDay.Subtract(naturalTime).TotalSeconds / barSizeInTicks)
let barBeginDateTime = tick.Timestamp.Date.Add(naturalTime).AddSeconds(barIndexForDay * barSizeInTicks)
let barEndDateTime = tick.Timestamp.Date.Add(naturalTime).AddSeconds((barIndexForDay + 1) * barSizeInTicks)
group tick by new { barBeginDateTime, barEndDateTime, tick.Symbol } into tickGroup
orderby tickGroup.Key.barBeginDateTime
let orderedPrices = tickGroup.OrderBy(t => t.Timestamp).Select(t => t.Price)
select new OHLCBar
{
Symbol = tickGroup.Key.Symbol,
OPEN = orderedPrices.First(),
CLOSE = orderedPrices.Last(),
HIGH = orderedPrices.Max(),
LOW = orderedPrices.Min(),
VOLUME = Convert.ToUInt32(tickGroup.Sum(t => t.Volume)),
BeginTime = tickGroup.Key.barBeginDateTime,
EndTime = tickGroup.Key.barEndDateTime,
Interval = TimeSpan.FromSeconds(barSizeInTicks)
};
return bars;
}


所以匯集不同長度K棒的時候,也需要統一設定為進位格式。


public static IEnumerable<Quote> Aggregate<TQuote>(
this IEnumerable<TQuote> quotes,
PeriodSize newSize)
where TQuote : IQuote
{
// handle no quotes scenario
if (quotes == null || !quotes.Any())
{
return new List<Quote>();
}
// parameter conversion
TimeSpan timeSpan = newSize.ToTimeSpan();
if (timeSpan <= TimeSpan.Zero)
{
throw new ArgumentOutOfRangeException(nameof(timeSpan), timeSpan,
"Quotes Aggregation must use a usable new size value (see documentation for options).");
}

// return aggregation with RoundUp
return quotes
.OrderBy(x => x.Date)
.GroupBy(x => x.Date.RoundUp(timeSpan))
.Select(x => new Quote
{
Date = x.Key,
Open = x.First().Open,
High = x.Max(t => t.High),
Low = x.Min(t => t.Low),
Close = x.Last().Close,
Volume = x.Sum(t => t.Volume)
});
}


其中的時段單位可以設定為不同長度,端看個人喜好。


internal static TimeSpan ToTimeSpan(this PeriodSize periodSize)
{
return periodSize switch
{
PeriodSize.OneMinute => TimeSpan.FromMinutes(1),
PeriodSize.TwoMinutes => TimeSpan.FromMinutes(2),
PeriodSize.ThreeMinutes => TimeSpan.FromMinutes(3),
PeriodSize.FiveMinutes => TimeSpan.FromMinutes(5),
PeriodSize.FifteenMinutes => TimeSpan.FromMinutes(15),
PeriodSize.ThirtyMinutes => TimeSpan.FromMinutes(30),
PeriodSize.OneHour => TimeSpan.FromHours(1),
PeriodSize.TwoHours => TimeSpan.FromHours(2),
PeriodSize.FourHours => TimeSpan.FromHours(4),
PeriodSize.Day => TimeSpan.FromDays(1),
PeriodSize.Week => TimeSpan.FromDays(7),
_ => TimeSpan.Zero
};
}


另外一個有趣的問題就是如何準確地每五分鐘執行一次K棒資料彙集的動作。不管任何電腦,都存在時間執行誤差的問題,假設第一次執行的時候,是早上九點準,我們要如何保證下一次起來執行的時間是九點五分準,如果我們單純的設定五分鐘,這會導致執行誤差會隨著時間的遞移而越變越長,所以這裡我們透過計算目前電腦滴答(tick)的差距來對齊下一次時間執行時間。


public static double Align(this DateTime dateTime, TimeSpan interval) // 對齊
{
var diff = (interval.Ticks - (dateTime.Ticks % interval.Ticks)) / TimeSpan.TicksPerMillisecond;

return diff == 0 ? 1 : diff;
}


某些市面上的股市軟體會即時地劃出K棒,所以畫面上會看到K棒不斷地變化,直至下一個時間段到來才固定此時間段K棒的長度,一開始小弟也覺得很有趣,不過時間久了,也就乏了。穩定的訊號來源,可靠的技術分析及下單進出策略才是專注的目標。


最後還是祝福大家都能夠賺大錢!

留言
avatar-img
家裡胡說 (Gary Hu said)
4會員
16內容數
胡言亂語,請勿當真
2024/12/21
小弟走跳江湖多年,也累績了一些職場心得,在年底轉職熱門時刻,希望能夠幫助到一些有緣人。
2024/12/21
小弟走跳江湖多年,也累績了一些職場心得,在年底轉職熱門時刻,希望能夠幫助到一些有緣人。
2024/10/13
本地端生成式AI工具LM Studio安裝介紹,包含如何手動載入AI模型的技巧。
Thumbnail
2024/10/13
本地端生成式AI工具LM Studio安裝介紹,包含如何手動載入AI模型的技巧。
Thumbnail
看更多
你可能也想看
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
本文介紹了一種名為「時間轉折」的股票投資技術,利用時間來預測股票價格的轉折點。作者分享了從股價波段高點或相對高尾爆大量起算,第8、13、21根k棒的走勢可能出現轉折的方法。同時,作者解釋了時間轉折與黃金分割率以及費波那契數列的關係。如果你對股票投資感興趣,這篇文章絕對值得一讀。
Thumbnail
本文介紹了一種名為「時間轉折」的股票投資技術,利用時間來預測股票價格的轉折點。作者分享了從股價波段高點或相對高尾爆大量起算,第8、13、21根k棒的走勢可能出現轉折的方法。同時,作者解釋了時間轉折與黃金分割率以及費波那契數列的關係。如果你對股票投資感興趣,這篇文章絕對值得一讀。
Thumbnail
上課囉! 今天來分享一個用5分K放空的教學,用K棒的價格與成交量來判斷放空與回補的位置。 股價連續兩日漲停而且價漲量增,第三天開盤爆更大量,若大盤當天走勢偏弱,個股價格與成交量出現背離現象可以等一根黑K出現,等待下一根K棒收盤跌破此黑K低點進場空單,K棒"收盤價"站上此價位停損, 後續K
Thumbnail
上課囉! 今天來分享一個用5分K放空的教學,用K棒的價格與成交量來判斷放空與回補的位置。 股價連續兩日漲停而且價漲量增,第三天開盤爆更大量,若大盤當天走勢偏弱,個股價格與成交量出現背離現象可以等一根黑K出現,等待下一根K棒收盤跌破此黑K低點進場空單,K棒"收盤價"站上此價位停損, 後續K
Thumbnail
所有的K棒都是真真實實用資金砸出來的,因此去看懂K棒的最高點、最低點、開盤價與收盤價很重要。 技術分析不能一成不變,要隨著趨勢來畫線。使用不同的週期來畫線,短線操作者(採用日K棒即可),因為我們主要是做選擇權,期貨則是需要更長的週期來看。 技術分析的兩大流派就是逆勢交易與順勢
Thumbnail
所有的K棒都是真真實實用資金砸出來的,因此去看懂K棒的最高點、最低點、開盤價與收盤價很重要。 技術分析不能一成不變,要隨著趨勢來畫線。使用不同的週期來畫線,短線操作者(採用日K棒即可),因為我們主要是做選擇權,期貨則是需要更長的週期來看。 技術分析的兩大流派就是逆勢交易與順勢
Thumbnail
在交易千萬別見樹不見林 中示範如何在同一張圖表上加入不同週期的行情走勢,本篇將對MultiCharts初體驗-函式撰寫、MultiCharts初體驗-訊號撰寫 的程式進行改寫,讓程式可以讀取到多週期的K線資料。 在MC中可以用Data1、Data2、⋯⋯、Data99的指定方式,來存取圖表中的數列
Thumbnail
在交易千萬別見樹不見林 中示範如何在同一張圖表上加入不同週期的行情走勢,本篇將對MultiCharts初體驗-函式撰寫、MultiCharts初體驗-訊號撰寫 的程式進行改寫,讓程式可以讀取到多週期的K線資料。 在MC中可以用Data1、Data2、⋯⋯、Data99的指定方式,來存取圖表中的數列
Thumbnail
  每個語法都像是一塊積木,我們必須擁有這些各式各樣的積木才能一層層向上構建屬於自己的策略腳本。在所有的策略腳本中,在這篇我們想描述一些在腳本中最基本的語法:「K棒」、「時間」、「日期」。   「K棒」是最基本的元素。透過「K棒」,我們能夠衍生出其他指標或技術分析。那麼,就讓我們從「K棒」開始認
Thumbnail
  每個語法都像是一塊積木,我們必須擁有這些各式各樣的積木才能一層層向上構建屬於自己的策略腳本。在所有的策略腳本中,在這篇我們想描述一些在腳本中最基本的語法:「K棒」、「時間」、「日期」。   「K棒」是最基本的元素。透過「K棒」,我們能夠衍生出其他指標或技術分析。那麼,就讓我們從「K棒」開始認
Thumbnail
新手要開始投資,先學什麼技能最划算?不要懷疑!學會看懂k線結構最划算。因為k線已經包含了「一段時間的價格趨勢」、「價格的演進方式」甚至「市場的交易行為」更重要的是對新手而言,是最容易「取得到的資訊」。 第一點 k線的「組成結構」 第二點 k線的「成交量」 第三點 k線的「成交量分布」
Thumbnail
新手要開始投資,先學什麼技能最划算?不要懷疑!學會看懂k線結構最划算。因為k線已經包含了「一段時間的價格趨勢」、「價格的演進方式」甚至「市場的交易行為」更重要的是對新手而言,是最容易「取得到的資訊」。 第一點 k線的「組成結構」 第二點 k線的「成交量」 第三點 k線的「成交量分布」
Thumbnail
本文將會帶你認識:    1.K線是什麼?  2.K線怎麼畫出來的?  3.K線圖怎麼看? 一、K線是什麼? K線來記錄股市某段期間的股價,(英文:Candlestick Charts),  K線是根據股價一天(或者某一周期)走勢中形成的四個價位: 開盤價、最高價、最低價、收盤價(開、高、低、收
Thumbnail
本文將會帶你認識:    1.K線是什麼?  2.K線怎麼畫出來的?  3.K線圖怎麼看? 一、K線是什麼? K線來記錄股市某段期間的股價,(英文:Candlestick Charts),  K線是根據股價一天(或者某一周期)走勢中形成的四個價位: 開盤價、最高價、最低價、收盤價(開、高、低、收
Thumbnail
我曾經說過我的技術系統是各商品適用,包含各種不同期貨商品以及股票,曾經有伙伴問我,說他住在美國,平常在做的是美股,我的系統一樣可以用嗎?我說當然。不用說,以期貨而言,不同商品有他自己的特性,就像我們談股票時說的「股性」,指數、外匯、能源、金屬或農產品等,分別有其價格變動上的特色,例如有些商品適用日
Thumbnail
我曾經說過我的技術系統是各商品適用,包含各種不同期貨商品以及股票,曾經有伙伴問我,說他住在美國,平常在做的是美股,我的系統一樣可以用嗎?我說當然。不用說,以期貨而言,不同商品有他自己的特性,就像我們談股票時說的「股性」,指數、外匯、能源、金屬或農產品等,分別有其價格變動上的特色,例如有些商品適用日
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News