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
if (err==146)
{
while (IsTradeContextBusy())
{
if (IsTradeAllowed()) break;
else
Sleep(1000*1,1);
}}
Penso che questa sia una soluzione più veloce. Per favore, condividete i vostri commenti.
Grazie.
Cosa ne pensi di questa variante:
Questa mi sembra una soluzione più rapida, io lavoro in questo modo. Commento.
Grazie.
Mi andrà bene. Con comprensione. La pausa è minore, funziona più velocemente... Ma c'è una ridondanza ingiustificata nella tua versione.
La funzione IsTradeContextBusy restituisce il flag di occupazione del thread commerciale. Non c'era affatto una tale funzione prima della costruzione del 195°. Così abbiamo usato la funzione IsTradeAllowed che restituisce un segno che l'EA è autorizzato a commerciare e il flusso commerciale è libero.
Permettiamo all'EA di fare trading selezionando la casella "Allow EA to trade" nella finestra di dialogo delle proprietà dell'EA (tasto F7).
L'errore 146 (Trade Stream is busy) non ha niente a che fare con il fatto di permettere all'Expert Advisor di fare trading. Perciò, rivediamo le proprietà della funzione IsTradeAllowed nella misura in cui si riferiscono solo al thread commerciale.
Quindi, il thread di scambio è libero e la funzione IsTradeAllowed restituisce True. Il thread commerciale è occupato, la funzione IsTradeAllowed restituisce False. Ora diamo un'occhiata ai valori restituiti dalla funzione IsTradeContextBusy. Il thread commerciale è libero, la funzione IsTradeContextBusy restituisce False. Il thread commerciale è occupato, la funzione IsTradeContextBusy restituisce True. Possiamo vedere che per gli stessi stati di flusso commerciale, i valori delle funzioni IsTradeAllowed e IsTradeContextBusy sono opposti. Inoltre, queste funzioni si duplicano a vicenda piuttosto che completarsi a vicenda per quanto riguarda gli stati dei flussi commerciali. Pertanto, uno di loro può essere escluso. Quale? La funzione IsTradeAllowed, come ho già detto sopra, oltre al flag di stato del flusso di commercio, restituisce anche il flag che permette all'EA di commerciare che in questa situazione, cioè quando si gestisce l'errore 146 (Trade Flow è occupato), non è necessario per noi. Pertanto, sarà necessario e sufficiente utilizzare solo una funzione IsTradeContextBusy. Se eseguite le abbreviazioni di cui sopra, il vostro codice sarà ridotto al mio:
con la sola differenza della dimensione della pausa. Ma questa è una questione di gusti, preferenze personali, stile di trading e così via. Si potrebbe mettere una pausa di 0,1 secondi. Non è una questione di principio... Preferisco solo 11 secondi.Sono stati trovati due errori nella funzione SetOrder:
Attenzione! Il post con la funzione SetOrder per il trading online è stato corretto. La funzione è un po' più lunga. Non entrava in tutto il post, quindi ha dovuto essere spostato nel rimorchio.
In questo post ho deciso di dare i punti principali spiegando come funziona la funzione SetOrder. Io stesso non lavoro con gli ordini, cioè qui sono nel territorio di qualcun altro. Forse qualcuno che sa come funziona la funzione SetOrder potrà suggerire miglioramenti o trovare errori.
1. Nelle prime righe di codice, le variabili locali sono dichiarate e alcune di esse sono inizializzate. Per esempio, in lsComm, vengono scritti il nome dell'EA e il nome del timeframe restituito dalla funzione GetNameTF. A proposito, non mi soffermerò su funzioni come GetNameOP, GetNameTF, Message, ecc.
2. Controllo dei parametri ricevuti. Se sy è vuoto, viene inizializzato con il nome dello strumento corrente. La variabile per il colore dell'icona sul grafico è inizializzata dal tipo di operazione. Se il tempo di scadenza non nullo dell'ordine è inferiore al tempo corrente, viene azzerato.
3. il corpo del ciclo di tentativi di trading, il cui numero è limitato dal valore della variabile globale NumberOfTry. Le operazioni eseguite all'interno del ciclo principale della funzione SetOrder vanno oltre.
4. Se la funzione SetOrder non viene eseguita nel tester, ha la possibilità di terminare il suo funzionamento. L'attesa del ciclo di rilascio del flusso commerciale viene eseguita qui. Le variabili dell'ambiente di mercato vengono aggiornate e viene registrata l'ora corrente.
5. Invio di una richiesta a un server commerciale. Se il biglietto è positivo, la funzione SetOrder viene terminata.
6. Se il biglietto è negativo, viene eseguita l'elaborazione degli errori di esecuzione.
7. In caso di errori 128 (La data del timeout è scaduta), 142 (L'ordine è stato accodato) e 143 (Ordine accettato dal commerciante per l'esecuzione) facciamo una pausa di 66 secondi. Dopo la pausa, utilizzando la funzione ExistOrders (che descriveremo più avanti) controlliamo se l'ordine è già stato impostato nell'intervallo di tempo tra la richiesta del server e il momento attuale. Se l'ordine è stato impostato, uscite dalla funzione.
8. La dimensione dell'oggetto e i prezzi Bid e Ask sono memorizzati nelle variabili locali.
9. In caso di errore 130 (stop errato) i livelli di prezzo dell'ordine, stop e take out sono corretti se possibile.
10. Le informazioni, che possono aiutare a risolvere il problema o a trovare l'errore in seguito, vengono visualizzate nel rapporto.
Alla fine elaboriamo altri errori. Alcuni mostrano una lunga pausa (5 minuti), altri bloccano l'Expert Advisor, altri permettono ulteriori tentativi di trading, ecc.
Questo è tutto! Fine della descrizione!
La funzione ExistOrders().
Restituisce un flag per l'esistenza di un ordine. Risponde alla domanda se l'ordine è impostato o no. Puoi usare questa funzione per richiedere qualsiasi ordine, così come altri più specifici. Il filtro di richiesta è configurato utilizzando i parametri della funzione:
Esempi di come usare la funzione ExistOrders().
1. Verificare la disponibilità di qualsiasi ordine
2. Controlla la disponibilità di qualsiasi ordine su qualsiasi strumento sul grafico corrente
3. Controlla la presenza di un ordine BuyLimit su qualsiasi strumento
4. Controlla se c'è un ordine SellStop con il numero magico 123456 su EURUSD
5. Controlla la disponibilità di qualsiasi ordine con un tempo di preparazione di 2 ore o meno
Nel trailer c'è uno script per testare la funzione ExistOrders. I primi 4 esempi nello script sono commentati.Attenzione! Nel post del 12.03.2008 07:24 ho sostituito l'allegato SetOrder.mq4