def checkOrder(req): global inbacktest if inbacktest: #print('Esta em backtest. bts=')#, bts) return backtest.get_balance(bts) #else: # print('NAO esta em backtest') if req is None: return False result = mt5.order_check(req) #print('result=',result, 'req=',req) if result is None: # error setLastError(mt5.last_error()) return False d = result._asdict() #margin - Margem requerida para a operação de negociação # margin_free - Margem livre que sobrará após a execução da operação de negociação # balance - Valor de saldo após a execução da operação de negociação #for k in d.keys(): # print('{} = {}',k,d[k]) if isSellOrder(req): if req['volume'] > get_shares( req['symbol']): #bloqueia ordem a descoberto return False else: return True if d['balance'] >= 0: # checa se não ficaria negativo com a execução return True else: setLastError( 'Trade would make the balance negative! Therefore, it does not check!' ) return False
def checkOrder(req): if req == None: return False result = mt5.order_check(req) #print('result=',result, 'req=',req) if result == None: # error setLastError(mt5.last_error()) return False d = result._asdict() #for k in d.keys(): # print('{} = {}',k,d[k]) if d['margin_free'] >= d['request'].volume * d[ 'request'].price: # checa se não ficaria negativo com a execução return True else: setLastError( 'Trade would make the balance negative! Therefore, it does not check!' ) return False
point = mt5.symbol_info(symbol).point request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": symbol, "volume": 1.0, "type": mt5.ORDER_TYPE_BUY, "price": mt5.symbol_info_tick(symbol).ask, "sl": mt5.symbol_info_tick(symbol).ask - 100 * point, "tp": mt5.symbol_info_tick(symbol).ask + 100 * point, "deviation": 10, "magic": 234000, "comment": "python script", "type_time": mt5.ORDER_TIME_GTC, "type_filling": mt5.ORDER_FILLING_RETURN, } # 执行检查并显示结果'按原状' result = mt5.order_check(request) print(result); # request the result as a dictionary and display it element by element result_dict = result._asdict() for field in result_dict.keys(): print(" {}={}".format(field, result_dict[field])) # if this is a trading request structure, display it element by element as well if field == "request": traderequest_dict = result_dict[field]._asdict() for tradereq_filed in traderequest_dict: print(" traderequest: {}={}".format(tradereq_filed, traderequest_dict[tradereq_filed])) # shut down connection to the MetaTrader 5 terminal mt5.shutdown()