MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 52

 
Vladimir Perervenko:

A criação de uma entidade(ligação) é possível em princípio? Não creio que seja tão necessário, mas para referência futura.

Ao instalar outro guião (Py) no gráfico, o primeiro é reiniciado. Será assim que deve ser?

Penso que não seria difícil criar outra entidade, seria apenas mais um nível de abstracção para a liberdade.

Isto já não é considerado como utilizando a libertação do terminal, mas como uma verdadeira porta de acesso aos terminais do lado python.

É melhor colocar mais utilidade na própria liberdade :) agora.

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

Penso que não seria difícil criar outra entidade, seria apenas mais um nível de abstracção para a liberdade.

Isto já não é considerado como utilizando a libertação do terminal, mas como uma verdadeira porta de acesso aos terminais do lado python.

É melhor colocar mais utilidade na própria liberdade :) agora.

O meu arranque do terminal falha regularmente, não descobri a razão. Devo ter um insecto algures com a instalação da pitão. Usarei a lib como porta de entrada para o terminal (via serviços). Vou pô-lo à prova na segunda-feira.

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

mt5.initialize(blabla, portable=True)- não ajudou muito, ainda pede o último terminal iniciado no sistema.

Tentar sem nomear o caminho do parâmetro , passar caminho como primeiro parâmetro sem nome:

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:

tentar sem nomear caminho de parâmetro , passar caminho como primeiro parâmetro sem nome:

Funcionou correctamente. Obrigado.

Bug?

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

Tudo funcionou correctamente. Obrigado. (risos)

Um insecto?

Não é um insecto.

O primeiro parâmetro não é nomeado e é fixo. Mas só para o caso de ser nomeado na próxima versão.

 
Renat Fatkhullin:

Não é um insecto.

O primeiro parâmetro é anónimo e fixo. Mas só para o caso de ser nomeado na próxima versão.

Aha, por isso não compreendi especificamente a documentação.

Obrigado.

 
Precisa realmente de alguma coisa para tirar o "início de um novo bar" do terminal. Os indicadores não são tão importantes. A Python acaba por ter também uma biblioteca com cálculo de indicadores.
 

Pergunta. Há uma função position_get. A documentação descreve três modos do seu funcionamento.

posições_get

Obtém posições abertas com filtragem por símbolo ou bilhete. Existem 3 modos de chamada diferentes.


Chamado sem parâmetros. Devolve as posições em aberto para todos os símbolos.

posições_get()

Chamada com a especificação de um símbolo, para o qual pretende obter posições abertas.

posições_get(

symbol="SYMBOL" // nome do símbolo

)

Chamada especificando o bilhete da posição.

posições_get(

bilhete=TICKET // bilhete

)

Parâmetros

symbol="SYMBOL" [em] O nome do símbolo. Parâmetro nomeado opcional. Se for especificado um símbolo, o parâmetro do bilhete é ignorado.

bilhete=TICKET [em] O bilhete de posição (POSITION_TICKET). Parâmetro nomeado opcional.


Variant positions_get() - sem perguntas, funciona bem.

Mas os outros dois não devolvem nada.

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

A segunda variante da chamada de retorno:

        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 também devolve uma estranha construção:

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, '']

Onde procurar? O que é que está errado?

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

Uma chamada com um bilhete de posição.

posições_get(

bilhete=TICKET //ticket

)

Parâmetros

symbol="SYMBOL" [em] O nome do símbolo. Parâmetro nomeado opcional. Se for especificado um símbolo, o parâmetro do bilhete é ignorado.

bilhete=TICKET [em] O bilhete de posição (POSITION_TICKET). Parâmetro nomeado opcional.


Variant positions_get() - sem perguntas, funciona bem.

Mas os outros dois não devolvem nada.

A segunda variante de chamada:

last_error também devolve uma estranha construção:

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, '']

O que procurar? O que é que está errado?

Verifique se o seu tipo de conta é netting ou hedging. Para a rede, o bilhete de uma posição já existente não mudará, e não vale a pena procurar uma posição após a recarga utilizando o número de encomenda.

 

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

código de erro 1, isto é sucesso mt5.RES_S_OK, a próxima compilação irá escrever [1, 'Sucesso']. Códigos com valores negativos são erros mt5.RES_E_xxx.