mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
exit/hhllStop: readability
This commit is contained in:
parent
936a3c95d9
commit
12e3e9b5f8
|
@ -61,6 +61,7 @@ func (s *HigherHighLowerLowStop) Subscribe(session *ExchangeSession) {
|
||||||
// updateActivated checks the position cost against the close price, activation ratio, and deactivation ratio to
|
// updateActivated checks the position cost against the close price, activation ratio, and deactivation ratio to
|
||||||
// determine whether this stop should be activated
|
// determine whether this stop should be activated
|
||||||
func (s *HigherHighLowerLowStop) updateActivated(position *types.Position, closePrice fixedpoint.Value) {
|
func (s *HigherHighLowerLowStop) updateActivated(position *types.Position, closePrice fixedpoint.Value) {
|
||||||
|
// deactivate when no position
|
||||||
if position.IsClosed() || position.IsDust(closePrice) {
|
if position.IsClosed() || position.IsDust(closePrice) {
|
||||||
|
|
||||||
s.activated = false
|
s.activated = false
|
||||||
|
@ -68,19 +69,27 @@ func (s *HigherHighLowerLowStop) updateActivated(position *types.Position, close
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// activation/deactivation price
|
||||||
|
var price_deactive fixedpoint.Value
|
||||||
|
var price_active fixedpoint.Value
|
||||||
|
if position.IsLong() {
|
||||||
|
price_deactive = position.AverageCost.Mul(fixedpoint.One.Add(s.DeactivationRatio))
|
||||||
|
price_active = position.AverageCost.Mul(fixedpoint.One.Add(s.ActivationRatio))
|
||||||
|
} else {
|
||||||
|
price_deactive = position.AverageCost.Mul(fixedpoint.One.Sub(s.DeactivationRatio))
|
||||||
|
price_active = position.AverageCost.Mul(fixedpoint.One.Sub(s.ActivationRatio))
|
||||||
|
}
|
||||||
|
|
||||||
if s.activated {
|
if s.activated {
|
||||||
|
|
||||||
if position.IsLong() {
|
if position.IsLong() {
|
||||||
|
|
||||||
r_deactive := fixedpoint.One.Add(s.DeactivationRatio)
|
if closePrice.Compare(price_deactive) >= 0 {
|
||||||
r_active := fixedpoint.One.Add(s.ActivationRatio)
|
|
||||||
|
|
||||||
if closePrice.Compare(position.AverageCost.Mul(r_deactive)) >= 0 {
|
|
||||||
|
|
||||||
s.activated = false
|
s.activated = false
|
||||||
Notify("[hhllStop] Stop of %s deactivated for long position, deactivation ratio %s", s.Symbol, s.DeactivationRatio.Percentage())
|
Notify("[hhllStop] Stop of %s deactivated for long position, deactivation ratio %s", s.Symbol, s.DeactivationRatio.Percentage())
|
||||||
|
|
||||||
} else if closePrice.Compare(position.AverageCost.Mul(r_active)) < 0 {
|
} else if closePrice.Compare(price_active) < 0 {
|
||||||
|
|
||||||
s.activated = false
|
s.activated = false
|
||||||
Notify("[hhllStop] Stop of %s deactivated for long position, activation ratio %s", s.Symbol, s.ActivationRatio.Percentage())
|
Notify("[hhllStop] Stop of %s deactivated for long position, activation ratio %s", s.Symbol, s.ActivationRatio.Percentage())
|
||||||
|
@ -89,16 +98,13 @@ func (s *HigherHighLowerLowStop) updateActivated(position *types.Position, close
|
||||||
|
|
||||||
} else if position.IsShort() {
|
} else if position.IsShort() {
|
||||||
|
|
||||||
r_deactive := fixedpoint.One.Sub(s.DeactivationRatio)
|
|
||||||
r_active := fixedpoint.One.Sub(s.ActivationRatio)
|
|
||||||
|
|
||||||
// for short position, if the close price is less than the activation price then this is a profit position.
|
// for short position, if the close price is less than the activation price then this is a profit position.
|
||||||
if closePrice.Compare(position.AverageCost.Mul(r_deactive)) <= 0 {
|
if closePrice.Compare(price_deactive) <= 0 {
|
||||||
|
|
||||||
s.activated = false
|
s.activated = false
|
||||||
Notify("[hhllStop] Stop of %s deactivated for short position, deactivation ratio %s", s.Symbol, s.DeactivationRatio.Percentage())
|
Notify("[hhllStop] Stop of %s deactivated for short position, deactivation ratio %s", s.Symbol, s.DeactivationRatio.Percentage())
|
||||||
|
|
||||||
} else if closePrice.Compare(position.AverageCost.Mul(r_active)) > 0 {
|
} else if closePrice.Compare(price_active) > 0 {
|
||||||
|
|
||||||
s.activated = false
|
s.activated = false
|
||||||
Notify("[hhllStop] Stop of %s deactivated for short position, activation ratio %s", s.Symbol, s.ActivationRatio.Percentage())
|
Notify("[hhllStop] Stop of %s deactivated for short position, activation ratio %s", s.Symbol, s.ActivationRatio.Percentage())
|
||||||
|
@ -110,10 +116,7 @@ func (s *HigherHighLowerLowStop) updateActivated(position *types.Position, close
|
||||||
|
|
||||||
if position.IsLong() {
|
if position.IsLong() {
|
||||||
|
|
||||||
r_deactive := fixedpoint.One.Add(s.DeactivationRatio)
|
if closePrice.Compare(price_active) >= 0 && closePrice.Compare(price_deactive) < 0 {
|
||||||
r_active := fixedpoint.One.Add(s.ActivationRatio)
|
|
||||||
|
|
||||||
if closePrice.Compare(position.AverageCost.Mul(r_active)) >= 0 && closePrice.Compare(position.AverageCost.Mul(r_deactive)) < 0 {
|
|
||||||
|
|
||||||
s.activated = true
|
s.activated = true
|
||||||
Notify("[hhllStop] %s stop is activated for long position, activation ratio %s, deactivation ratio %s", s.Symbol, s.ActivationRatio.Percentage(), s.DeactivationRatio.Percentage())
|
Notify("[hhllStop] %s stop is activated for long position, activation ratio %s, deactivation ratio %s", s.Symbol, s.ActivationRatio.Percentage(), s.DeactivationRatio.Percentage())
|
||||||
|
@ -122,11 +125,8 @@ func (s *HigherHighLowerLowStop) updateActivated(position *types.Position, close
|
||||||
|
|
||||||
} else if position.IsShort() {
|
} else if position.IsShort() {
|
||||||
|
|
||||||
r_deactive := fixedpoint.One.Sub(s.DeactivationRatio)
|
|
||||||
r_active := fixedpoint.One.Sub(s.ActivationRatio)
|
|
||||||
|
|
||||||
// for short position, if the close price is less than the activation price then this is a profit position.
|
// for short position, if the close price is less than the activation price then this is a profit position.
|
||||||
if closePrice.Compare(position.AverageCost.Mul(r_active)) <= 0 && closePrice.Compare(position.AverageCost.Mul(r_deactive)) > 0 {
|
if closePrice.Compare(price_active) <= 0 && closePrice.Compare(price_deactive) > 0 {
|
||||||
|
|
||||||
s.activated = true
|
s.activated = true
|
||||||
Notify("[hhllStop] %s stop is activated for short position, activation ratio %s, deactivation ratio %s", s.Symbol, s.ActivationRatio.Percentage(), s.DeactivationRatio.Percentage())
|
Notify("[hhllStop] %s stop is activated for short position, activation ratio %s, deactivation ratio %s", s.Symbol, s.ActivationRatio.Percentage(), s.DeactivationRatio.Percentage())
|
||||||
|
|
Loading…
Reference in New Issue
Block a user