Errori, bug, domande - pagina 1887

 
Vladimir Karputov:

Tu, a quanto vedo, non hai controllato il codice che ti ho mostrato. Mettiamola così: prima si controlla, poi si rifà la domanda.

Non ho bisogno di verificarlo, posso vedere che restituisce ciò che dovrebbe.

Parlavo del primo uso della funzione

 
Alexandr Bryzgalov:

Non ho bisogno di verificarlo, posso vedere che restituisce ciò di cui ho bisogno

Stavo parlando della prima variante dell'uso della funzione


Ok, allora. Partiamo dalla coda.

1. PositionGetInteger:

La funzione restituisce la proprietà richiesta di una posizione aperta precedentemente selezionata...

Cioè, prima di usare PositionGetInteger, la posizione deve essere selezionata.


2. Selezioniamo la posizione usando il PositionGetTicket:

Valore di ritorno.

Il biglietto di posizione. In caso di esecuzione non riuscita restituisce 0.


E dove avete un controllo (dopo il ciclo) che è stato restituito da PositionGetTicket? Non c'è nessun controllo, e lì, tra l'altro, viene restituito "zero" - cioè, PositionGetTicket è stato attivato con un errore - il che equivale a selezionare una posizione che non esiste. Poi, senza controllare il risultato di PositionGetTicket, si cerca di ottenere la sua proprietà dalla posizione inesistente. E lì, nelle proprietà della posizione inesistente, o spazzatura o solo dati di strutture nulle.


Per riassumere: senza controllare se il PositionGetTicket restituisce "zero", non si può andare oltre.

 
Vladimir Karputov:


Ok, allora. Partiamo dalla coda.

1. PositionGetInteger:

La funzione restituisce la proprietà richiesta di una posizione aperta precedentemente selezionata...

Cioè, la posizione deve essere selezionata prima di usare PositionGetInteger.


2. Selezioniamo la posizione utilizzando il PositionGetTicket:

Valore di ritorno.

Il biglietto di posizione. In caso di esecuzione non riuscita restituisce 0.


E dove avete un controllo (dopo il ciclo) che è stato restituito da PositionGetTicket? Non c'è nessun controllo, e lì, tra l'altro, viene restituito "zero" - cioè, PositionGetTicket è stato attivato con un errore - il che equivale a selezionare una posizione che non esiste. Poi, senza controllare il risultato di PositionGetTicket, si cerca di ottenere la sua proprietà dalla posizione inesistente. E lì, nelle proprietà della posizione inesistente, o spazzatura o solo dati di strutture nulle.


Per riassumere: senza controllare che il PositionGetTicket restituisca "zero", non si può andare oltre.

Grazie, molto dettagliato e utile.
 
Vladimir Karputov:


Ok, facciamo così. Partiamo dalla coda.

1. PositionGetInteger:

La funzione restituisce la proprietà richiesta di una posizione aperta precedentemente selezionata...

Cioè, la posizione deve essere selezionata prima di usare PositionGetInteger.


2. Selezioniamo la posizione usando il PositionGetTicket:

Valore di ritorno.

Il biglietto di posizione. In caso di esecuzione non riuscita restituisce 0.


E dove avete un controllo (dopo il ciclo) che è stato restituito da PositionGetTicket? Non c'è nessun controllo, e lì, tra l'altro, viene restituito "zero" - cioè, PositionGetTicket è stato attivato con un errore - il che equivale a selezionare una posizione che non esiste. Poi, senza controllare il risultato di PositionGetTicket, si cerca di ottenere la sua proprietà dalla posizione inesistente. E lì, nelle proprietà della posizione inesistente, o spazzatura o solo dati di strutture nulle.


Per riassumere: senza controllare il PositionGetTicket per il ritorno di "zero", non si può andare oltre.

non c'è bisogno di spiegarsi )

Non è questa la domanda.

leggere correttamente: va bene che una funzione restituisca lo stesso valore per diverse situazioni?

va bene che la funzione faccia così?
 
Vladimir Karputov:

Per riassumere: senza controllare PositionGetTicket per un ritorno di "zero" non si può andare avanti.

È possibile

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

fxsaber, 2017.05.12 11:19

è logico fare un controllo (PositionGetInteger(POSITION_TICKET) > 0).
 
Alexandr Bryzgalov:

quella funzione per diverse situazioni restituisce lo stesso valore?

è corretto che la funzione faccia questo?
Purtroppo sì.

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

fxsaber, 2017.05.12 11:29

Sì, ma anche qualsiasi altro valore sarebbe fuorviante.
 
Alexandr Bryzgalov:

1) Non devi dare spiegazioni.

non è questo il punto

2. Leggi bene: va bene che una funzione restituisca lo stesso valore per diverse situazioni?

va bene che una funzione faccia questo?


1. Lei è una persona maleducata che ha anche fatto un errore nel suo codice, ma non vuole ammetterlo.

2. La funzione funziona in modo assolutamente corretto. Perché (PositionGetInteger(POSITION_TYPE)) può restituire solo 2 valori - o POSITION_TYPE_BUY oPOSITION_TYPE_SELL. Ma senza selezionare una posizione (e non la si seleziona - non si controlla cosa esattamente è stato selezionato) pretendere qualcosa da (PositionGetInteger(POSITION_TYPE)) è imprudente.


In conclusione: quando il vostro codice è scritto con un errore logico - semplicemente non avete il diritto di pretendere qualcosa dalle funzioni di sistema.

 
Vladimir Karputov:

Morale della favola: quando il vostro codice è scritto con un errore logico - semplicemente non avete il diritto di pretendere nulla dalle funzioni del sistema.

Un buon esempio è quando la domanda non ha mai avuto una risposta.
 
Vladimir Karputov:


1. Sei una persona maleducata che ha fatto un errore nel codice ma non vuole ammetterlo.

2. La funzione funziona in modo assolutamente corretto. Perché (PositionGetInteger(POSITION_TYPE)) può restituire solo DUE valori - o POSITION_TYPE_BUY oPOSITION_TYPE_SELL. Ma senza selezionare una posizione (e non la si seleziona - non si controlla cosa esattamente è stato selezionato) pretendere qualcosa da (PositionGetInteger(POSITION_TYPE)) è imprudente.


In conclusione: quando il vostro codice è scritto con un errore logico, semplicemente non avete il diritto di pretendere qualcosa dalle funzioni di sistema.

Scusate, non è colpa mia se qualcuno non riesce a vedere il problema.

Il fatto che ci sia un errore deliberato nel codice è riconosciuto.

E so come risolvere il problema.

Ma la domanda è diversa.

 

Perché la funzione PositionGetInteger(POSITION_TYPE) restituisce un valore di acquisto (uguale a 0) invece di un valore di errore (uguale a 0) se i parametri di input non sono corretti?

Motivazione: