![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Pubblica il tuo codice dove ottieni l'OrderTicket per fare il nome.
( Quando qualcuno ha bisogno di un po' di codice - ritardo a postarlo velocemente - perché uso le funzioni OBJECT_****, è un po' diverso dalle documentazioni degli oggetti )
Il codice sottostante è in OnTick().
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(Symbol()!=OrderSymbol()) continue;
ObjectCreate(0,"#"+IntegerToString(OrderTicket())+" -"+"Object Button",OBJ_BUTTON,0,0,0);
}
Ora, provo a chiamare quell'oggetto con OnChartEvent() come sotto.
{
// when click this button - do something...
}
Grazie in anticipo.
non è all'interno dell'orderloop quindi non conoscerebbe l'OrderTicket().
Quindi, non c'è nessuna possibilità?
Molte cose sono possibili. Ma non mi è chiaro cosa state cercando di ottenere. Cos'è questo pulsante? Cosa vuoi fare quando viene cliccato?
Probabilmente puoi ottenere il risultato desiderato, ma il tuo approccio potrebbe dover essere cambiato.
Molte cose sono possibili. Ma non mi è chiaro cosa state cercando di ottenere. Cos'è questo pulsante? Cosa vuoi fare quando viene cliccato?
Probabilmente puoi ottenere il risultato desiderato, ma il tuo approccio potrebbe dover essere cambiato.
Il mio scopo è questo oggetto pulsante potrebbe mostrare i biglietti nubers e il loro profitto quando li clicco, quella nuvola di ordine si chiude.
Ho scritto questo commento da un dispositivo mobile. Quindi, inizierò la ricerca su questo problema dopo 10 ore più tardi. Grazie per i vostri commenti.
Il mio scopo è questo oggetto pulsante potrebbe mostrare i biglietti nubers e il loro profitto quando faccio clic su di loro, quella nuvola ordine chiudere.
Ho scritto questo commento da un dispositivo mobile. Quindi, inizierò la ricerca su questo problema dopo 10 ore più tardi. Grazie per i vostri commenti.
Avere un tag unico nei nomi degli oggetti che identifica questi pulsanti. Sembra che tu stia usando "#".
Quindi estrarre il numero d'ordine dal resto del nome dell'oggetto o dal testo del pulsante.
Non c'è bisogno di usare OrderTicket() in questa fase.
I suoi oggetti sono identificati dall'orderticket.
In modo che ogni oggetto abbia il numero del biglietto nel suo nome di stringa per poter trovare a quale ordine l'oggetto appartiene.
Questo significa che ogni oggetto avrà "#" nel suo nome di stringa.
Quindi, essenzialmente, al clic di un pulsante deve prima estrarre il numero del biglietto d'ordine dal nome della stringa dell'oggetto, e poi eseguire l'orderelectloop, e quando l'orderticket selezionato corrisponde al numero dell'orderticket estratto dal nome della stringa del pulsante, avrà trovato l'ordine.
Oppure può semplicemente
Per selezionare l'ordine all'interno dell'evento grafico.
Ora sarebbe molto più semplice se desse all'oggetto solo il numero/nome del biglietto e nient'altro.
Perché allora può semplicemente selezionare direttamente il biglietto o confrontare i numeri.
L'ultimo giorno ho provato OrderSelect() Loop. Ora prima lo proverò ancora una volta presto.
Poi ricercherò profondamente i vostri ultimi commenti.
Grazie per il vostro tempo prezioso.
Ho provato il codice sottostante nel mio file test.mq4, quindi il codice sottostante funziona perfettamente, e finora non ho affrontato alcun problema, ma lo sto ancora testando.
D: Puoi migliorare il codice qui sotto se è brutto, per favore?
{
for(i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol()) continue;
if(sparam=="#"+IntegerToString(OrderTicket())+" -"+"Object Button")
{
if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,CLR_NONE))
{
Print("# Error ",GetLastError());
}
}
}
}
Grazie in anticipo.
(Ci sto lavorando)
Un esame sommario suggerisce che dovrebbe funzionare. Ma si potrebbe migliorare l'efficienza.
Pensate a quanti oggetti diversi avete disegnato sul vostro grafico. Se clicchi *qualsiasi* di questi oggetti, dovrai fare un loop su ogni singolo ordine e cercare di trovare una corrispondenza. Molti oggetti probabilmente non hanno nulla a che fare con gli ordini. Questo è inefficiente.
Ecco perché ho suggerito di controllare il primo carattere di sparam per "#". Questo identifica automaticamente l'oggetto come collegato ad un ordine.
Inoltre, non c'è bisogno di fare un ciclo attraverso gli ordini. Il nome dell'oggetto e/o il testo dell'oggetto contengono già il numero del biglietto. Quindi estrai il numero del biglietto da lì e chiudi l'ordine
Esempio:
Si apre un ordine. Gli viene dato il numero di ticket 12345
Crea un OBJ_BUTTON con nome"#12345".
Il codice in OnChartEvent() sarebbe qualcosa come questo (non compilato, non testato, a notte fonda...):
{
int ticket=(int)StringSubstr(sparam,1); // extract the ticket number
if(OrderSelect(ticket,SELECT_BY_TICKET)) // select the order
{
if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,CLR_NONE)) // close the order
{
Print("# Error ",GetLastError());
}
}
}