Ejemplo n.º 1
0
def get_order_history(date_from, date_to):
    res = mt5.history_deals_get(date_from, date_to)

    if res is not None and res != ():
        df = pd.DataFrame(list(res), columns=res[0]._asdict().keys())
        df['time'] = pd.to_datetime(df['time'], unit='s')
        return df

    return pd.DataFrame()
Ejemplo n.º 2
0
 def update_mt5_deal_details(self, strategy_id):
     position_ids = self.position_ids[strategy_id]
     for position_id in position_ids.values():
         deals = mt5.history_deals_get(position=position_id)
         for deal in deals:
             self.mt5_deal_details[strategy_id][
                 'commission'] += deal.commission
             self.mt5_deal_details[strategy_id]['swap'] += deal.swap
             self.mt5_deal_details[strategy_id]['fee'] += deal.fee
             self.mt5_deal_details[strategy_id]['earning'] += deal.profit
             self.mt5_deal_details[strategy_id][
                 'balanced'] += deal.commission + deal.swap + deal.fee + deal.profit
Ejemplo n.º 3
0
    def stop_and_gain(self, comment=''):
        if len(Mt5.positions_get()) == 1:

            points = (Mt5.positions_get()[0].profit *
                      Mt5.symbol_info(self.symbol).trade_tick_size /
                      Mt5.symbol_info(self.symbol).trade_tick_value) / \
                     Mt5.positions_get()[0].volume

            if points / Mt5.symbol_info(self.symbol).point >= self.take_profit:
                self.profit_deals += 1
                self.close_position(comment)
                print(
                    f'Take profit reached. ('
                    f'{int(Mt5.history_deals_get((datetime.today() - timedelta(days=1)), datetime.now())[-1].profit)}'
                    f')\n')
                if Mt5.history_deals_get((datetime.today() - timedelta(days=1)), datetime.now())[-1].symbol == \
                        self.symbol:
                    self.balance += int(
                        Mt5.history_deals_get(
                            (datetime.today() - timedelta(days=1)),
                            datetime.now())[-1].profit)
                self.statistics()

            elif ((points / Mt5.symbol_info(self.symbol).point) *
                  -1) >= self.stop_loss:
                self.loss_deals += 1
                self.close_position(comment)
                print(
                    f'Stop loss reached. ('
                    f'{int(Mt5.history_deals_get((datetime.today() - timedelta(days=1)), datetime.now())[-1].profit)}'
                    f')\n')
                if Mt5.history_deals_get((datetime.today() - timedelta(days=1)), datetime.now())[-1].symbol == \
                        self.symbol:
                    self.balance += int(
                        Mt5.history_deals_get(
                            (datetime.today() - timedelta(days=1)),
                            datetime.now())[-1].profit)
                self.statistics()
Ejemplo n.º 4
0
def OnLot():
    l = Lot
    from_date = datetime.datetime(2020, 1, 1)
    to_date = datetime.datetime.today() + relativedelta(days=+1)
    pos = None
    pos = mt5.history_deals_get(from_date, to_date)
    if pos != None:
        p = len(pos)
        while (p > 0):
            p = p - 1
            ps = pos[p].type
            print(pos[p])
            if ps == 0 or ps == 1:
                if pos[p].profit < 0.0:
                    l = pos[p].volume * 2
                break
    return l
Ejemplo n.º 5
0
pd.set_option('display.max_columns', 500)  # number of columns to be displayed
pd.set_option('display.width', 1500)  # max table width to display
# 显示有关MetaTrader 5程序包的数据
print("MetaTrader5 package author: ", mt5.__author__)
print("MetaTrader5 package version: ", mt5.__version__)
print()
# 建立与MetaTrader 5程序端的连接
if not mt5.initialize():
    print("initialize() failed, error code =", mt5.last_error())
    quit()

# 获取历史中的交易数量
from_date = datetime(2020, 1, 1)
to_date = datetime.now()
# 获取指定时间间隔内且名称包含"GBP"的交易品种的交易
deals = mt5.history_deals_get(from_date, to_date, group="*GBP*")
if deals == None:
    print("No deals with group=\"*USD*\", error code={}".format(
        mt5.last_error()))
elif len(deals) > 0:
    print("history_deals_get({}, {}, group=\"*GBP*\")={}".format(
        from_date, to_date, len(deals)))

# 获取名称中既不包含"EUR"也不包含"GBP"的交易品种的交易
deals = mt5.history_deals_get(from_date, to_date, group="*,!*EUR*,!*GBP*")
if deals == None:
    print("No deals, error code={}".format(mt5.last_error()))
elif len(deals) > 0:
    print("history_deals_get(from_date, to_date, group=\"*,!*EUR*,!*GBP*\") =",
          len(deals))
    # display all obtained deals 'as is'
Ejemplo n.º 6
0
def job():
    # 更新市场信息
    for symbol_name in symbols:
        symbol_info_tick = mt5.symbol_info(symbol_name)
        market = {}
        print("symbol_info_tick ",symbol_info_tick);
        market["time"]                        = symbol_info_tick.time
        market["bid"]                         = symbol_info_tick.bid
        market["ask"]                         = symbol_info_tick.ask
        market["last"]                        = symbol_info_tick.last
        market["volume"]                      = symbol_info_tick.volume
        market["volume_real"]                 = symbol_info_tick.volume_real
        market["custome"]                     = symbol_info_tick.volume_real
        market["chart_mode"]                  = symbol_info_tick.chart_mode
        market["select"]                      = symbol_info_tick.select
        market["visible"]                     = symbol_info_tick.visible
        market["session_deals"]               = symbol_info_tick.session_deals
        market["session_sell_orders"]         = symbol_info_tick.session_sell_orders
        market["volumehigh"]                  = symbol_info_tick.volumehigh
        market["volumelow"]                   = symbol_info_tick.volumelow
        market["digits"]                      = symbol_info_tick.digits
        market["spread"]                      = symbol_info_tick.spread
        market["spread_float"]                = symbol_info_tick.spread_float
        market["ticks_bookdepth"]             = symbol_info_tick.ticks_bookdepth
        market["trade_calc_mode"]             = symbol_info_tick.trade_calc_mode
        market["trade_mode"]                  = symbol_info_tick.trade_mode
        market["start_time"]                  = symbol_info_tick.start_time
        market["expiration_time"]             = symbol_info_tick.expiration_time
        market["trade_stops_level"]           = symbol_info_tick.trade_stops_level
        market["trade_freeze_level"]          = symbol_info_tick.trade_freeze_level
        market["trade_exemode"]               = symbol_info_tick.trade_exemode
        market["swap_mode"]                   = symbol_info_tick.swap_mode
        market["swap_rollover3days"]          = symbol_info_tick.swap_rollover3days
        market["margin_hedged_use_leg"]       = symbol_info_tick.margin_hedged_use_leg
        market["expiration_mode"]             = symbol_info_tick.expiration_mode
        market["filling_mode"]                = symbol_info_tick.filling_mode
        market["order_mode"]                  = symbol_info_tick.order_mode
        market["order_gtc_mode"]              = symbol_info_tick.order_gtc_mode
        market["option_mode"]                 = symbol_info_tick.option_mode
        market["option_right"]                = symbol_info_tick.option_right
        market["bid"]                         = symbol_info_tick.bid
        market["bidhigh"]                     = symbol_info_tick.bidhigh
        market["bidlow"]                      = symbol_info_tick.bidlow
        market["ask"]                         = symbol_info_tick.ask
        market["askhigh"]                     = symbol_info_tick.askhigh
        market["asklow"]                      = symbol_info_tick.asklow
        market["last"]                        = symbol_info_tick.last
        market["lasthigh"]                    = symbol_info_tick.lasthigh
        market["lastlow"]                     = symbol_info_tick.lastlow
        market["volume_real"]                 = symbol_info_tick.volume_real
        market["volumehigh_real"]             = symbol_info_tick.volumehigh_real
        market["option_strike"]               = symbol_info_tick.option_strike
        market["point"]                       = symbol_info_tick.point
        market["trade_tick_value"]            = symbol_info_tick.trade_tick_value
        market["trade_tick_value_profit"]     = symbol_info_tick.trade_tick_value_profit
        market["trade_tick_value_loss"]       = symbol_info_tick.trade_tick_value_loss
        market["trade_tick_size"]             = symbol_info_tick.trade_tick_size
        market["trade_contract_size"]         = symbol_info_tick.trade_contract_size
        market["trade_accrued_interest"]      = symbol_info_tick.trade_accrued_interest
        market["trade_face_value"]            = symbol_info_tick.trade_face_value
        market["trade_liquidity_rate"]        = symbol_info_tick.trade_liquidity_rate
        market["volume_min"]                  = symbol_info_tick.volume_min
        market["volume_max"]                  = symbol_info_tick.volume_max
        market["volume_step"]                 = symbol_info_tick.volume_step
        market["volume_limit"]                = symbol_info_tick.volume_limit
        market["swap_long"]                   = symbol_info_tick.swap_long
        market["swap_short"]                  = symbol_info_tick.swap_short
        market["margin_initial"]              = symbol_info_tick.margin_initial
        market["margin_maintenance"]          = symbol_info_tick.margin_maintenance
        market["session_volume"]              = symbol_info_tick.session_volume
        market["session_turnover"]            = symbol_info_tick.session_turnover
        market["session_interest"]            = symbol_info_tick.session_interest
        market["session_buy_orders_volume"]   = symbol_info_tick.session_buy_orders_volume
        market["session_sell_orders_volume"]  = symbol_info_tick.session_sell_orders_volume
        market["session_open"]                = symbol_info_tick.session_open
        market["session_close"]               = symbol_info_tick.session_close
        market["session_aw"]                  = symbol_info_tick.session_aw
        market["session_price_settlement"]    = symbol_info_tick.session_price_settlement
        market["session_price_limit_min"]     = symbol_info_tick.session_price_limit_min
        market["session_price_limit_max"]     = symbol_info_tick.session_price_limit_max
        market["margin_hedged"]               = symbol_info_tick.margin_hedged
        market["price_change"]                = symbol_info_tick.price_change
        market["price_volatility"]            = symbol_info_tick.price_volatility
        market["price_theoretical"]           = symbol_info_tick.price_theoretical
        market["price_greeks_delta"]          = symbol_info_tick.price_greeks_delta
        market["price_greeks_theta"]          = symbol_info_tick.price_greeks_theta
        market["price_greeks_gamma"]          = symbol_info_tick.price_greeks_gamma
        market["price_greeks_vega"]           = symbol_info_tick.price_greeks_vega
        market["price_greeks_rho"]            = symbol_info_tick.price_greeks_rho
        market["price_greeks_omega"]          = symbol_info_tick.price_greeks_omega
        market["price_sensitivity"]           = symbol_info_tick.price_sensitivity
        market["basis"]                       = symbol_info_tick.basis
        market["category"]                    = symbol_info_tick.category
        market["currency_base"]               = symbol_info_tick.currency_base
        market["currency_profit"]             = symbol_info_tick.currency_profit
        market["currency_margin"]             = symbol_info_tick.currency_margin
        market["bank"]                        = symbol_info_tick.bank
        market["description"]                 = symbol_info_tick.description
        market["exchange"]                    = symbol_info_tick.exchange
        market["formula"]                     = symbol_info_tick.formula
        market["isin"]                        = symbol_info_tick.isin
        market["name"]                        = symbol_info_tick.name
        market["page"]                        = symbol_info_tick.page
        market["path"]                        = symbol_info_tick.path
        
        response = requests.post(server_url + "update_market/",json=market)
        json_response = response.json()
        print("json_response ",json_response )

    position_get_no_param = mt5.positions_get()
    # 更新position order   
    for trade_position in position_get_no_param:
        position = {}
        position["ticket"] = trade_position.ticket
        position["time"] = trade_position.time
        position["time_msc"] = trade_position.time_msc
        position["time_update"] = trade_position.time_update
        position["time_update_msc"] = trade_position.time_update_msc
        position["type"] = trade_position.type
        position["magic"] = trade_position.magic
        position["identifier"] = trade_position.identifier
        position["reason"] = trade_position.reason
        position["volume"] = trade_position.volume
        position["price_open"] = trade_position.price_open
        position["sl"] = trade_position.sl
        position["tp"] = trade_position.tp
        position["price_current"] = trade_position.price_current
        position["swap"] = trade_position.swap
        position["profit"] = trade_position.profit
        position["symbol"] = trade_position.symbol
        position["comment"] = trade_position.comment
        position["external_id"] = trade_position.external_id
        response = requests.post(server_url + "update_position_order/",json=position)
        json_response = response.json()
        print("position_response ",json_response )
        
    # 更新 pending order
    pending_orders = mt5.orders_get()
    for pending_order in pending_orders:
        pending = {}
        pending["ticket"] = pending_order.ticket
        pending["time_setup"] = pending_order.time_setup
        pending["type"] = pending_order.type
        pending["state"] = pending_order.state
        pending["time_expiration"] = pending_order.time_expiration
        pending["time_done"] = pending_order.time_done
        pending["time_setup_msc"] = pending_order.time_setup_msc
        pending["time_done_msc"] = pending_order.time_done_msc
        pending["type_filling"] = pending_order.type_filling
        pending["type_time"] = pending_order.type_time
        pending["magic"] = pending_order.magic
        pending["reason"] = pending_order.reason
        pending["position_id"] = pending_order.position_id
        pending["position_by_id"] = pending_order.position_by_id
        pending["volume_initial"] = pending_order.volume_initial
        pending["volume_current"] = pending_order.volume_current
        pending["price_open"] = pending_order.price_open
        pending["sl"] = pending_order.sl
        pending["tp"] = pending_order.tp
        pending["price_current"] = pending_order.price_current
        pending["price_stoplimit"] = pending_order.price_stoplimit
        pending["symbol"] = pending_order.symbol
        pending["comment"] = pending_order.comment
        pending["external_id"] = pending_order.external_id

        response = requests.post(server_url + "update_pending_order/",json=pending)
        json_response = response.json()
    

    # 更新 deal order
    from_date = datetime(2020,11,30)
    deal_orders = mt5.history_deals_get(from_date, datetime.now())
    for deal in deal_orders:
        deal_data = {}
        deal_data["ticket"] = deal.ticket
        deal_data["order"] = deal.order
        deal_data["time"] = deal.time
        deal_data["time_msc"] = deal.time_msc
        deal_data["type"] = deal.type
        deal_data["entry"] = deal.entry
        deal_data["magic"] = deal.magic
        deal_data["reason"] = deal.reason
        deal_data["position_id"] = deal.position_id
        deal_data["volume"] = deal.volume
        deal_data["price"] = deal.price
        deal_data["commission"] = deal.commission
        deal_data["swap"] = deal.swap
        deal_data["profit"] = deal.profit
        deal_data["fee"] = deal.fee
        deal_data["symbol"] = deal.symbol
        deal_data["comment"] = deal.comment
        deal_data["external_id"] = deal.external_id


        response = requests.post(server_url + "update_deal_order/",json=deal_data)
        json_response = response.json()
Ejemplo n.º 7
0
#____________retriving no of historical trades___________#
fromDate = dt.datetime(2019, 8, 1)
toDate = dt.datetime.now()
historyOrder = mt5.history_orders_total(
    fromDate, toDate)  #retrives number of trades in time range
print("Total history orders:", historyOrder)

#_________retriving historical order information__________#
orerData = mt5.history_orders_get(fromDate, toDate)  #by date range
for i in orerData:
    print(i)

orderData2 = mt5.history_orders_get(ticket=38110138)  #by tickets
for data in orderData2:
    print('\n', data)

#______total no of historical deals(executed orders)_______#
deals = mt5.history_deals_total(fromDate, toDate)
print("\nTotal deals:", deals)

#__________get information of historical deals___________#
deals = mt5.history_deals_get(fromDate, toDate)  #by date range
for i in deals:
    print(i)

deal = mt5.history_deals_get(ticket=17371248)  #by tickets
print(deal[0], '\n')
for i in deal[0]:
    print(i)

mt5.shutdown()
Ejemplo n.º 8
0
def f_leer_archivo():
    Accounts = pd.read_excel('files/Accounts.xlsx')
    Names = list(Accounts['Name'])
    print('Los nombres son:', Names)
    Name = input('Ingrese nombre del integrante a analizar: ')

    if Name in Names:
        user = Accounts[Accounts['Name'] == Name]
        try:
            userid = int(user['Account_ID'].values[0])
            userpass = str(user['Password'].values[0])
            a = mt5.initialize(login=userid,
                               server='MetaQuotes-Demo',
                               password=userpass)
        except:
            try:
                userid = int(input('Ingrese su usuario en mt5: '))
                userpass = str(getpass('Ingrese su contraseña: '))
                a = mt5.initialize(login=userid,
                                   server='MetaQuotes-Demo',
                                   password=userpass)
            except:
                return print('La acción no fue válida, verifique sus datos')
        #Initialize MT5

        if a:
            print('Se inició con éxito la cuenta')
            pos = mt5.history_deals_get(datetime(2020, 1, 1), datetime.now())
            key = pos[0]._asdict().keys()
            orders = pd.DataFrame(list(pos), columns=key)

            Dates = pd.DataFrame({'Position': orders['position_id'].unique()})
            opentime = []
            closetime = []
            price_o = []
            price_c = []
            for i in orders['position_id'].unique():
                dates = np.array(orders['time'][orders['position_id'] == i])
                prices = np.array(orders['price'][orders['position_id'] == i])
                if len(dates) == 2:
                    opentime.append(dates[0])
                    closetime.append(dates[1])
                    price_o.append(prices[0])
                    price_c.append(prices[1])
                else:
                    opentime.append(dates[0])
                    closetime.append(0)
                    price_o.append(prices[0])
                    price_c.append(prices[-1])

            Dates['Time'] = opentime
            Dates['Symbol'] = [
                np.array(orders['symbol'][orders['position_id'] == i])[0]
                for i in orders['position_id'].unique()
            ]
            type_op = [
                np.array(orders['type'][orders['position_id'] == i])[0]
                for i in orders['position_id'].unique()
            ]
            Dates['Type'] = ['buy' if i == 0 else 'sell' for i in type_op]
            Dates['Volume'] = [
                np.array(orders['volume'][orders['position_id'] == i])[0]
                for i in orders['position_id'].unique()
            ]
            Dates['Price'] = price_o
            Dates['Time.1'] = closetime
            Dates['Price.1'] = price_c
            Dates['Commission'] = [
                np.array(orders['commission'][orders['position_id'] == i])[-1]
                for i in orders['position_id'].unique()
            ]
            Dates['Swap'] = [
                np.array(orders['swap'][orders['position_id'] == i])[-1]
                for i in orders['position_id'].unique()
            ]
            Dates['Profit'] = [
                np.array(orders['profit'][orders['position_id'] == i])[-1]
                for i in orders['position_id'].unique()
            ]
            Dates = Dates[Dates['Time.1'] != 0]
            return Dates.sort_values(by='Time.1',
                                     ascending=True).reset_index(drop=True)

        else:
            print('No se pudo acceder a la cuenta')
    else:
        print('El nombre no fue válido, intente de nuevo')