Un sotto-laboratorio per riempire le FAQ (domande frequenti). Aiutiamo i compagni! - pagina 5

 

L'ho promesso, inizierò con il più semplice)

Domanda: MQL fa operazioni aritmetiche in modo errato? Perché dividendo un numero per un altro si ottiene 0?

Risposta:

Molto probabilmente avete scritto un'espressione come

c = a/b;  // (1)

dichiarando le variabili a e b come interi:

int a,b;

In questo caso il compilatore MQL interpreta il segno "slash" come un'operazione di "divisione intera". Così, anche se prima che la (1) appaia nel codice, ad a e b vengono assegnati valori qualsiasi, anche non interi, la variabile c conterrà ancora la risposta " b entra nel numero a tante volte intero". Questo significa che se prima di calcolare (1) a era più piccolo di b, il risultato sarà zero, indipendentemente dal tipo della variabile c (può essere doppia in questo esempio).

L'errore descritto è spesso la ragione del comportamento "scorretto" del programma nel terminale del cliente - messaggio " divide per zero " nei log di Expert Advisors, mancata visualizzazione di una o più linee di indicatori nella finestra del terminale, ecc.

La soluzione del problema:

Correggere il tipo di dati nella dichiarazione della variabile con quello corrispondente alle operazioni da utilizzare:

double a,b;
 
Domanda: Perché 3 diviso 2 è uguale a 1 e non a 1,5?

Alert(3/2);

Risposta: I numeri 3 e 2 in questa espressione sono interi. Un intero non è divisibile senza un resto. Per ottenere il risultato 1,5 dovete specificare che il divisore è un numero in virgola mobile:

Alert(3.0/2);

* * *

Domanda: Perché l'espressione non viene calcolata correttamente?

  double price=1.0; // Цена
  double point=0.0001; // Величина пункта
  double level=272.0; // Уровень в пунктах от цены
  double levelprice; // Значение цены уровня
   
  levelprice=price+point*level; // должно быть 1.0272
   
  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

R: Le variabili in virgola mobile hanno un numero limitato di posizioni decimali. A causa di ciò, i valori possono essere leggermente distorti nel processo di calcolo. Dopo aver calcolato l'espressione, prima di confrontare i numeri in virgola mobile, questi dovrebbero essere normalizzati al livello di precisione richiesto:

  levelprice=NormalizeDouble(levelprice,4);

  if(levelprice==1.0272){
  Alert("Правильно");
  }
  else{
  Alert("Неправильно");
  }

* * *

Domanda: Come posso ottenere il valore di un indicatore personalizzato nel mio Expert Advisor?

Risposta: Per questo scopo abbiamo la funzione iCustom().

* * *

Domanda: Da dove comincio a imparare MQL4?

Risposta: C'è una guida molto dettagliata incorporatain MetaEditor (Aprire MetaEditor - Menu principale - Visualizza - Navigatore - Dizionario).
Il terminale viene fornito con due Expert Advisors - MACD Sample e Moving Average, è possibile iniziare con l'analisi del loro codice.
Inoltre, su mql4.com c'è un tutorial, un gran numero di articoli e tutti i tipi di codice.
 
D: Perché il valore è 0 anche se sicuramente non è 0?

  double point=0.00001; // Величина пункта
  Print(point);

R: Print() e Alert() emettono solo quattro cifre decimali. Se avete bisogno di più, dovreste convertire il numero doppio in stringa usando DoubleToStr().
Print(DoubleToStr(point,5));
 

D: L'EA emette un gran numero di messaggi con Print(), ma più della metà dei messaggi manca da qualche parte nel tester.

R: Durante il test, se la frequenza di uscita è alta, una parte dei messaggi non viene stampata nella scheda "Log", ma tutti i messaggi possono essere visti nel file di log del tester dopo il test. Il file è nella cartella tester/logs.

 
Grazie a tutti, scrivete ancora.
Metterò insieme una FAQ solo la sera quando arriverò lì.
 

Un suggerimento ai moderatori, e a coloro che sono disposti a fornire un aiuto minimo.

Sarete d'accordo che il forum non è sufficiente per una presentazione strutturata delle informazioni, l'elaborazione e la ricerca. Vedo che l'unica via d'uscita è quella di creare il manuale CHM più completo, che può poi essere utilizzato per creare un' intera sezione sul forum.

Per cominciare, ho creato una struttura di aiuto.
È diviso in 3 grandi sezioni .

1) COME. Questa sezione descrive le risposte proattive alle possibili domande. Per esempio, come ottenere i dati degli indicatori, come chiudere tutti gli ordini, ecc. Inoltre, questa sezione contiene un grande database sistematizzato di funzioni (analoghi delle funzioni di Kim). E soprattutto - esempi di TOR primitivi già pronti con spiegazioni dettagliate del codice e commenti. Questa è una sezione molto complessa, poiché richiede una maggiore sistematizzazione della conoscenza e dell'analisi. Sarà riempito all'ultimo posto.

2) PERCHE'. questa sezione descrive le domande frequenti dei neofiti (i loro esempi sono stati ben dimostrati da alsu e integer in questo thread)

3) DOVE. Questa sezione è principalmente un link a dove cercare o dove trovare qualcosa. Non lo descriverò, guardate voi stessi.
Sto allegando l'archivio di strutture chm pronte (download in fondo al post)


1. Struttura manuale


2. Dimostrazioni - vai a "Dove: Link utili -> MQL4 Tutorial".

File:
mql4_4.zip  53 kb
 


La via da seguire è la seguente:

1. Sono necessari collaboratori freelance per riempire le sottosezioni. Cioè, in sostanza, hanno bisogno di domande ponderate e risposte dettagliate con una spiegazione dettagliata, una serie di riferimenti incrociati, ecc. (il modello di post che viene suggerito nella prima pagina dell'argomento FAQ. (secondo quel modello di post offerto nella prima pagina dell'argomento FAQ).

2. Tutte le domande create per una sottosezione sono raccolte dal curatore di quella sottosezione (1-2 persone). Li gestiscono, li portano in uno stile comune e formano un riferimento incrociato come appropriato Questo avrà ogni sottosezione del proprietario, e non incasinerà il database sarà uno stile e modello di risposta.
Per esempio, la sezione Dove è divisa in 4 sottosezioni: Domande sul tester, il terminale, il forum e i link utili . Sarebbe sufficiente 1 persona per ogni sottosezione. Saranno pienamente impegnati a sistemare la base di conoscenza in arrivo dai freelance, che ritengono necessaria, così come tutti i suggerimenti che possono venire da altri membri delle sezioni vicine. E naturalmente loro stessi dovrebbero partecipare attivamente a riempire il database e a creare domande.

3. Come sottosezioni di riempimento - sono trasferiti al collezionista (come me). È necessario raccoglierli in un file chm e tenerli tutti in uno stile. Creare ulteriori riferimenti incrociati, indicizzare, aggiungere parole chiave per le query di ricerca.

Le
sottosezioni possono essere riordinate o ampliate su suggerimento del curatore e accordo della nuova struttura con l'assemblatore.

In conclusione:
Partecipanti: Benvenuti nella nostra capanna. :) Se vuoi essere un curatore di sottosezione e quelli che hanno già qualcosa da contribuire, sentiti libero di postare le risposte qui.
Moderatori: Ci sarà molto materiale. Si prega di non permettere discussioni e post distratti e vuoti in questo thread. Sarà anche necessario cancellare i post dei partecipanti dopo che il post è stato spostato nella base comune, per facilitare il lavoro della sezione.
Curatori: il file di aiuto è creato in WinCHM 4.17 (per chi ne ha bisogno, contattatemi). Requisiti per i nomi dei file e la posizione:
- la struttura delle cartelle deve ripetere esattamente la struttura dell'aiuto
- tutti i nomi dei file/cartelle devono essere dati solo in inglese in frasi significative
- esempio di base attuale, che "compila" WinCHM in archivio

File:
chm4_2.zip  19 kb
 

sergeev:

...


1) COME. Questa sezione descrive le risposte anticipate a possibili domande. Per esempio, come ottenere i dati degli indicatori, come chiudere tutti gli ordini, ecc. E soprattutto - esempi di TOR primitivi già pronti con una spiegazione dettagliata del codice e dei commenti. Questa è una sezione molto complessa, poiché richiede una maggiore sistematizzazione della conoscenza e dell'analisi. Sarà riempito nell'ultimo.

...

Alexey, tutte le funzioni d'ordine di Kim sono molto discutibili in termini di affidabilità e precisione. Anche tu stai rivettando gli EA su di loro?

 
Integer:

Alexey, tutte le funzioni d'ordine di Kim sono molto discutibili in termini di affidabilità e precisione. Ci rivetti anche gli EA?

No. Userò il mio, testato realisticamente. :)

Ad essere onesti, non ho visto i Kim praticamente da nessuna parte se non nelle raccomandazioni su questo forum. Li ho dati nella descrizione della sezione solo come esempio, in modo che tu sappia di cosa stiamo parlando. E non sono sicuro che quello di Kim entrerà nel manuale nel suo codice. Solo l'idea sarà presa ed elaborata in stile generale.

La sezione HOW è la più seria. Dovrebbe essere gestito da un massimo di 2-3 persone, dal momento che tutte le sezioni HOW sono un lead-in per l'ultima sezione - "Esempi di TOR e la loro implementazione", che mostrerà tutte le possibili opzioni e combinazioni di utilizzo di tutte le funzioni della sezione precedente.

 

Domanda: Come faccio a confrontare due numeri reali di tipo "doppio"?


Risposta:

double A;
double B;

if(NormalizeDouble(MathAbs(A-B),Digits)<0.1*Point)return(true);
else return(false);
Motivazione: