Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 854
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Sto armeggiando con CTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX) e mi rendo conto che non è esattamente organizzato all'interno. Si tratta di 2 codici di ritorno - bool e ResultRetcode(). RetCode non è sempre azzerato internamente prima di restituire false, quindi se PositionClose dà false, RetCode può anche restituire TRADE_RETCODE_DONE. Sarebbe bello per gli sviluppatori sincronizzare questi 2 valori di ritorno.
Codice + esempio + log.
COrderInfo::OrderType() restituisce sempre 0.
Per controllarlo, puoi inserire manualmente qualsiasi ordine pendente (BuyStop, SellStop, ...),
poi inserirlo nello script.
Forse qualcosa con la tabella delle funzioni virtuali? Nel debug, arrivo solo all'int virtuale CObject::Type()
PS. L'ho già capito da solo. COrderInfo ha 2 metodi simili: Type() e OrderType().
Codice + esempio + registri.
Vedi che situazione intendo.
Non vedo alcun metodo SetResultRetcode e SetResultComment in CTrade per resettarli prima di ogni nuova operazione.
Devo ereditare la mia classe, dove aggiungo un solo metodo
Vedi che situazione intendo.
Non vedo alcun metodo SetResultRetcode e SetResultComment in CTrade per resettarli prima di ogni nuova operazione.
Per quale motivo? Funzioni completamente inutili.
Primo: si spara in aria - si invia un ordine di scambio senza prima controllare - senza controllare ciò che l'operazione ha restituito. Guardate il riferimento:PositionClose è di tipo bool.
In secondo luogo, guardiamo la catena di chiusura della posizione: quando la posizione non viene trovata (non può essere selezionata dal ticket specificato), viene restituito "false".
A quel punto, le strutture non vengono cancellate da nessuna parte - perché non ha senso - dopo tutto, la posizione non poteva essere selezionata prima, quindi non ci sono informazioni nelle strutture.
Qual è il punto? Funzioni completamente inutili.
Primo: si spara in aria - si invia un ordine di scambio senza prima controllare - senza controllare ciò che l'operazione ha restituito. Guardiamo il riferimento:PositionClose è di tipo bool.
In secondo luogo, guardiamo la catena di chiusura della posizione: quando la posizione non viene trovata (non può essere selezionata dal ticket specificato), viene restituito "false".
Allo stesso tempo, le strutture non vengono cancellate da nessuna parte, poiché non ha senso - dopo tutto, la posizione non poteva essere selezionata prima, quindi non ci sono informazioni nelle strutture.
1) Possiamo anche dire che ResetLastError() è una funzione assolutamente inutile.
2) C'è un controllo del risultato restituito. Immaginate, per analogia, di chiamare qualche funzione WinAPI, questa restituisce un errore, e GetLastError() (analogo di ResultRetcode) restituisce qualsiasi ultimo codice.
Se aggiungo un controllo prima di chiamare PositionClose (cosa che farò), non sovrascrive nessun altro controllo prima di altre chiamate, quando il RetCode non cambierà.
Il mio Expert Advisor scrive informazioni nel log. Tutto ciò di cui ho bisogno è di scrivere in log sane ResultRetcode e ResultComment se qualche chiamata restituisce false.
1) Potremmo anche dire che ResetLastError() è completamente inutile.
2) C'è un controllo dei risultati di ritorno. Immaginate, per analogia, di chiamare qualche funzione WinAPI, questa restituisce un errore, e GetLastError() (analogo di ResultRetcode) restituisce qualsiasi ultimo codice.
Se aggiungo un controllo prima di chiamare PositionClose (cosa che farò), non sovrascrive nessun altro controllo prima di qualsiasi altra chiamata quando il RetCode non cambia.
Il mio Expert Advisor scrive informazioni nel log. Tutto quello che devo fare è scrivere ResultRetcode e ResultComment sani nel log se qualche chiamata restituisce false.
Leggete nell'aiuto della classe CTrade quando avete bisogno dicontrollare il risultato dell'esecuzione della richiesta di compravendita (codice di ritorno del server di compravendita) chiamando il metodoResultRetcode().
Leggere nell'aiuto della classe CTrade quandocontrollare il risultato dell'esecuzione della richiesta di compravendita (codice di ritorno del server di compravendita) chiamando il metodoResultRetcode().
Si può affermare che.
1) Se PositionClose restituisce false, allora il Retcode non viene mai riempito?
2) Se PositionClose ritorna true, allora il Retcode è sempre popolato?
Ordine -> commercio -> posizione. Prendi il prezzo di apertura della posizione.
Potete mostrare un'immagine di come questo Ordine -> commercio -> posizione, è al di sotto di dove i commerci sono scritti quindi non permette di copiare lì
Puoi mostrare un'immagine di come questo Order -> trade -> position, è in basso dove sono scritti i trade e quindi non ti permette di copiare.
Per favore, riscrivi la tua domanda o metti dei segni di punteggiatura, o meglio ancora aggiungi un'immagine cosa, dove e chi. Altrimenti si scopre che vedo lettere familiari, ma non riesco a capire il significato e il tuo punto.