# -*- coding: utf-8 -*-
from numpy.f2py.crackfortran import expectbegin

from MtctpTradeInclude import MtctpTradeInclude
from time import sleep
m=MtctpTradeInclude("http://127.0.0.1:80/",95031778)#  # 连接到 MT4 交易服务器 账号必须输入正确
# 交易参数
lot=0.1 # 手数 加仓是递增
addPoint=40 # 加仓点数
magic=1233 # 魔术数字
comm="python-mql-ea"# 注释 不可设置中文
symbol="EURUSDm"# 交易品种
closeprofit=1# 盈利平仓*单数 平仓

# 连接到 MT4 交易服务器
if m.Initialize()==True:
    print("ea，初始化成功....")
else:
    print("ea，初始化失败,可能账户不对或者配置错误....")
    exit()
while True:
    try:
        m.OrdersAndHistoryTotal()
        m.SymbolInfo(symbol)
        if m.SYMBOL_BID==0:
            continue

        buyVol=0
        sellVol=0
        lastbuyOpenPrice=0
        lastsellOpenPrice=0

        lastbuyOpenlots=0
        lastsellOpenlots=0
        allprofit=0;
        for i in range(m.OrdersTotal):
            if m.OrderSymbol[i] == symbol:
                if m.OrderMagicNumber[i] == magic:
                    allprofit=allprofit+m.OrderProfit[i]+m.OrderSwap[i]+m.OrderCommission[i]
                    if m.OrderType[i] == 0:
                        buyVol+=1
                        lastbuyOpenPrice=m.OrderOpenPrice[i]
                        lastbuyOpenlots=m.OrderLots[i]
                    if m.OrderType[i] == 1:
                        sellVol+=1
                        lastsellOpenPrice = m.OrderOpenPrice[i]
                        lastsellOpenlots = m.OrderLots[i]

        if buyVol == 0:
            m.OrderSend(symbol, 0, lot, 0, 3000, 0, 0, comm, magic, 0)
            m.log(symbol+"下多首单",magic)
        else:
            if lastbuyOpenPrice-m.SYMBOL_ASK>addPoint*m.SYMBOL_POINT:
                m.OrderSend(symbol, 0, lastbuyOpenlots+lot, 0, 3000, 0, 0, comm, magic, 0)
                m.log(symbol+"下多加仓",magic)

        if sellVol == 0:
            m.OrderSend(symbol, 1, lot, 0, 3000, 0, 0, comm, magic, 0)
            m.log(symbol+"下空首单",magic)
        else:
            if m.SYMBOL_BID-lastsellOpenPrice>addPoint*m.SYMBOL_POINT:
                m.OrderSend(symbol, 1, lastsellOpenlots+lot, 0, 3000, 0, 0, comm, magic, 0)
                m.log(symbol+"下空加仓",magic)


        m.AccountInfo()
        if allprofit>(buyVol+sellVol)*closeprofit:
            for i in range(m.OrdersTotal):
                if m.OrderSymbol[i] == symbol:
                    if m.OrderMagicNumber[i] == magic:
                        m.OrderClose(m.OrderTicket[i], 0, 0, 3000, "NONE")
                        m.log(symbol+"盈利平仓",magic)

    except MemoryError:
        print("内存不足，清理资源后重试")
        break