![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Questo funziona per il prezzo. Vuole trovare il più alto e il più basso di un idicatore.
Lux
Salve,
Puoi provare questo:
....
int highest=0, lowest=0, bar=WindowBarsPerChart();
for(int shift=0;shift<bar;shift++)
{
double indie=iCustom(.........,shift);
if(highest<indie) highest=indie;
if(lowest==0) lowest=indie;
if(lowest>indie) lowest=indie;
}
.....
nota: questo codice calcola anche l'attuale candela aperta, se vuoi calcolare solo la candela chiusa, usa shift=1.
Spero che questo aiuti,
Ardie
Aggiornare programmaticamente l'indicatore di riverniciatura
Salve, sto cercando di trovare un modo per aggiornare programmaticamente un indicatore di repaint ogni x minuti,
Sto cercando di trovare un modo per aggiornare un indicatore repaint ogni x minuti.
L'unico modo per aggiornarlo attualmente, è quello di cliccare nell'indicatore sul grafico e poi cliccare su "ok". Si può automatizzare con il codice MQL4?
Ho trovato qualcosa sul sito di codersguru, Programmatically Refresh your charts | www.metatrader.info, ma sembra non funzionare per me. O c'è qualcuno che l'ha provato e ha ottenuto un risultato diverso (funzionante)?
Grazie a voi
Scusa per il mio inglese.
Voglio contare il numero di volte in cui la condizione è vera solo una volta per barra. Il computer aggiunge molte volte per barra. Cosa faccio di sbagliato?
Voglio contare il numero di volte in cui la condizione è vera solo una volta per barra. Il computer aggiunge molte volte per barra. Cosa faccio di sbagliato?
Usate una funzione come questa...
bool NewBar() {
static datetime LastTime = 0;
if (Time[0] != LastTime) {
LastTime = Time[0];
return (true);
} else
return (false);
}
[/php]
Then put an if statement round your main code, like...
[php]
if(NewBar() == true){
// do the main processing here
}
Spero che questo aiuti.
Lux
Sei stata gentile, Lux.
Ho trovato questo:
Elaborare ogni barra solo una volta - MQL4 forum
Automatizzato 2008.01.15 18:54 Potresti eseguire il tuo codice al primo tick di una nuova barra (cioè subito dopo la chiusura della barra precedente).
Ecco una funzione che restituisce VERO se si è appena formata una nuova barra:
// Questa funzione restituisce TRUE al primissimo tick di una barra, cioè dopo che la barra precedente si è appena chiusa
bool NewBar()
{
if(PreviousBarTime<Time[0])
{
PreviousBarTime = Time[0];
return(true);
}
return(false); // nel caso in cui l'istruzione if - else non venga eseguita
} devi dichiarare datetime PreviousBarTime all'inizio del tuo EA...
poi nel tuo codice potresti semplicemente usare
if ( NewBar() )
{
...... codice che deve essere eseguito dopo la chiusura di una barra qui ....
} grazie
automatedfx@gmail.com
---------------------------------------------------
Ho notato che hai usato STATIC... Mi sono informato... qual è il vantaggio di usare STATIC contro una variabile globale?
ea entrata multipla
per favore aiutatemi. vorrei trovare o ho bisogno di aiuto per creare un ea con i seguenti parametri di input. quattro entrate separate di commercio ciascuno con numero di lotti, stop loss, trailing stop, break even, e obiettivo di profitto. i commerci si apriranno dopo aver cliccato sul pulsante expert advisor.
grazie
Ho bisogno di aiuto sull'opzione trailing stop
Ho trovato questo EA sul forum MQL4, un EA piuttosto interessante.
Qualcuno potrebbe aiutarmi ad aggiungere un'opzione di trailing stop che può impostare il trailing stop solo dopo il valore di profitto che ho impostato?
themastermind2.mq4
Ciao a tutti...
ho un problema con l'EA che ho scritto... in realtà, l'EA basato sull'indicatore MACD... quando il MACD diventa come 'n' forma, aprire post Sell, e quando MACD diventa come 'u' forma, l'EA si aprirà Buy...
il problema è, l'EA non ha aperto alcun post... dopo aver fatto qualche backtest anche, non c'è nessun post aperto da questo EA... qualcuno può per favore aiutarmi a trovare ciò che è sbagliato con il codice?
Ecco il codice...
extern double TakeProfit = 20;
extern double Lots = 0.1;
extern double StopLoss = 20;
extern double MagicNumber = 17384;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
double MacdBuffer1[];
double MacdBuffer2[];
double MacdBuffer3[];
double MacdBuffer4[];
double MacdBuffer5[];
double MacdBuffer6[];
double MacdBuffer7[];
double MacdBuffer8[];
int init()
{
//----
//SetIndexBuffer(0, lag1_buffer);
//SetIndexBuffer(1, lag2_buffer);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
for(int i=0; i<limit; i++)
MacdBuffer1=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
MacdBuffer2=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-1);
MacdBuffer3=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+1);
MacdBuffer4=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-2);
MacdBuffer5=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+2);
MacdBuffer6=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-3);
MacdBuffer7=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+3);
/*Alert( "MacdBuffer7 =",MacdBuffer7);
Alert( "MacdBuffer5 =",MacdBuffer5);
Alert( "MacdBuffer3 =",MacdBuffer3);
Alert( "MacdBuffer1 =",MacdBuffer1);
Alert( "MacdBuffer2 =",MacdBuffer2);
Alert( "MacdBuffer4 =",MacdBuffer4);
Alert( "MacdBuffer6 =",MacdBuffer6);*/
//----
int ticket_buy, ticket_sell, total;
total=OrdersTotal();
//MACD become 'u' shape
if (MacdBuffer7>MacdBuffer5&&MacdBuffer5>MacdBuffer3&&MacdBuffer3>MacdBuffer1
&&MacdBuffer1<MacdBuffer2&&MacdBuffer2<MacdBuffer4&&MacdBuffer4<MacdBuffer6)
{
if (total < 1) {
ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"scalp 1 min - buy",MagicNumber,0,Green);
if(ticket_buy>0)
{
if(OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
} else {
}
}
//MACD become 'n' shape
if(MacdBuffer7<MacdBuffer5&&MacdBuffer5<MacdBuffer3&&MacdBuffer3<MacdBuffer1
&&MacdBuffer1>MacdBuffer2&&MacdBuffer2>MacdBuffer4&&MacdBuffer4>MacdBuffer6)
{
if (total < 1) {
ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"scalp 1 min - sell",MagicNumber,0,Red);
if(ticket_sell>0)
{
if(OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
} else {
}
}
//----
return(0);
}
//+------------------------------------------------------------------+spero che qualcuno possa aiutarmi a risolvere il problema... non sono bravo a programmare i codici... grazie...