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
E ancora - il codice... il codice... Il codice è buono... ma è anche - tattica, cicli... ;)
Il grafico non riceve un messaggio sulla creazione di una nuova barra? Non ci credo...)))
È un problema farne un evento? È una variabile predefinita almeno?
In generale, è più facile elaborare gli eventi che riempire una montagna di codice. E inoltre - con errori (i programmi senza errori non lo fanno mai!!! )))))
Sono assolutamente d'accordo con te che il nuovo bar è un evento e può (e deve) essere programmato. C'è un ramo su https://www.mql5.com/ru/forum/1031 leggilo con comodo, ma io ho lottato per anni...
Z.I. Penso che dopo aver letto questo vedrai che la nuova barra potrebbe non apparire MAI... un buco...
Di nuovo, codice... codice... Il codice è buono... ma anche le tattiche, i loop... ;)
Il grafico non riceve un messaggio sulla creazione di una nuova barra? Non ci credo...)))
È un problema farne un evento e almeno una variabile predefinita?
In generale, è più facile elaborare gli eventi che riempire una montagna di codice. E inoltre - con errori (i programmi senza errori non lo fanno mai!!! )))))
Durante i test, viene generato un errore
CTrade::PositionClose::OrderCheck: Richiesta di stop non valida
Nel mio Expert Advisor, ci sono le seguenti linee
descrizione delle variabili (nella procedura)
CTrade m_trade;
..................
posizione di chiusura
m_trade.PositionClose(_Symbol, eSlippage);
perché mostra un errore? CTrade::PositionClose::OrderCheck: Richiesta di stop non valida
SL e/o TP sbagliato
TRADE_RETCODE_INVALID_STOPS
Cosa c'entrano gli stop con la chiusura delle posizioni o mi sfugge qualcosa?
Sono assolutamente d'accordo con te che un nuovo bar è un evento e può (e deve) essere programmato. C'è un threadsu https://www.mql5.com/ru/forum/1031 che puoi leggere a tuo piacimento, ma sono anni che combatto...
Z.U. Penso che dopo aver letto questo ti sarà chiaro che la nuova barra non potrà MAI apparire... un buco...
Mi sono preso il rischio di guardare il link... Credo che valga davvero la pena leggerlo... a vostro piacimento... ;)
Questa è la ragione per volere un tale evento... Niente bar, niente evento.
In realtà, come te lo immagini? 20 timeframes x numero di simboli in 'Market Watch' e per ognuno viene generato l'evento OnNewBar? E devi processare ognuno di essi, per determinare a quale simbolo e timeframe si riferisce? Ora avete la scelta: scrivere la vostra funzione NewBar e in essa definire cosa volete ricevere le nuove barre: tutti i periodi per un simbolo, tutti i simboli per il periodo corrente o qualche caso speciale. Questo fa una funzione semplice. È meglio della funzione universale OnNewBar con molti controlli.
20 timeframes... non è il limite per un parametro lungo... riempire un'intera variabile una volta al minuto è giusto, non difficile...
Perché, OnTick guarda "x numero di caratteri nel 'Market Watch' e genera un evento per ogni..." ?????
E il controllo del bit è, credetemi, una cosa piuttosto veloce...
E anche con un evento
- nessuno mi costringerà ad elaborarlo - non c'è bisogno...
- E anche se avete un evento, nulla vi impedisce di aggiungere o sostituire "scrivete la vostra funzione NewBar e definite se volete ottenere nuove barre" - se necessario...
Anche adesso è facile da fare, se sai come farlo. Gli sviluppatori hanno promesso di riscrivere OnTrade() e aggiungervi i parametri necessari.
Nessuno impedisce che tali situazioni siano gestite localmente, in OnTick() o OnTime() - nel luogo dell'operazione di trading; o in OnTrade(), se avete bisogno di catturare azioni dell'utente o operazioni di trading non controllate direttamente dal codice.
La leggerezza è un concetto relativo e per uno si misura in grammi, per un altro in tonnellate. Nel mio Expert Advisor ho dovuto farlo COME SEMPRE (se il mio codice può essere chiamato così), perché non ci sono varianti PROSTO nel mio linguaggio ora, mentre potrebbero benissimo esistere, imho. E non ero particolarmente felice che il codice diventasse un centinaio di righe più lungo e che lo facesse sembrare più complicato.
Ecco il problema in generale:
Arriva un tick, l'indicatore mostra la necessità di chiudere, io chiudo
Quando arriva il prossimo tick, l'indicatore mostra che deve chiudere, e non so cosa fare - la posizione è già posizionata ed è impossibile scoprire cosa sta succedendo al momento, ovviamente, ma non so.
Non capisco perché questa complessità è ancora presente qui? Non capisco perché dobbiamo scrivere una tonnellata di codice nell'evento onTrade() per capire cosa è successo?
Io sono per la semplicità, e quando non c'è, mi rende triste
La leggerezza è un concetto relativo, e per uno si misura in grammi, per un altro in tonnellate. In EA ho dovuto farlo SAGGIAMENTE (se il mio codice può essere chiamato così), perché non ci sono varianti PROSTO nel linguaggio ora, mentre potrebbero benissimo esistere, imho. E non ero particolarmente felice che il codice diventasse un centinaio di righe più lungo e che lo facesse sembrare più complicato.
Ecco il problema in generale:
Arriva un tick, l'indicatore mostra la necessità di chiudere, io chiudo
Quando arriva il prossimo tick, l'indicatore mostra che dovrebbe chiudere, e non so cosa fare - la posizione è già appesa, e naturalmente posso scoprire cosa sta succedendo al momento, ma non lo so.
Non capisco perché questa complessità è ancora presente qui? Non capisco perché nell'evento onTrade() ci viene suggerito di scrivere una tonnellata di codice per capire cosa è successo?
Io sono per la semplicità, e quando non c'è, mi rende triste
L'ho fatto, il codice è meno di un centinaio di righe ... :) La soluzione è affidabile e immediatamente per multicurrency
È possibile specificare qualsiasi periodo desiderato al posto di quello in cui l'EA è in bilico. Vale a dire che gli ordini saranno effettuati non più di una volta per periodoE dopo ogni richiesta di scambio, dovremmo fare un ritardo che proibisca la richiesta di scambio entro 30 sec (per esempio). Altrimenti, l'ordine potrebbe non apparire nella cronologia al prossimo tick.
In generale, come te lo immagini? In generale, l'idea è di avere 20 timeframe x il numero di simboli nel 'Market Watch' e per ognuno di essi viene generato l'evento OnNewBar? E bisogna elaborare ogni simbolo e timeframe per determinare a quale si riferisce? Ora avete la scelta: scrivere la vostra funzione NewBar e in essa definire cosa volete ricevere le nuove barre: tutti i periodi per un simbolo, tutti i simboli per il periodo corrente o qualche caso speciale. Si ottiene una funzione specifica e non complicata. È meglio di una funzione universale OnNewBar con molti controlli.
In termini di una soluzione standard, dovrebbe essere qualcosa del genere
1. L'evento dovrebbe essere legato al grafico aperto, al suo periodo e al simbolo. L'evento deve verificarsi quando appare una nuova barra (i buchi sono ignorati).
Gli eventi devono essere gestiti in un thread (o thread) terminale separato.
PS
E così via. Naturalmente, questa è un'approssimazione senza tener conto di molte specificità...
Vladix:
In realtà il problema stesso è questo:
arriva un tick, l'indicatore mostra che deve chiudere, io faccio la chiusura
Quando arriva il prossimo tick, l'indicatore mostra che deve chiudere, e già non so cosa fare - la posizione è già appesa e, naturalmente, si può scoprire cosa sta succedendo al momento, ma in fondo alla mente.
Non capisco perché questa complessità è ancora presente qui? Non capisco perché nell'evento onTrade() ci viene suggerito di scrivere una tonnellata di codice per capire cosa è successo?
Io sono per la semplicità, e quando non ce l'hai, diventa triste
Fatto in questo modo, meno codice di un centinaio di righe... :) la soluzione è affidabile e subito per la multicurrency
Invece del periodo in cui l'EA è inattivo, possiamo specificare qualsiasi periodo desiderato. Questo significa che gli ordini non saranno effettuati più di una volta per periodo.E dopo ogni richiesta di scambio, dovremmo fare un ritardo che disabiliti la richiesta di scambio entro 30 secondi (per esempio). Altrimenti, l'ordine potrebbe non apparire nella cronologia al prossimo tick.
Mettere un ritardo - sì, accetto, quante righe di codice ci vorranno? E se stiamo parlando di multi-valuta, è necessario tenere conto del ritardo su ciascuna di esse, no?
Ho scritto il codice che risolve questo. Solo che non mi piace, così come, scusate, non mi piace il vostro. E non si tratta di pregiudizi, il punto è che non ci sono altre opzioni, semplici ed eleganti.