MetaTrader 5 Python User Group - Come usare Python in Metatrader - pagina 52

 
Vladimir Perervenko:

È possibile in linea di principio creare un'entità (connessione)? Non credo che sia così necessario, ma per riferimento futuro.

Quando si installa un altro script (Py) sul grafico, il primo viene resettato. È così che dovrebbe essere?

Non penso che sarebbe difficile creare un'altra entità, sarebbe solo un altro livello di astrazione per la lib.

Questo non è più considerato l'utilizzo della lib dal terminale, ma come un vero e proprio gateway per i terminali sul lato python.

Meglio mettere più utilità nella lib stessa :) ora.

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

Non penso che sarebbe difficile creare un'altra entità, sarebbe solo un altro livello di astrazione per la lib.

Questo non è più considerato l'utilizzo della lib dal terminale, ma come un vero e proprio gateway per i terminali sul lato python.

Meglio mettere più utilità nella lib stessa :) ora.

Il mio avvio del terminale fallisce regolarmente, non ho capito la ragione. Devo avere un bug da qualche parte con l'installazione di python... Userò lib come gateway per il terminale (tramite servizi). Lo metterò alla prova lunedì.

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

mt5.initialize(blabla, portable=True)- non ha aiutato molto, chiede ancora l'ultimo terminale avviato nel sistema.

Prova senza parametro nominato percorso, passa percorso come primo parametro senza 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:

prova senza parametro nominato path, passa path come primo parametro senza nome:

Ha funzionato correttamente. Grazie.

Bug?

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

Tutto ha funzionato correttamente. Grazie.

Un bug?

Non è un bug.

Il primo parametro non ha nome ed è fisso. Ma nel caso sarà nominato nella prossima versione.

 
Renat Fatkhullin:

Non è un bug.

Il primo parametro è senza nome e fisso. Ma nel caso sarà nominato nella prossima versione.

Aha, quindi non ho capito la documentazione in modo specifico.

Grazie.

 
Ho davvero bisogno di qualcosa per far uscire dal terminale "l'inizio di un nuovo bar". Gli indicatori non sono così importanti. Python sembra avere anche una libreria con il calcolo degli indicatori.
 

Domanda. C'è una funzione positions_get. La documentazione descrive tre modalità di funzionamento.

posizioni_get

Ottiene posizioni aperte con filtraggio per simbolo o biglietto. Può essere chiamato in 3 modi diversi.


Chiamato senza parametri. Restituisce le posizioni aperte per tutti i simboli.

posizioni_get()

Chiama specificando un simbolo, per il quale vuole ottenere posizioni aperte.

posizioni_get(

symbol="SYMBOL" // nome del simbolo

)

Chiamata che specifica il biglietto della posizione.

posizioni_get(

ticket=TICKET // ticket

)

Parametri

symbol="SYMBOL" [in] Il nome del simbolo. Parametro opzionale con nome. Se viene specificato un simbolo, il parametro del biglietto viene ignorato.

ticket=TICKET [in] La posizione del biglietto (POSITION_TICKET). Parametro opzionale con nome.


Variante positions_get() - nessuna domanda, funziona bene.

Ma gli altri due non restituiscono nulla.

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

La seconda variante di callback:

        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 restituisce anche uno strano costrutto:

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

Dove cercare? Cosa c'è che non va?

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

Una chiamata con un biglietto di posizione.

posizioni_get(

ticket=TICKET //ticket

)

Parametri

symbol="SYMBOL" [in] Il nome del simbolo. Parametro opzionale con nome. Se viene specificato un simbolo, il parametro del biglietto viene ignorato.

ticket=TICKET [in] Il biglietto di posizione (POSITION_TICKET). Parametro opzionale con nome.


Variante positions_get() - nessuna domanda, funziona bene.

Ma gli altri due non restituiscono nulla.

La seconda variante di chiamata:

last_error restituisce anche uno strano costrutto:

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

Cosa cercare? Cosa c'è che non va?

Controlla se il tuo tipo di conto è netting o hedging. Per il netting, il ticket di una posizione già esistente non cambierà, e non ha senso cercare una posizione dopo il rabbocco usando il numero d'ordine.

 

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

codice di errore 1, questo è successo mt5.RES_S_OK, la prossima build scriverà [1, 'Success']. I codici con valori negativi sono errori mt5.RES_E_xxx.