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.
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?
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?
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);
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?
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 mostratoGrazie. Dovrò fare i conti con queste definizioni.
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.
Mostra il codice dell'EA e dell'indicatore.
Basta chiamare la funzione Bars(_Symbol,_Period)
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.
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
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?
Non è molto chiaro quali condizioni vengono controllate, ma forse lo switch funzionerà per voi. E a TRUE assegnate i valori che volete.
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];.