MetaTrader 5 Python User Group - как использовать Python в Метатрейдере - страница 52

 
Vladimir Perervenko:

А в принципе создание сущности(соединение) возможно? Не думаю, что это так нужно, но на будущее. 

При установке еще одного скрипта (Py) на график, первый сбрасывается. Так и должно быть?

Создавать еще одну сущность думаю будет не сложно, просто для либы - это будет еще один уровень абстракции.

При это уже не рассматривается использование либы с терминала, а как полноценный шлюз к терминалам со стороны python.

Лучше по больше полезностей в саму либу :) сейчас.

 
Дмитрий Прокопьев:

Создавать еще одну сущность думаю будет не сложно, просто для либы - это будет еще один уровень абстракции.

При это уже не рассматривается использование либы с терминала, а как полноценный шлюз к терминалам со стороны python.

Лучше по больше полезностей в саму либу :) сейчас.

У меня запуск с терминала сбоит регулярно, причину не выяснил. Наверное у меня где то косяк с установкой питона.. Буду использовать "либу"как шлюз к терминалу(через сервисы). С понедельника поставлю на тест.

 
Дмитрий Прокопьев:

mt5.initialize(blabla, portable=True) - особо не помогло, все равно лезет с запросом в последний запускавшийся в системе терминал.

попробуйте без именованного параметра path, передайте path первым неименованным параметром:

if mt5.initialize('/works/MT5-1', login=11111, ...):
        ...   
        mt5.shutdown()
else:
   print('error')

if mt5.initialize('/works/MT5-2', login=2222, ...):
        ...   
        mt5.shutdown()
else:
   print('error')
 
Almaz:

попробуйте без именованного параметра path, передайте path первым неименованным параметром:

Отработалось все корректно. Спасибо.

Баг?

 
Дмитрий Прокопьев:

Отработалось все корректно. Спасибо.

Баг?

Не баг.

Первый параметр не именованный и фиксированный. Но на всякий случай его будем и именованным принимать в следующей версии.

 
Renat Fatkhullin:

Не баг.

Первый параметр не именованный и фиксированный. Но на всякий случай его будем и именованным принимать в следующей версии.

Ага, значит документацию не конкретно понял.

Спасибо.

 
Очень нужно что то для получения из терминала "начало нового бара". Индикаторы не так важны. У Питона оказывается тоже есть библиотека с расчетом индикатором. 
 

Вопрос. Есть ф-ция positions_get. В документации присутствует описание трех режимов ее работы.

positions_get

Получает открытые позиции с возможностью фильтрации по символу или тикету. Существует 3 варианта вызова.


Вызов без параметров. Возвращает открытые позиции по всем символам.

positions_get()

Вызов с указанием символа, по которому нужно получить открытые позиции.

positions_get(

   symbol="SYMBOL"      // имя символа

)

Вызов с указанием тикета позиции.

positions_get(

   ticket=TICKET        // тикет

)

Параметры

symbol="SYMBOL" [in]  Имя символа. Необязательный именованный параметр. Если символ указан, то параметр ticket игнорируется.

ticket=TICKET [in]  Тикет позиции (POSITION_TICKET). Необязательный именованный параметр.


Вариант positions_get() - вопросов нет, отрабатывается отлично.

А вот два других - не возвращают ничего.

	pos_info = mt5.positions_get(symbol = "GBPUSD")	
	print(mt5.last_error())

второй вариант вызова:

        result = mt5.order_send(request)        
        if result.retcode == 0 or result.retcode == 10009:      
                pos_info = mt5.positions_get(ticket = result.order)
                print("mt5.last_error(): %s" % (mt5.last_error()))

last_error тоже возвращает странную конструкцию:

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

 Куда смотреть? Что не так?

 
Дмитрий Прокопьев:

Вызов с указанием тикета позиции.

positions_get(

   ticket=TICKET        // тикет

)

Параметры

symbol="SYMBOL" [in]  Имя символа. Необязательный именованный параметр. Если символ указан, то параметр ticket игнорируется.

ticket=TICKET [in]  Тикет позиции (POSITION_TICKET). Необязательный именованный параметр.


Вариант positions_get() - вопросов нет, отрабатывается отлично.

А вот два других - не возвращают ничего.

второй вариант вызова:

last_error тоже возвращает странную конструкцию:

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

 Куда смотреть? Что не так?

Проверьте, какой тип счета у Вас - неттинг или хеджинг. Для неттинга тикет уже существующей позиции не изменится, и искать позицию после доливки по номеру ордера нет смысла.

 

last_error тоже возвращает странную конструкцию:

код ошибки 1, это успех mt5.RES_S_OK, в следующей сборке будет писаться [1, 'Success']. Коды с отрицательными значениями - ошибки mt5.RES_E_xxx.