EMV计算公式
第一步:计算mov_mid movmid = (TH + TL)/2 - (TH - TL)/2 其中TH代表当天最高价,TL代表当天最低价,YH代表前日最高价,YL代表前日最低价。 那么如果movmid > 0意味着今天的平均价高于昨天的平均价。
第二步:计算ratio 其中TVOL代表当天交易量,TH代表当天最高价,TL代表当天最低价。 ratio = (TVOL/10000)/(TH - TL)
第三步:计算emv emv = movmid / ratio
EMV指标逻辑
当无持仓:EMV大于0,买入开多,当EMV小于0,则卖出开空 当持有多头:EMV小于0,卖出平多头 当持有空头:EMV大于0,买入平空头
p = ext.NewPositionManager() def get_position(): position = 0 position_arr = _C(exchange.GetPosition) if len(position_arr) > 0 : for i in position_arr : if i["ContractType"][0:2] == "IH" : if i["Type"] % 2 == 0 : position = i["Amount"] else: position = -i["Amount"] return position def onTick(): _C(exchange.SetContractType,"IH000") bars_arr = _C(exchange.GetRecords) if len(bars_arr) < 20 : return bar1 = bars_arr[-2] bar2 = bars_arr[-3] mov_mid = (bar1["High"] + bar1["Low"])/2 - (bar2["High"] - bar2["Low"])/2 if bar1["High"] != bar1["Low"]: ratio = (bar1["Volume"] / 10000) / (bar1["High"] - bar1["Low"]) else: ratio = 0 if ratio > 0 : emv = mov_mid / ratio else : emv = 0 position = get_position() if position > 0 and emv < 0 : p.Cover("IH000") if position < 0 and emv > 0 : p.Cover("IH000") if position == 0 : if emv > 0 : p.OpenLong("IH000" , 1) if emv < 0 : p.OpenShort("IH000" , 1) def main(): while True: if exchange.IO("status"): LogStatus(_D(),"已连接") onTick() else: LogStatus(_D(),"未连接") Sleep(1000)