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);
发明者量化-小小梦 支持 ^^