-
Notifications
You must be signed in to change notification settings - Fork 724
盈利目标组件API
盈利目标组件(ProfitGoal)是Hikyuu量化交易系统中的关键组成部分,用于在交易前确定盈利目标。当市场价格达到预设的盈利目标时,系统将自动执行卖出操作。该组件提供了多种盈利目标策略,包括固定持有天数、固定盈利百分比和无盈利目标等,以满足不同的交易策略需求。
Section sources
- ProfitGoalBase.h
盈利目标组件的核心是ProfitGoalBase基类,所有具体的盈利目标策略都继承自该基类。基类定义了盈利目标策略的基本接口和通用功能,包括设置交易账户、获取交易对象、复位操作和克隆操作等。
classDiagram
class ProfitGoalBase {
+string m_name
+KData m_kdata
+TradeManagerPtr m_tm
+setTM(TradeManagerPtr tm) void
+getTM() TradeManagerPtr
+setTO(KData kdata) void
+getTO() KData
+name() string
+name(string name) void
+reset() void
+clone() ProfitGoalPtr
+getGoal(Datetime datetime, price_t price) price_t
+getShortGoal(Datetime datetime, price_t price) price_t
+_reset() void
+_clone() ProfitGoalPtr
+_calculate() void
}
class FixedHoldDays {
+_checkParam(string name) void
+getGoal(Datetime datetime, price_t price) price_t
}
class FixedPercentProfitGoal {
+_checkParam(string name) void
+getGoal(Datetime datetime, price_t price) price_t
}
class NoGoalProfitGoal {
+getGoal(Datetime datetime, price_t price) price_t
}
ProfitGoalBase <|-- FixedHoldDays
ProfitGoalBase <|-- FixedPercentProfitGoal
ProfitGoalBase <|-- NoGoalProfitGoal
Diagram sources
- ProfitGoalBase.h
- FixedHoldDays.cpp
- FixedPercentProfitGoal.cpp
- NoGoalProfitGoal.cpp
Section sources
- ProfitGoalBase.h
- ProfitGoalBase.cpp
PG_FixedHoldDays函数用于创建固定持有天数的盈利目标策略。该策略允许用户指定一个最大持仓天数,当持仓时间达到该天数时,系统将自动卖出。
参数说明:
-
days:允许持仓天数(按交易日计算),默认值为5天
使用示例:
pg = PG_FixedHoldDays(10) # 创建一个允许持有10个交易日的盈利目标策略Section sources
- PG_FixedHoldDays.h
- FixedHoldDays.cpp
PG_FixedPercent函数用于创建固定盈利百分比的盈利目标策略。该策略允许用户指定一个盈利百分比,当价格达到买入价格乘以(1+p)时,系统将自动卖出。
参数说明:
-
p:盈利百分比,默认值为0.2(即20%)
使用示例:
pg = PG_FixedPercent(0.3) # 创建一个目标盈利30%的盈利目标策略Section sources
- PG_FixedPercent.h
- FixedPercentProfitGoal.cpp
PG_NoGoal函数用于创建无盈利目标策略。该策略通常用于测试或对比,表示不设置任何盈利目标。
参数说明:
- 无参数
使用示例:
pg = PG_NoGoal() # 创建一个无盈利目标策略Section sources
- PG_NoGoal.h
- NoGoalProfitGoal.cpp
PG_FixedHoldDays策略适用于时间止盈场景。当投资者希望在特定时间内持有股票,无论盈亏都进行卖出时,可以使用此策略。例如,短线交易者可能希望在买入后5个交易日内卖出,以避免市场波动带来的风险。
PG_FixedPercent策略适用于利润止盈场景。当投资者希望在达到特定盈利目标时卖出股票,以锁定利润时,可以使用此策略。例如,价值投资者可能希望在股票上涨20%时卖出,以确保获得稳定收益。
盈利目标组件可以与止损、信号组件组合使用,形成完整的交易策略。以下是一个组合使用的代码示例:
# 创建信号组件
sg = SG_Fix(CList(1)) # 每日产生买入信号
# 创建止损组件
sl = SL_FixedPercent(0.1) # 亏损10%时止损
# 创建盈利目标组件
pg = PG_FixedPercent(0.3) # 盈利30%时止盈
# 创建交易系统
sys = SYS_Simple(tm, sg, sl, pg)
# 执行回测
result = sys.run()交易执行逻辑:
- 当买入信号产生时,系统执行买入操作
- 每个交易日检查是否达到止损条件,若达到则执行卖出
- 每个交易日检查是否达到盈利目标,若达到则执行卖出
- 若未达到止损或盈利目标,则继续持有
Section sources
- ProfitGoal.py
- _ProfitGoal.cpp
盈利目标的检查频率与交易系统的运行频率一致。在每日回测中,系统会在每个交易日结束时检查是否达到盈利目标。在分钟级回测中,系统会在每个分钟数据点检查是否达到盈利目标。
系统支持同时设置多个盈利目标。当多个盈利目标策略同时存在时,只要任何一个目标被触发,系统就会执行卖出操作。例如,可以同时设置时间止盈和利润止盈,当达到任一条件时即卖出。
flowchart TD
Start([开始交易日]) --> CheckStoploss["检查是否达到止损条件"]
CheckStoploss --> StoplossHit{"达到止损?"}
StoplossHit --> |是| SellStoploss["执行止损卖出"]
StoplossHit --> |否| CheckProfitGoal["检查是否达到盈利目标"]
CheckProfitGoal --> ProfitGoalHit{"达到盈利目标?"}
ProfitGoalHit --> |是| SellProfitGoal["执行止盈卖出"]
ProfitGoalHit --> |否| Hold["继续持有"]
SellStoploss --> End([结束交易日])
SellProfitGoal --> End
Hold --> End
Diagram sources
- FixedHoldDays.cpp
- FixedPercentProfitGoal.cpp
Section sources
- FixedHoldDays.cpp
- FixedPercentProfitGoal.cpp
盈利目标组件与资金管理组件(MoneyManager)紧密交互。当盈利目标被触发时,资金管理组件会根据当前的资金状况和风险控制策略,决定实际的卖出数量。
sequenceDiagram
participant System as 交易系统
participant ProfitGoal as 盈利目标组件
participant MoneyManager as 资金管理组件
participant TradeManager as 交易账户
System->>ProfitGoal : getGoal(datetime, price)
ProfitGoal-->>System : 返回目标价格
System->>MoneyManager : calculateSellNumber()
MoneyManager-->>System : 返回卖出数量
System->>TradeManager : sell(datetime, stock, price, number)
TradeManager-->>System : 返回交易结果
Diagram sources
- ProfitGoalBase.h
- ProfitGoalBase.cpp
Section sources
- ProfitGoalBase.h
- ProfitGoalBase.cpp
盈利目标组件为Hikyuu量化交易系统提供了灵活的止盈机制。通过PG_FixedHoldDays、PG_FixedPercent和PG_NoGoal等函数,用户可以根据不同的交易策略需求,设置时间止盈、利润止盈或不设置止盈目标。这些组件可以与止损、信号和资金管理组件组合使用,形成完整的交易策略。系统在每个交易周期都会检查盈利目标,当目标达成时自动执行卖出操作,帮助投资者实现风险控制和收益锁定。