[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 235
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
Per capire cosa sta succedendo, è necessario emettere i calcoli sulla stampante:
e analizzare i risultati.HO CAPITO CHE DEVO AVER FRAINTESO QUALCOSA.
Come ho immaginato l'esecuzione della condizione nell'intestazione if
-il programma ottiene il valore della variabile Bid (0,86084)
-diminuisce il valore della variabile Bid (0,86084) alla variabile massiv[S] (0,85375)
-mappa la differenza ottenuta 0,00709 alla costante 0
-se la differenza è > 0, il controllo nel corpo dell'istruzione if non è dato e l'ordine non è aperto
-Se la differenza <= 0, il controllo viene consegnato al corpo dell'istruzione if e l'ordine viene aperto
Come ho immaginato l' esecuzione della funzione ArrayBsearch( massiv, value,WHOLE_ARRAY, 0, MODE_ASCEND)
CONSIGLIO: restituisce l'indice del primo elemento trovato nella prima dimensione dell'array.
Se non c'è nessun elemento con il valore specificato nell'array, la funzione restituisce l'indice dell'elemento più vicino per valore, tra cui si trova il valore cercato.
-la funzione ottiene il valore uguale al prezzo dell'ultimo tick (Bid-0,86084)
-la funzione passa attraverso i valori dell'array dal minore al maggiore - non trova la piena corrispondenza tra qualsiasi valore dell'array e il valore del valore
- dato che non c' è il valore 0.86084 nell'array, la funzione restituisce ilvalore più piccolo più vicino dell'array. cioè 0 .820864(primo),0.81074,0.85375,0.80084,0.81084,0.86088(ultimo) cioè 0.85375 è il valore più vicino a 0.86084 il valore più piccolo. Tra 0,85375 e 0,86088 è il valore che state cercando=0,86084
=====================================================================================================
Iparametri della vostra funzione di stampa oltre al valore dell'elemento massiv[S] sono: massiv[S-1] e massiv[S+1]. Dal valore di massiv[S]( 0,85375) dovete prima sottrarre 1, e poi aggiungere 1.
Non ho letto se nell'intestazione (o in ArrayBsearch()) da arrayiv[S] si sottrae prima il valore 1 e poi si aggiunge 1.
Vi sarei grato se poteste spiegarmi questo punto o darmi un link.
Grazie.
Lafunzione print ha altriparametri - massiv[S-1] e massiv[S+1]. Si vuole sottrarre 1 dal valore di massiv[S]( 0,85375) e aggiungere 1 dopo di esso.
Non ho letto di se l'intestazione (o ArrayBsearch() ) prima sottrae 1 dal valore di massiv[S] e poi aggiunge 1 ad esso in nessun libro di testo MQL.
Vi sarei grato se poteste spiegarmi questo punto o darmi un link.
Grazie.
Stampa in questo link.
http://clip2net.com/s/4MRjJe
Ho notato che
- il valore di massiv[0](probabilmente [S]) è il primo valore dell'array da cui iniziare
- il valore di massiv[1](probabilmente [S+1] ) è il secondo valore della matrice, cioè segue il valore da cui inizia la matrice
-Questi valori vengono ripetuti ogni volta che si incontra PRINT.
=============================================
- nell'anno 2000, il valore del prezzo era di 4 cifre in più dopo il punto.
- nel tester sul grafico - 5 cifre
-nel tester nel risultato - 5 segni
-nel tester nel registro nella stampante - 4 caratteri
E ho 5 cifre nell'array.
DOMANDA - Quante cifre legge il software?
Stampa in questo link.
https://www.mql5.com/go?link=http://clip2net.com/s/4MRjJe
Non vedi niente lì?
Vedo che ArrayBsearch() restituisce 0 (come indice dell'elemento) OVUNQUE. Nella 0a cella della vostra matrice c'è il numero 1,0408. Torniamo al codice:
Ora sostituite i valori delle variabili ottenute in questa condizione (sulla carite Bid è nell'intervallo 0,8-0,9, prendiamo il massimo di questo intervallo - 0,9): se (0,9000 - 1,0408 <= 0) OrderSend(). La condizione è soddisfatta GIUSTAMENTE!!! Cerca gli errori nel completare la tua matrice. Presumibilmente non avete prestato attenzione a questa clausola nella funzione ArrayBsearch():
Nota: la ricerca binaria gestisce solo gli array ordinati. La funzione ArraySort() è usata per ordinare una matrice numerica.
P.S. La stampa dovrebbe preferibilmente essere fornita non come immagine, ma con la selezione simultanea di diverse linee (usando SHIFT - se non sai come farlo) di questa stessa stampa (10-20 linee sono sufficienti) nella finestra del terminale, poi copiare e incollare le linee selezionate nel tuo post come codice usando il pulsante SRC.
P.P.S. Ho appena notato un ovvio errore di sintassi - questa linea dovrebbe essere messa fuori (prima) della funzione start():
#include <MASSIV.mqh>
Ho notato che
-nel tester nel registro nella stampante - 4 caratteri
Leggi la documentazione https://docs.mql4.com/ru/common/print
Gli array non possono essere passati a Print(). Gli array devono essere stampati elemento per elemento.
I dati di tipo doppio vengono stampati con 4 cifre decimali dopo il punto. Per ottenere una maggiore precisione, si dovrebbe usare la funzione DoubleToStr().
Non hai visto niente lì?
Vedo che ArrayBsearch() restituisce 0 (come indice dell'elemento) OVUNQUE. Nella 0a cella della vostra matrice c'è il numero 1,0408. Torniamo al codice:
Ora sostituiamo i valori ottenuti delle variabili in questa condizione (sulla carite Bid è nell'intervallo 0,8-0,9, prendiamo il massimo di questo intervallo - 0,9): se (0,9000 - 1,0408 <= 0) OrderSend(). La condizione è soddisfatta GIUSTAMENTE!!! Cerca gli errori nel completare la tua matrice. Presumibilmente non avete prestato attenzione a questa clausola nella funzione ArrayBsearch():
Nota: la ricerca binaria gestisce solo gli array ordinati. La funzione ArraySort() è usata per ordinare una matrice numerica.