Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 456

 
E_Ghazaryan:
Sì, giusto =D )))) Già allegato.)))

Tutti questi parametri devono essere elencati dopo la virgola in iCustom() dopo il nome dell'indicatore, e dopo di loro altri due parametri: numero di buffer e numero di barra, da cui vengono presi i dati. Cioè

iCustom(Symbol(), Period(), "_MTF_ADX3", 0, 500, 6, 6, 8, 14, 6, 6, 2, true, false, buffer_number, bar_number).

Tutti i valori elencati possono essere impostati da variabili esterne dell'EA e i nomi di queste variabili possono essere scritti in iCustom() invece dei valori hardcoded.

 

Può dirmi perché:

doppio d = 0,07;

d = NormalizeDouble(d,2);

in entrambi i casi d== 0,07000000000000001

come faccio a lasciare 2 cifre decimali?

 
pusheax:

Può dirmi perché:

doppio d = 0,07;

d = NormalizeDouble(d,2);

in entrambi i casi d== 0,07000000000000001

come lasciare 2 cifre decimali?


Si noti che quando si emette su Journal usando Print(), un numero normalizzato può contenere un numero di cifre decimali maggiore di quanto ci si aspetti. Per esempio,

   double a=76.671;             // нормализованное число с 3 знаками после запятой
   Print("Print(76.671)=",a);   // выведем его как есть
   Print("DoubleToString(a,8)=",DoubleToString(a,8)); // выведем с заданной точностью

verrà emesso nel terminale:

  DoubleToString(a,8)=76.67100000

  Print(76.671)=76.67100000000001


Cioè, per la stampa l'output di valori extra non è un problema.

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Karputov Vladimir:


Si noti che il numero normalizzato quando viene emesso nel registro usando Print() può contenere più cifre decimali di quanto ci si aspetti. Per esempio,

verrà emesso nel terminale:


Quindi, per la stampa, l'emissione di valori extra non è un problema.

Grazie, è solo che quando cerco di aprire una posizione con lotto 0,07 viene visualizzato l'errore (pensavo fosse la ragione), quindi cercherò di saperne di più.
 
pusheax:
Grazie, è solo che quando provo ad aprire una posizione con lotto 0,07 dà un errore (pensavo che fosse quello il problema), deve essere qualcos'altro, lo approfondirò.
La prima cosa da fare è guardare la descrizione del numero di errore. Questo accorcerà il percorso di ricerca.
 

buona sera

Ho dichiarato un array dinamico

doppio all_order[][10];

Ho ridefinito in OnInit

ArrayResize(all_order, 20);

Inserisco i dati nella funzione

void OR_spisok(double a0, double a1, double a2, double a3, double a4, double a5)

{

int a10=int(a0);

all_order[a10][0]=a0;

all_order[a10][1]=a1;

all_order[a10][2]=a2;

all_order[a10][3]=a3;

all_order[a10][4]=a4;

all_order[a10][5]=a5;

}

tre linee funzionano bene, su 4 si blocca

2015.10.09 20:13:47.908 3102 EURUSD,H1: array fuori range in '3102.mq4' (393,10)

393,10 è:

all_order[a10][0]=a0;

cosa c'è che non va?

Rimossa la linea#property strict

Lo script funziona, posso continuare senza questa linea?

 
pr0gre5:

buona sera

ha dichiarato un array dinamico


Rimossa la linea#property strict

Lo script funziona, posso continuare senza questa linea?

 
Artyom Trishkin:

Tutti questi parametri devono essere elencati dopo la virgola in iCustom() dopo il nome dell'indicatore, e dopo di loro altri due parametri: numero di buffer e numero di barra, da cui vengono presi i dati. Cioè

iCustom(Symbol(), Period(), "_MTF_ADX3", 0, 500, 6, 6, 8, 14, 6, 6, 2, true, false, buffer_number, bar_number).

Tutti i valori elencati possono essere impostati da variabili EA esterne e scrivere i nomi di queste variabili a iCustom() invece di valori hardcoded.

Grazie per la vostra risposta. Ma il fatto è che l'ho fatto all'inizio, ma quando ho ricevuto valori sbagliati, ho deciso di rimuovere i parametri da iCustom, perché l'Expert Advisor usasse i parametri standard dell'indicatore. In entrambi i casi, però, l'EA ottiene valori sbagliati. Per esempio, Alert dà 30.32362 per la linea blu, ma quando guardo il grafico dell'indicatore ha 22.3320 nello stesso posto. E lo stesso con altre linee.
 
E_Ghazaryan:
Grazie per la risposta. Ma il fatto è che ho fatto così all'inizio, ma quando ho ottenuto valori sbagliati, ho deciso di rimuovere i parametri da iCustom in modo che l'EA usasse i parametri standard dell'indicatore. Tuttavia, in entrambi i casi, l'Expert Advisor riceve valori sbagliati. Per esempio, Alert dà 30.32362 per la linea blu, ma quando guardo il grafico dell'indicatore ha 22.3320 nello stesso posto. E lo stesso vale per le altre linee.
Mostrami il codice dove prendi i dati dall'indicatore.
 
Artyom Trishkin:
Mostrami il codice dove prendi i dati dall'indicatore.

Il codice era grande. Ma per scoprire qual è il problema, l'Expert Advisor non funziona secondo le regole, ho tagliato questa parte in una separata e ho iniziato a testarla.

double Ind_Blue=iCustom(NULL, 0, "_MTF_ADX3",1,0);

double Ind_Red=iCustom(NULL, 0, "_MTF_ADX3",2,0);

Alert(" Ind_Blue= " , Ind_Blue , " Ind_Red= " , Ind_Red);

Allego anche il file Expert Advisor. Non voglio farti perdere tempo, ma non riesco a trovare il problema.

E c'è un indicatore simile con lo stesso problema (Adx mtf). Ho un file mq4 per questo. Ma non sembra esserci alcun problema nel codice.

File:
_MTF_ADX3.ex4  5 kb
Adx_mtf.ex4  21 kb
Adx_mtf.mq4  6 kb