简易波动EMV策略

Author: yuzy, Date: 2022-11-14 17:26:24
Tags:

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)

更多内容