Type/to search
0
Follow
0
Followers
30 dòng mã đưa bạn vào thế giới đầu tư định lượng (phiên bản python)
FAQ
Created 2016-12-25 19:08:32  Updated 2017-01-02 13:15:54
 4
 3751
python
class _const: """这个类的实例实现常量功能. """ class ConstError(TypeError):pass def __setattr__(self, name, value): if self.__dict__.has_key(name): raise self.ConstError, "Can't rebind const (%s)" %name self.__dict__[name]=value const = _const() def main(): const.STATE_IDLE = -1 # 常量,标志空闲状态 state = const.STATE_IDLE # 状态变量 state, 初始化为 空闲状态 opAmount = 0 # 交易量, 初始化为0 initAccount = ext.GetAccount() # 获取账户当前信息 Log(initAccount) # 输出当前账户信息 while true: if state == const.STATE_IDLE: # 触发开仓条件一: 空闲状态 n = ext.Cross(FastPeriod, SlowPeriod) # 返回 EMA 指标 快线、慢线交叉结果 if abs(n) >= EnterPeriod: # 触发开仓条件二: n 的绝对值 >= 入市观察期(默认2) opAmount = round(float(initAccount.Stocks) * float(PositionRatio), 3) # 账户币数 × 仓位比例 if n > 0: # EMA 快线上穿慢线,多头信号,买入 obj = ext.Buy(opAmount) else: # EMA 快线下穿慢线,空头信号,卖出 obj = ext.Sell(opAmount) if obj: # 如果 obj 不为 None,即已开仓 opAmount = obj['amount'] if n > 0: # 如果为多头仓位 state = PD_LONG # 将状态变量改为 多头标志 else: # 否则为空头仓位 state = PD_SHORT # 将状态变量改为 空头标志 Log("开仓详情", obj, "交叉周期", n) # 输出开仓信息 else: # 非空闲状态,检测平仓条件并处理之 n = ext.Cross(ExitFastPeriod, ExitSlowPeriod) # 如果 n >= 离市观察期,当 EMA快线下穿慢线并持有多头仓位 或 EMA快线上穿慢线并持有空头仓位 时,触发离市 if abs(n) >= ExitFastPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)): if state == PD_LONG: # 平多头仓位 ext.Sell(opAmount) else: # 平空头仓位 ext.Buy(opAmount) state = const.STATE_IDLE # 返回空闲状态 nowAccount = ext.GetAccount() LogProfit(nowAccount.Balance - initAccount.Balance, '钱', nowAccount.Balance, '币', nowAccount.Stocks, '平仓详情:', obj, '交叉周期', n) Sleep(Interval * 1000);
Related Recommendations
Comment
All comments (1)

    支持 ^^

    10 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)