[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

 
Potete per favore consigliarmi se è possibile aprire una posizione manualmente nel Metatrader4 Strategy Tester invece di usare un Expert Advisor? Per non calcolare i pip in una calcolatrice, ma premere il pulsante, apparirà una finestra di apertura dell'ordine, riempire i dati e premere F12 e il tester stesso calcolerà come quando si apre da un EA. Forse esiste un programma pronto per questo scopo, ma non l'ho trovato nella mia ricerca.
 
Buona giornata a tutti. Ho una domanda qui, diverse domande per essere esatti, aiutatemi.
1: Se ho un livello, e se il prezzo è uguale a questo livello allora apro un ordine. La domanda è se il prezzo può saltare questo livello, volare attraverso di esso rapidamente e non essere uguale al livello che ho o se ho un GAP, un ordine sarà aperto dove dovrebbe essere, cioè al livello?
2: Ho degli errori nel log, voglio sapere cosa significano. [B]1-Signal-failed parse signals,[/B] [B]2-DataCenter connecting failed [2] and [6][/B] 3-(I do not remember exactly but it says complete disabled when modifying the order)? Per favore consigliate cosa fare in questi o altri casi, grazie mille ancora!
 
TarasBY:

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.


 
solnce600:

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.

Applicherete il vostro ragionamento dopo aver fatto la stampa. Hai fatto la stampa (non hai bisogno di cambiare nulla)? - Mostrami cosa c'è dentro.
 

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?

 

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:

if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))

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> 
 
solnce600:

Ho notato che

-nel tester nel registro nella stampante - 4 caratteri

Leggi la documentazione https://docs.mql4.com/ru/common/print

void Print( ...)
Stampa qualche messaggio nel log di Expert. I parametri possono essere di qualsiasi tipo. Il numero di parametri non può superare 64.

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().
 
TarasBY:

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.

Non sono sicuro di cosa significhi la ricerca binaria. È una ricerca in un array bidimensionale? Ma io ne ho uno monodimensionale.
 
come regolare il periodo Fibonacci in mt 4 200 144 89 55 34