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)