本文整理汇总了Golang中github.com/thetruetrade/gotrade.DOHLCV.H方法的典型用法代码示例。如果您正苦于以下问题:Golang DOHLCV.H方法的具体用法?Golang DOHLCV.H怎么用?Golang DOHLCV.H使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/thetruetrade/gotrade.DOHLCV
的用法示例。
在下文中一共展示了DOHLCV.H方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *PlusDiWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
// forward to the true range indicator first using previous data
ind.trueRange.ReceiveDOHLCVTick(tickData, streamBarIndex)
ind.periodCounter += 1
high := tickData.H()
low := tickData.L()
diffP := high - ind.previousHigh
diffM := ind.previousLow - low
if ind.lookbackPeriod == 1 {
if ind.periodCounter > 0 {
// forward to the true range indicator first using previous data
ind.trueRange.ReceiveDOHLCVTick(tickData, streamBarIndex)
var result float64
if (diffP > 0) && (diffP > diffM) && ind.currentTrueRange != 0.0 {
result = diffP / ind.currentTrueRange
} else {
result = 0
}
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
}
} else {
if ind.periodCounter > 0 {
if ind.periodCounter < ind.timePeriod {
if (diffP > 0) && (diffP > diffM) {
ind.previousPlusDM += diffP
}
ind.previousTrueRange += ind.currentTrueRange
} else {
var result float64
ind.previousTrueRange = ind.previousTrueRange - (ind.previousTrueRange / float64(ind.timePeriod)) + ind.currentTrueRange
if (diffP > 0) && (diffP > diffM) {
ind.previousPlusDM = ind.previousPlusDM - (ind.previousPlusDM / float64(ind.timePeriod)) + diffP
} else {
ind.previousPlusDM = ind.previousPlusDM - (ind.previousPlusDM / float64(ind.timePeriod))
}
if ind.previousTrueRange != 0.0 {
result = float64(100.0) * ind.previousPlusDM / ind.previousTrueRange
} else {
result = 0.0
}
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
}
}
}
ind.previousHigh = high
ind.previousLow = low
}
示例2: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *StochOscWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
ind.periodCounter += 1
ind.hhv.ReceiveTick(tickData.H(), streamBarIndex)
ind.llv.ReceiveTick(tickData.L(), streamBarIndex)
if ind.periodCounter >= 0 {
ind.currentFastK = 100.0 * ((tickData.C() - ind.currentPeriodLow) / (ind.currentPeriodHigh - ind.currentPeriodLow))
ind.slowKMA.ReceiveTick(ind.currentFastK, streamBarIndex)
}
}
示例3: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *AdlWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
moneyFlowMultiplier := ((tickData.C() - tickData.L()) - (tickData.H() - tickData.C())) / (tickData.H() - tickData.L())
moneyFlowVolume := moneyFlowMultiplier * tickData.V()
result := ind.previousAdl + moneyFlowVolume
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
ind.previousAdl = result
}
示例4: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *PlusDmWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
ind.periodCounter += 1
high := tickData.H()
low := tickData.L()
diffP := high - ind.previousHigh
diffM := ind.previousLow - low
if ind.lookbackPeriod == 1 {
if ind.periodCounter > 0 {
var result float64
if (diffP > 0) && (diffP > diffM) {
result = diffP
} else {
result = 0
}
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
}
} else {
if ind.periodCounter > 0 {
if ind.periodCounter < ind.timePeriod {
if (diffP > 0) && (diffP > diffM) {
ind.previousPlusDm += diffP
}
if ind.periodCounter == ind.timePeriod-1 {
result := ind.previousPlusDm
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
}
} else {
var result float64
if (diffP > 0) && (diffP > diffM) {
result = ind.previousPlusDm - (ind.previousPlusDm / float64(ind.timePeriod)) + diffP
} else {
result = ind.previousPlusDm - (ind.previousPlusDm / float64(ind.timePeriod))
}
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
ind.previousPlusDm = result
}
}
}
ind.previousHigh = high
ind.previousLow = low
}
示例5: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *TrueRangeWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
ind.periodCounter += 1
if ind.periodCounter > 0 {
high := math.Max(tickData.H(), ind.previousClose)
low := math.Min(tickData.L(), ind.previousClose)
result := high - low
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
}
ind.previousClose = tickData.C()
}
示例6: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *AroonWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
ind.periodCounter += 1
ind.periodHighHistory.PushBack(tickData.H())
ind.periodLowHistory.PushBack(tickData.L())
if ind.periodHighHistory.Len() > (1 + ind.GetLookbackPeriod()) {
var first = ind.periodHighHistory.Front()
ind.periodHighHistory.Remove(first)
first = ind.periodLowHistory.Front()
ind.periodLowHistory.Remove(first)
}
if ind.periodCounter >= 0 {
var aroonUp float64
var aroonDwn float64
var highValue float64 = math.SmallestNonzeroFloat64
var highIdx int = -1
var i int = (1 + ind.GetLookbackPeriod())
for e := ind.periodHighHistory.Front(); e != nil; e = e.Next() {
i--
var value float64 = e.Value.(float64)
if highValue <= value {
highValue = value
highIdx = i
}
}
var daysSinceHigh = highIdx
var lowValue float64 = math.MaxFloat64
var lowIdx int = -1
i = (1 + ind.GetLookbackPeriod())
for e := ind.periodLowHistory.Front(); e != nil; e = e.Next() {
i--
var value float64 = e.Value.(float64)
if lowValue >= value {
lowValue = value
lowIdx = i
}
}
var daysSinceLow = lowIdx
aroonUp = ind.aroonFactor * float64(ind.GetLookbackPeriod()-daysSinceHigh)
aroonDwn = ind.aroonFactor * float64(ind.GetLookbackPeriod()-daysSinceLow)
ind.UpdateIndicatorWithNewValue(aroonUp, aroonDwn, streamBarIndex)
}
}
示例7: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *Cci) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
ind.periodCounter += 1
// calculate the typical price
typicalPrice := (tickData.H() + tickData.L() + tickData.C()) / 3.0
ind.currentTypicalPrice = typicalPrice
// push it to the history
ind.typicalPriceHistory.PushBack(typicalPrice)
// trim the history
if ind.typicalPriceHistory.Len() > ind.timePeriod {
var first = ind.typicalPriceHistory.Front()
ind.typicalPriceHistory.Remove(first)
}
// add it to the average
ind.typicalPriceAvg.ReceiveTick(typicalPrice, streamBarIndex)
}
示例8: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *SarWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
ind.periodCounter += 1
if ind.hasInitialDirection == false {
ind.minusDM.ReceiveDOHLCVTick(tickData, streamBarIndex)
}
if ind.hasInitialDirection == true {
if ind.periodCounter == 0 {
if ind.isLong {
ind.extremePoint = tickData.H()
ind.previousSar = ind.previousLow
} else {
ind.extremePoint = tickData.L()
ind.previousSar = ind.previousHigh
}
// this is a trick for the first iteration only,
// the high low of the first bar will be used as the sar for the
// second bar. According tyo TALib this is the closest to Wilders
// originla idea of having the first entry day use the previous
// extreme, except now that extreme is solely derived from the first
// bar, supposedly Meta stock uses the same method.
ind.previousHigh = tickData.H()
ind.previousLow = tickData.L()
}
if ind.periodCounter >= 0 {
var result float64 = 0.0
if ind.isLong {
if tickData.L() <= ind.previousSar {
// switch to short if the low penetrates the Sar value
ind.isLong = false
ind.previousSar = ind.extremePoint
// make sure the overridden Sar is within yesterdays and todays range
if ind.previousSar < ind.previousHigh {
ind.previousSar = ind.previousHigh
}
if ind.previousSar < tickData.H() {
ind.previousSar = tickData.H()
}
result = ind.previousSar
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
// adjust af and extremePoint
ind.acceleration = ind.accelerationFactor
ind.extremePoint = tickData.L()
// calculate the new Sar
var diff float64 = ind.extremePoint - ind.previousSar
ind.previousSar = ind.previousSar + ind.acceleration*(diff)
// make sure the overridden Sar is within yesterdays and todays range
if ind.previousSar < ind.previousHigh {
ind.previousSar = ind.previousHigh
}
if ind.previousSar < tickData.H() {
ind.previousSar = tickData.H()
}
} else {
// no switch
// just output the current Sar
result = ind.previousSar
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
if tickData.H() > ind.extremePoint {
// adjust af and extremePoint
ind.extremePoint = tickData.H()
ind.acceleration += ind.accelerationFactor
if ind.acceleration > ind.accelerationFactorMax {
ind.acceleration = ind.accelerationFactorMax
}
}
// calculate the new Sar
var diff float64 = ind.extremePoint - ind.previousSar
ind.previousSar = ind.previousSar + ind.acceleration*(diff)
// make sure the overridden Sar is within yesterdays and todays range
if ind.previousSar > ind.previousLow {
ind.previousSar = ind.previousLow
}
if ind.previousSar > tickData.L() {
ind.previousSar = tickData.L()
}
}
} else {
// short
// switch to long if the high penetrates the Sar value
if tickData.H() >= ind.previousSar {
ind.isLong = true
ind.previousSar = ind.extremePoint
// make sure the overridden Sar is within yesterdays and todays range
//.........这里部分代码省略.........
示例9: ReceiveDOHLCVTick
// ReceiveDOHLCVTick consumes a source data DOHLCV price tick
func (ind *MedPriceWithoutStorage) ReceiveDOHLCVTick(tickData gotrade.DOHLCV, streamBarIndex int) {
result := (tickData.H() + tickData.L()) / float64(2.0)
ind.UpdateIndicatorWithNewValue(result, streamBarIndex)
}