Grazie, come scrivere un ciclo per trovare il numero della barra che attraversa le due MA quando i primi due punti dell'algoritmo sono soddisfatti e ci sono valori delle due MA sulla prima barra?
/
.
Aha, hai risolto non attraverso gli array dopo tutto.
Nota: la soluzione attraverso gli array (copiando gli ultimi tre valori dagli indicatori negli array First[], Second[] e Third[]) è l'incrocio di due iMA- OnTick():
//--- We look for crossing of two indicatorsdouble First[];
double Second[];
double Third[];
ArraySetAsSeries(First,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Second,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Third,true); // index [0] - the most right bar on a chartsint buffer_num=0; // indicator buffer number int start_pos=0; // start position int count=3; // amount to copy if(!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
return;
if(!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
return;
if(InpFilterMA)
if(!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
return;
//--- step 1: check in the arrays bars [0] and [1]if(First[0]>Second[0] && First[1]<Second[1]) // buy
{
if(InpFilterMA)
if(Third[0]>=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[0] && First[1]>Second[1]) // sell
{
if(InpFilterMA)
if(Third[0]<=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]if(First[0]>Second[0] && First[2]<Second[2]) // buy
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[2] && First[1]>Second[2]) // sell
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
Nel vostro caso (un valore alla volta), il ciclo sarà come questo:
int signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buydouble MA1_curr=iMAGet(handle_iMA_1,0); // the value of the 1st MA on i bardouble MA2_curr=iMAGet(handle_iMA_2,0); // the value of the 1st MA on i barfor(int i=0;i<100;i++)
{
double MA1_prev=iMAGet(handle_iMA_1,i+1); // the value of the 1st MA on i+1 th bardouble MA2_prev=iMAGet(handle_iMA_2,i+1); // the value of the 1st MA on i+1 th bar//---
signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buyif(MA1_prev<MA2_prev && MA1_curr>MA2_curr)
signal=1;
elseif(MA1_prev>MA2_prev && MA1_curr<MA2_curr)
signal=-1;
//---
MA1_curr=MA1_prev;
MA2_curr=MA2_prev;
}
MA1_curr - il valore dell'indicatore MA1 sulla barra #i, MA1_prev - il valore dell'indicatore MA1 sulla barra #i+1 MA2_curr - il valore dell'indicatore MA2 sulla barra #i, MA2_prev - il valore dell'indicatore MA2 sulla barra #i+1
Quando si ottiene un incrocio (il segnale della variabile è "-1" o "1") - il valore di i sarà il numero della barra in cui è avvenuto l'incrocio.
Questo è l'algoritmo più semplice per trovare il crossover, ma non è il più preciso.
Buon pomeriggio. Potreste dirmi in quale formato scaricare i dati storici dal server Finam o MFD.ru per importare lo storico delle quotazioni? Non posso assolutamente farlo. Posso solo salvarlo da txt a csv e questo è tutto.
Buon pomeriggio. Potreste dirmi in quale formato scaricare i dati storici dal server Finam o MFD.ru per importare lo storico delle quotazioni? Non posso assolutamente farlo. Posso solo salvarlo da txt a csv e questo è tutto.
Non devi scaricare nulla in MetaTrader 5 :) - Non appena ti connetti al server di trading, la storia reale dei tick è disponibile per te. Guarda versoCopyTicks
In MetaTrader 5 non è necessario scaricare nulla :) - Non appena ti connetti al server di trading, la storia reale dei tick è disponibile per te. Guarda versoCopyTicks
Ho solo bisogno di 10 anni di azioni russe. Il mio broker non mi dà tanto e difficilmente ne troverà uno.
Buona sera, ho una domanda su MQL5 se potete aiutarmi.
Non ho ancora nessun libro di testo sul 5.
La domanda è.
#property indicator_level1 30 - Ho definito il parametro. Quando carico l'indicatore sul grafico. Ho capito.
Cambio la linea dalla funzione ColorBuffer[], se la linea scende sotto questo parametro.
Ho un problema qui. Se apro l'indicatore e cambio il parametro con un altro, anche dopo aver caricato l'indicatore la linea di livello è messa lì, ma l'indicatore la calcola usando il parametro che era impostato prima, cioè #property indicator_level1 30
Come devo affrontare questo livello per poterlo cambiare in fase di esecuzione?
- Già provato a controllare il parametro. E ricalcolare tutta la catena di indicatori.
Ma ancora non lo ridisegna come voglio io!
Aiuto!
:)
Sequenza delle operazioni
RSI.mqh
#proprietà indicatore_livello1 30
#proprietà indicatore_livello2 70
Nel codice di descrizione della Calculaite. Alla fine della linea dove la linea passa attraverso For, ho aggiunto la funzione per cambiare il colore della linea se è sotto questo livello. ExtColorsBuffer [i] =0; se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1; } if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2;
Risultato atteso
Vedo lo stesso come sull'immagine ma quando apro le impostazioni e cambio il livello indicator_level1 / 2 nel processo di utilizzo dell'indicatore ottengo un ridisegno. L'indicatore è ridisegnato in modo che se la linea attraversa un livello cambia il suo colore. Ma per me è allo stesso livello di prima :)
Buona sera, ho una domanda su MQL5 se potete aiutarmi.
Non ho ancora nessun libro di testo sul 5.
La domanda è.
#property indicator_level1 30 - Ho definito il parametro. Quando carico l'indicatore sul grafico. Ho capito.
Cambio la linea dalla funzione ColorBuffer[], se la linea scende sotto questo parametro.
Ho un problema qui. Se apro l'indicatore e cambio il parametro con un altro, anche dopo aver caricato l'indicatore la linea di livello è messa lì, ma l'indicatore la calcola usando il parametro che era impostato prima, cioè #property indicator_level1 30
Come devo affrontare questo livello per poterlo cambiare in fase di esecuzione?
- Già provato a controllare il parametro. E ricalcolare tutta la catena di indicatori.
Ma ancora non lo ridisegna come voglio io!
Aiuto!
:)
Sequenza delle operazioni
RSI.mqh
#proprietà indicatore_livello1 30
#proprietà indicatore_livello2 70
Nel codice di descrizione della Calculaite. Alla fine della linea dove la linea passa attraverso For, ho aggiunto la funzione per cambiare il colore della linea se è sotto questo livello. ExtColorsBuffer [i] =0; se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1; } if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2;
Risultato atteso
Vedo lo stesso come sull'immagine ma quando apro le impostazioni e cambio il livello indicator_level1 / 2 nel processo di utilizzo dell'indicatore ottengo un ridisegno. L'indicatore è ridisegnato in modo che se la linea attraversa un livello cambia il suo colore. Ma per me è allo stesso livello di prima :)
Più informazioni
...
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrCrimson); // Поменяет цвет самого первого по счёту уровня на цвет CrimsonIndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrDeepSkyBlue); // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
Igor, abbiamo entrambi torto. Non ho capito subito il compito...
Oltre alla direttiva #property potete impostare il livello dell'indicatore con la funzione
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
Di conseguenza, questo livello dovrebbe essere impostato nei parametri dell'indicatore in entrata. In questo caso, il livello sarà disegnato dal valore specificato e dovrebbe essere cambiato da questo valore.
Print("Баланс на счёте = ",AccountInfoDouble(ACCOUNT_BALANCE));
printf("ACCOUNT_BALANCE = %G",AccountInfoDouble(ACCOUNT_BALANCE));
Se rimuovete %G in pintf allora il valore non verrà visualizzato, ma in Print viene visualizzato senza %G
Anche in Print viene mostrato il valore del saldo 10000.0, ma in printf solo l'intero 10000
Sono più interessato a quale sia la differenza tra Print e Printf e, soprattutto, perché non viene mostrato senza %G. Non ho capito nulla del libro di riferimento.
Ciao colleghi, ho una domanda, sto cercando di inserire un widget del mio segnale nella firma sul forum "forex money", ma hanno disabilitato o bloccato l'HTML, c'è un modo per convertirlo in un URL?
Grazie, come scrivere un ciclo per trovare il numero della barra che attraversa le due MA quando i primi due punti dell'algoritmo sono soddisfatti e ci sono valori delle due MA sulla prima barra?
/
.
Aha, hai risolto non attraverso gli array dopo tutto.
Nota: la soluzione attraverso gli array (copiando gli ultimi tre valori dagli indicatori negli array First[], Second[] e Third[]) è l'incrocio di due iMA- OnTick():
Nel vostro caso (un valore alla volta), il ciclo sarà come questo:
MA1_curr - il valore dell'indicatore MA1 sulla barra #i, MA1_prev - il valore dell'indicatore MA1 sulla barra #i+1
MA2_curr - il valore dell'indicatore MA2 sulla barra #i, MA2_prev - il valore dell'indicatore MA2 sulla barra #i+1
Quando si ottiene un incrocio (il segnale della variabile è "-1" o "1") - il valore di i sarà il numero della barra in cui è avvenuto l'incrocio.
Questo è l'algoritmo più semplice per trovare il crossover, ma non è il più preciso.
Sì, hai deciso di non usare gli array dopo tutto...
Grazie, il tuo altroMA Cross EA è stato usato come esempio
Voglio inserirlo sulla terza o quinta o...n barre dopo l'attraversamento
Nel vostro caso (ottenendo un solo valore) il ciclo sarà come questo
Perché non c'è un'uscita dal loop quando si trova un crossover?
Queste condizioni possono essere messe fuori dal ciclo?
.
Buon pomeriggio. Potreste dirmi in quale formato scaricare i dati storici dal server Finam o MFD.ru per importare lo storico delle quotazioni? Non posso assolutamente farlo. Posso solo salvarlo da txt a csv e questo è tutto.
Buon pomeriggio. Potreste dirmi in quale formato scaricare i dati storici dal server Finam o MFD.ru per importare lo storico delle quotazioni? Non posso assolutamente farlo. Posso solo salvarlo da txt a csv e questo è tutto.
Non devi scaricare nulla in MetaTrader 5 :) - Non appena ti connetti al server di trading, la storia reale dei tick è disponibile per te. Guarda versoCopyTicks
In MetaTrader 5 non è necessario scaricare nulla :) - Non appena ti connetti al server di trading, la storia reale dei tick è disponibile per te. Guarda versoCopyTicks
Ho solo bisogno di 10 anni di azioni russe. Il mio broker non mi dà tanto e difficilmente ne troverà uno.
Descrizione del problema
Sequenza delle operazioni
RSI.mqh
#proprietà indicatore_livello1 30
#proprietà indicatore_livello2 70
Nel codice di descrizione della Calculaite. Alla fine della linea dove la linea passa attraverso For, ho aggiunto la funzione per cambiare il colore della linea se è sotto questo livello.
ExtColorsBuffer [i] =0;
se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1;
}
if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2;
Risultato atteso
Vedo lo stesso come sull'immagine ma quando apro le impostazioni e cambio il livello indicator_level1 / 2 nel processo di utilizzo dell'indicatore ottengo un ridisegno. L'indicatore è ridisegnato in modo che se la linea attraversa un livello cambia il suo colore. Ma per me è allo stesso livello di prima :)
Più informazioni
...
5.0 Build 1755
Descrizione del problema
Sequenza delle operazioni
RSI.mqh
#proprietà indicatore_livello1 30
#proprietà indicatore_livello2 70
Nel codice di descrizione della Calculaite. Alla fine della linea dove la linea passa attraverso For, ho aggiunto la funzione per cambiare il colore della linea se è sotto questo livello.
ExtColorsBuffer [i] =0;
se (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1;
}
if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2;
Risultato atteso
Vedo lo stesso come sull'immagine ma quando apro le impostazioni e cambio il livello indicator_level1 / 2 nel processo di utilizzo dell'indicatore ottengo un ridisegno. L'indicatore è ridisegnato in modo che se la linea attraversa un livello cambia il suo colore. Ma per me è allo stesso livello di prima :)
Più informazioni
...
5.0 Build 1755
Descrizione del problema
Vorrei sapere perché non mi piace la risposta in un argomento separato.
Questo è il forum per il trading, i sistemi di trading automatico e il test delle strategie.
Ho bisogno di aiuto in MQL5 #property indicator_level
Alexey Viktorov, 2018.01.31 09:06
Igor, abbiamo entrambi torto. Non ho capito subito il compito...
Oltre alla direttiva #property potete impostare il livello dell'indicatore con la funzione
Di conseguenza, questo livello dovrebbe essere impostato nei parametri dell'indicatore in entrata. In questo caso, il livello sarà disegnato dal valore specificato e dovrebbe essere cambiato da questo valore.
Caso di prova
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
Aleksey Rodionov, 2018.02.06 16:31
Eccone uno interessante:
Se rimuovete %G in pintf allora il valore non verrà visualizzato, ma in Print viene visualizzato senza %G
Anche in Print viene mostrato il valore del saldo 10000.0, ma in printf solo l'intero 10000
Sono più interessato a quale sia la differenza tra Print e Printf e, soprattutto, perché non viene mostrato senza %G. Non ho capito nulla del libro di riferimento.
Ciao colleghi, ho una domanda, sto cercando di inserire un widget del mio segnale nella firma sul forum "forex money", ma hanno disabilitato o bloccato l'HTML, c'è un modo per convertirlo in un URL?
Ecco il codice <iframe frameborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green"></iframe>