您當前的位置:首頁 > 體育

如何找出一定Bar數量的 K線前期高低點

作者:由 littledream 發表于 體育時間:2017-10-28

今天我們來討論一下: 如何找出一定Bar數量的 K線前期高點、低點。並且實現一個小 DEMO 來 測試。

平時經常聽到技術分析流派關於 K線中前期高低點,或者 指標圖形中 前期高低點的討論,甚至有不少手動交易策略思路中包含了關於圖形走勢高低點的使用。那麼這些關於高低點的判斷或者使用是可以量化的麼?

通常這些高低點都作為 行情的轉折點使用,比如 突破位、阻力位 等等。。

那麼如何讓程式去識別、找到這些點位,以便使用呢?

在找之前需要明確一些條件(討論,歡迎留言):

週期:

這個說的週期 並不是 K線週期:

K線是一個時間週期的概念:一分鐘、一小時、一天、一個星期、一個月、一年等等。任何一個時間段都可以被用來作為一個K線的時間週期單位,這也是K線存在的基本前提。不同的k線時間週期代表著不同時間週期內市場行情的變化狀態。市場上最主要的K線分析週期為日K線。它是指以當日的開盤價,收盤價,最高價和最低價四個價格為主畫出的日線圖。

這個週期指的是 在多大的範圍內去判斷 高點、低點, 可以試想下,如果脫離這個條件去判斷是沒有意義的,因為之前的行情可能有最高 也可能沒有,或者 獲取不到 那麼久遠的資料,另外多高算是高點?可能之前有更高的,所以這些需要限定在一個週期內去判斷,比如 50個K線柱內或者20個K線柱內。

暫時想到這些,就把程式碼實現了一下,用 BotVS 畫圖 寫測試 程式非常方便,測試程式碼如下:

function FindLastHighestPoint(Records, NumOfBars){

var RecordsLen = Records。length

if(RecordsLen < 2){

return false

}

if(typeof(NumOfBars) == “undefined”){

NumOfBars = 0

}

var highPrice = TA。Highest(Records, NumOfBars, “High”)

// find the bar

var bar = null

for(var i = 0; i < RecordsLen; i++){

if(Records[i]。High == highPrice){

bar = {}

bar。record = Records[i]

bar。index = i

bar。range = NumOfBars

break

}

}

// compare current bar

if(bar && Records[RecordsLen - 1]。High >= bar。record。High){

bar。record = Records[RecordsLen - 1]

bar。index = RecordsLen - 1

bar。range = NumOfBars

}

if(!bar || !Records[bar。index - 1]){

return false

}

return bar

}

function FindLastLowestPoint(Records, NumOfBars){

var RecordsLen = Records。length

if(RecordsLen < 2){

return false

}

if(typeof(NumOfBars) == “undefined”){

NumOfBars = 0

}

var lowPrice = TA。Lowest(Records, NumOfBars, “Low”)

// find the bar

var bar = null

for(var i = 0; i < RecordsLen; i++){

if(Records[i]。Low == lowPrice){

bar = {}

bar。record = Records[i]

bar。index = i

bar。range = NumOfBars

break

}

}

// compare current bar

if(bar && Records[RecordsLen - 1]。Low <= bar。record。Low){

bar。record = Records[RecordsLen - 1]

bar。index = RecordsLen - 1

bar。range = NumOfBars

}

if(!bar || !Records[bar。index - 1]){

return false

}

return bar

}

function main(){

LogReset(1)

var chart_obj = Chart({})

chart_obj。reset()

while(true){

var records = exchange。GetRecords()

if(!records){

continue

}

var bar = FindLastHighestPoint(records)

var bar2 = FindLastLowestPoint(records)

$。PlotRecords(records)

if(bar){

$。PlotHLine(bar。record。High, “高點”, “red”)

}else{

Log(“K線資料不足,最高點為初始K線bar!”)

}

if(bar2){

$。PlotHLine(bar2。record。Low, “低點”, “green”)

}else{

Log(“K線資料不足,最低點為初始K線bar!”)

}

LogStatus(_D(), ‘\n’, bar, ‘\n’, bar2)

Sleep(1000)

}

}

程式碼比較簡單, FindLastHighestPoint 、FindLastLowestPoint 這兩個函式 ,就是把 API GetRecords 函式返回的 K線資料(Records) 進行處理 找出 給定K線數量(NumOfBars)內的 高低點,main 函式中 用畫圖函式畫圖(需要引用模板):

如何找出一定Bar數量的 K線前期高低點

$。PlotRecords(records) // 畫出K線

$。PlotHLine(bar。record。High, “高點”, “red”) // 畫出水平線,此引數表示高點

程式會不停輪詢,不停更新 給定引數 週期 K線數 內的 高低點,並顯示為水平線。

在以上測試程式碼中 沒有 傳 NumOfBars 這個引數,不傳該引數則為判斷 獲取到的所有K線資料中的高低點。當然也可以指定 比如 20根K線 柱 範圍內,例如:

FindLastHighestPoint(records, 20)

程式碼地址:

https://www。

botvs。com/strategy/5817

9

如何找出一定Bar數量的 K線前期高低點

簡單的測試了一下。

本帖旨在 用簡單的程式碼 方便新同學學習、測試!

如有不同見解、發現BUG、錯誤、提出建議 歡迎 老司機 留言 ^^,

我會及時修正。

由 發明者量化(FMZ。COM) (原BotVS)授權首發刊載

標簽: bar  Records  NumOfBars  RecordsLen  var