Caratteristiche utili da KimIV - pagina 126

 
khorosh:
Mettiti nella sua posizione. La vita in terra straniera, lontana dalla patria, non passa. Sono irritabile, arrabbiato con me stesso per aver fatto un errore irreparabile diventando un lavoratore ospite).
Il controllo degli errori funziona correttamente, ma finora nessun errore, nonostante i numerosi tentativi di ostacolare il normale funzionamento. Ho una protezione sufficiente contro tutti i possibili imprevisti. Di nuovo, il futuro lo mostrerà!
 
artmedia70:

Ho deliberatamente reso if(OrderSelect(i,SELECT_BY_POS)) un blocco separato. Per restituire il valore dell'errore durante il debug. else {// scrivi l'errore di selezione come vuoi e ritorna da esso, per esempio EMPTY}.

E pensiamo a una situazione in cui c'è un errore di selezione di un ordine da piazzare nel mercato. Discutiamone. Non ne ho ancora incontrato uno.

Roger:

E nominare almeno un motivo per cui un ciclo d'ordine creato correttamente può restituire "falso".

Oops, non ho notato che Artem ha già chiesto, oops. Eppure.

Che differenza fa?

Nel caso generale può tornare. E se l'osservazione di alcune condizioni o anche di un insieme di condizioni diverse mostra che non restituisce falso?

Non conosciamo i dettagli dell'implementazione di questa funzione e la documentazione non fornisce alcuna "ipotesi" a riguardo. Cosa succede se, alla prossima serie di condizioni al prossimo broker, la funzione improvvisamente restituisce falso?

Risponderò ancora alla domanda posta sulla ragione/situazione, perché è facile: la ragione potrebbe essere un errore di implementazione di questa funzione fatto dal team di sviluppo quando è stata rilasciata la versione successiva di MT. Spero che questo sia un evento abbastanza probabile da essere seriamente considerato?

Supponiamo che, a causa di questo ipotetico bug, la funzione abbia iniziato casualmente, ma, in media, solo per ogni 5° richiesta, a restituire falso.

Di solito non si può pensare in anticipo a cose che non si sanno. Quindi non ha molto senso chiedere a cosa potrebbe essere dovuto. Quando succede, allora si può facilmente spiegare perché.

Ma non sapere cosa potrebbe accadere in futuro non impedisce di difendersi da esso. Può risultare che alcuni algoritmi di alto livello faranno un sacco di problemi a causa di un valore falso ricevuto. Non sapranno che il valore è falso.

Ma se sanno che non c'è valore e se c'è, è vero, non faranno casino se non ci sono errori propri. Ed è per questo che l'informazione sull'impossibilità di calcolare il valore dovrebbe essere data non solo in modalità di debug ma anche in modalità di combattimento.

 

È possibile caricare dati esterni nell'indicatore, ad esempio da un file di testo?

Per esempio, c'è un prezzo giornaliero e deve costruire una linea su qualsiasi grafico timeframe?

DATA Prezzo

04.12.2014 100.00

03.12.2014 101.12

02.12.2014 102.45

01.12.2014 103.23

28.11.2014 102.43

27.11.2014 101.90

 
Buone caratteristiche, grazie a Igor per il suo duro lavoro.
 
KimIV:

Esempi di utilizzo della funzione OpenPosition().

1. Compra 0.1 lotto dello strumento corrente

2. Vendere 0,2 lotti di EURUSD

3. Vendi 0,12 lotti di USDCAD con uno stop di 20 pip

4. Comprare 0,15 lotti di USDJPY con 40 pip di stop

5. Vendi 0,1 lotto di GBPJPY con stop 23 e takeaway 44 pips

In allegato c'è lo script per testare la funzione OpenPosition(). I primi 4 esempi sono commentati.
Non so se mi risponderai o no. Sono seduto qui, non so come rendere il mio EA multivaluta!
 
logut:
Non so se mi risponderete o no. Sono seduto qui perplesso, non so come rendere il mio EA multivaluta!
Dmitry, di solito scrivo tutta la logica su un pezzo di carta. Cosa fare e quando, e con cosa.
 
Roger:

E datemi una ragione per cui un ciclo d'ordine creato correttamente potrebbe restituire "falso".

Ops, non ho notato che Artem ha già chiesto, oops. Eppure.

Facile!

Dopo un altro aggiornamento il terminale si è ricaricato e ha iniziato a mostrare solo gli ordini dell'ultimo giorno. Non mostra la cronologia degli ordini. La funzione dovrebbe restituire qualcosa - come nessuna storia.

Il broker ha cancellato alcuni ordini.

C'è un buco nella memoria principale. La vostra memoria si è bloccata e la funzione sta prendendo una cella di memoria schifosa. Potrebbe apparire sul monitor. Può apparire o meno. Potrebbero esserci altri problemi hardware.

Il terminale si riavvia e "perde" la comunicazione con il server. Usavo Mt3 usando un server proxy. Avevo un internet dialup con una larghezza di banda e un tempo molto limitati e la qualità dell'internet era orribile. Vedo i tic arrivare e il grafico si muove. Quando ho provato ad aprire un ordine il terminale ha provato a scrivere "nessuna connessione con il server".

Ho affrontato un problema in MT4 ed esiste ancora: ho un tick e uno schermo grafico nero (vuoto). Se tiro il grafico con il mio mouse o il robot esce con un errore, otterrò un messaggio di errore e il robot si bloccherà. Se tiro il grafico con il mouse o arriva un nuovo tick, tutto è normale. Perciò, quando divido, controllo prima per cosa dividere e se non è uguale a zero, vado avanti!

 

Caro KimIV, sto usando la tua funzione per chiudere tutte le posizioni quando un certo profitto è stato raggiunto e ho incontrato una situazione in cui un ordine pendente ha attivato un'altra posizione che non è stata chiusa. Ora ho implementato un controllo aggiuntivo di una tale situazione e la chiamata ripetuta della vostra funzione. Pensi che questo miglioramento dovrebbe essere implementato all'interno della funzione dopo che il ciclo di chiusura principale è finito?

Queste sono le funzioni ClosePosBySortLots() e ClosePositions();

 

Ci sono dei codici funzione per rimuovere gli ordini in sospeso sia per le prove online che per le prove storiche - https://forum.mql4.com/ru/38949#434195

puoi spiegare la differenza tra test e online?

 
Le funzioni isCloseLastPosByStop() e isCloseLastPosByTake() non sempre lavorano correttamente, perché il prezzo di chiusura dell'ordine e lo Stop Loss (TakeProfit) non sempre coincidono. L'ho rifatto nel mio. Ho sostituito la condizione di uguaglianza di questi valori con la condizione: il valore assoluto della differenza di questi valori (a 5 bit virgolettati) deve essere inferiore a 5*Point.