Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 926

 
Seric29:
Quale operatore può essere usato per restituire 2 risultati? Uso l'istruzione if per trovare questa condizione, ma non può restituire più risultati nel qual caso devo scrivere la stessa condizione 2 volte, quindi sto scrivendo con questa domanda.

Non è molto chiaro quali condizioni vengono controllate, ma forse lo switch funzionerà per voi. E a TRUE assegnate i valori di cui avete bisogno.

 
Esiste una funzione per scambiare i valori di due variabili?
 
pivomoe:
Esiste una funzione per scambiare i valori di due variabili?

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2018.08.26 19:02

La parte inglese del forum ha mostrato
// Обмен значениями между двумя числовыми переменными
#define  SWAP(A, B) { A += B; B = A - B; A -= B; }

 
Artyom Trishkin:

Grazie. Dovrò fare i conti con queste definizioni.

 
Ciao, perché la funzione Bars() ha valori diversi quando viene chiamata dall'indicatore e dall'esperto e come si fa a fare la corrispondenza?
 
Tango_X:
Ciao, perché la funzione Bars() ha valori diversi quando viene chiamata dall'indicatore e dall'Expert Advisor e come si fa a fare la corrispondenza?

Mostra il codice dell'EA e dell'indicatore.

 
Alexey Viktorov:

Mostra il codice dell'EA e dell'indicatore.

Basta chiamare la funzione Bars(_Symbol,_Period)

 
Tango_X:

Basta chiamare la funzione Bars(_Symbol,_Period)

Devo chiedere una stampa del risultato separatamente?

Non capisco la differenza. Anche se nel tester questa variante non è esclusa a causa della disponibilità della storia di cui so poco, solo vaghi ricordi di ciò che ho letto qualche tempo fa. Dopo tutto, si scopre il numero totale di barre disponibili. Ma se si chiede di tanto in tanto, non ci può essere alcuna differenza.

 
Alexey Viktorov:
L'istruzione if non restituisce alcun valore.

Ci sono due opzioni per assegnare valori a certe variabili in una funzione separata:

1. Le variabili devono essere visibili in tutte le parti del programma. Cioè, devono essere dichiarate a livello di variabile globale (all'inizio del codice).

2. Per passare variabili dichiarate localmente alla funzione utente per riferimento. Cioè, mettete & prima del nome della variabile

Significa che se una condizione è vera, devono essere eseguite due azioni identiche, ad esempio

        if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);
}

Ho dichiarato delle variabili e non viene fatto nulla tranne questa azionePrice_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; o questa azionePrezzo_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP]; come fargli eseguire 2 azioni identiche con entrambi i livelli superiore e inferiore per condizione. Qualcuno può dirmi come scriverlo più brevemente?

 
Konstantin Nikitin:

Non è molto chiaro quali condizioni vengono controllate, ma forse lo switch funzionerà per voi. E a TRUE assegnate i valori che volete.

 if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);

Dovete eseguirePrice_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP]; ePrezzo_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];.