[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 381

 
double MarketInfo( string symbol, int type) 

Questo è da aiuto, ma è possibile usare NULL come simbolo, per "guardare" solo lo strumento su cui lavora l'EA?

È solo che stiamo progettando diversi EA dello stesso tipo su coppie diverse.

Per esempio, così:

MarketInfo(NULL,MODE_ASK)
 
moskitman:

Questo viene dalla guida, ma è possibile utilizzare NULL come simbolo per "guardare" solo lo strumento su cui l'EA è in esecuzione?

Come questo, per esempio:

Sembra che il NULL non funzioni.

Ma Symbol() funzionerà =)

 

Buon pomeriggio. Ho la seguente domanda. Illibro MQL4che si trova su MQL4.community, nella sezione "Simple MQL Programs ", contiene un esempio di tradingexpert.mq4 con il seguente contenuto (vedi file allegato). Le variabili esterne extern double StopLoss =200 e extern double TakeProfit =39 sono dichiarate nel blocco 1-2. Le chiamate al blocco 8-9 delle funzioni New_Stop(StopLoss) e New_Stop(TakeProfit) sono utilizzate per calcolare i parametri SL e TP. C'è una descrizione della funzione nel blocco 11-12.

Domanda: Il parametro formale della funzione New_Stop è di tipo int(int Parametr), mentre i parametri passati nella chiamata di funzione New_Stop(StopLoss)(New_Stop(TakeProfit)) sono di tipo doppio... Nel libro MQL4, trovato in MQL4.community nella sezione "Language Basics", sottosezione "Functions", "Function Properties" dice "Il numero, il tipo e l'ordine dei parametri passati in una chiamata di funzione devono corrispondere al numero, al tipo e all'ordine dei parametri formali passati nella descrizione della funzione (l'eccezione è una chiamata di funzione che ha parametri predefiniti - vedi chiamata di funzione e descrizione di funzione e operatore di ritorno. Come spiegare questa contraddizione: secondo quest'ultimo, quando dichiaro le variabili StopLoss e TakeProfit, avrei dovuto indicare il tipo int, non double(il compilatore non dà alcun errore)?

Per non sporcare il forum, grazie in anticipo per la risposta.

File:
 

Ciao, puoi darmi un suggerimento... Ho cercato in mezzo a internet, e le informazioni variano

L'essenza dell'Expert Advisor è aprire posizioni su diversi strumenti. "Nella vita reale, funziona e mostra i prezzi attuali, ma non posso farlo girare nella storia... La funzione restituisce zero.

Voglio mostrare la quotazione attuale per due valute EURUSD e EURCHF, per esempio.

Sto chiamando la quotazione attuale con questa funzione (sto seguendo la storia quando il grafico EURUSD è attivo):

MarketInfo("EURUSD",MODE_BID) ---> ottiene il prezzo corrente

MarketInfo("EURCHF ",MODE_BID) ---> restituisce zero

Ho trovato su questo forum che MarketInfo non funziona sulla storia, usate "iClose".

Ma quando chiamo la citazione usando il

iClose("EURUSD",PERIOD_M1,0) ---> Ottengo il prezzo corrente

iClose("EURCHF",PERIOD_M1,0) ---> restituisce zero

In che altro modo posso ottenere le quotazioni attuali per diversi strumenti nel tester di strategia? Grazie

 
faton:

Il tester MT4 non è multivaluta. In altre parole, si possono testare solo EA a valuta singola.

 
moskitman:

Il tester MT4 non è multivaluta. In altre parole, si possono testare solo EA a valuta singola.


grazie
 
faton:

grazie

Più precisamente, testate su uno strumento e potrete usare altri strumenti per l'analisi.
 
sergeev:


grazie per il vostro aiuto!))
 
DhP:

O così sembra:

grazie per il tuo feedback!!! molto utile!
 
7777877:

Buon pomeriggio. Ho la seguente domanda. Illibro MQL4che si trova su MQL4.community, nella sezione "Simple MQL Programs ", contiene un esempio di tradingexpert.mq4 con il seguente contenuto (vedi file allegato). Le variabili esterne extern double StopLoss =200 e extern double TakeProfit =39 sono dichiarate nel blocco 1-2. Le chiamate al blocco 8-9 delle funzioni New_Stop(StopLoss) e New_Stop(TakeProfit) sono utilizzate per calcolare i parametri SL e TP. C'è una descrizione della funzione nel blocco 11-12.

Domanda: Il parametro formale della funzione New_Stop è di tipo int(int Parametr), mentre i parametri passati nella chiamata di funzione New_Stop(StopLoss)(New_Stop(TakeProfit)) sono di tipo doppio... Nel libro MQL4, trovato in MQL4.community nel capitolo "Language Fundamentals" nella sezione "Functions", sottosezione "Function Properties" dice "Il numero, il tipo e l'ordine dei parametri passati in una chiamata di funzione devono corrispondere al numero, al tipo e all'ordine dei parametri formali passati nella descrizione della funzione (l'eccezione è una chiamata di funzione che ha parametri predefiniti - vedi chiamata di funzione e descrizione di funzione e operatore di ritorno. Come spiegare questa contraddizione: secondo quest'ultimo, quando dichiaro le variabili StopLoss e TakeProfit, avrei dovuto indicare il tipo int, non double(il compilatore non dà alcun errore)?

Grazie in anticipo per la risposta, per non sporcare il forum.

I parametri esterni (extern double StopLoss =200; extern double TakeProfit =39; ), in principio, dovrebbero essere di tipo intero (più esattamente, secondo l'idea dell'autore - è un valore in punti). Quando si chiama la funzione, viene usata la conversione implicita del tipo. Il tipo in virgola mobile viene convertito in un tipo intero con perdita di precisione. In questo caso non importa: la dimensione dello stop e del profitto come previsto è impostata in pip - è sempre intera.

IMHO, il codice di esempio è scritto male.

Usare il valore assoluto delle costanti è uno stile molto cattivo e sbagliato, con nomi mnemonici.

         if (OrderType()>1)                     // Попался отложенный
           {
 

La peggiore implementazione dell'enumerazione degli ordini: è difficile pensare ad una più "ritardata". Sembra essere appositamente rallentato: calcoli extra, chiamate di funzioni inutili - l'operazione più costosa in termini di tempo, e per di più su ogni iterazione del ciclo. E questo nonostante il fatto che il numero di ordini non cambia all'interno del ciclo.

   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров: