Come codificare? - pagina 106

 

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

 
:: iBarShift troverà per voi la barra che inizia in quel giorno/ora... o anche la barra finale per quel giorno:ora... (dipende da quale timeframe o grafico vuoi iniziare per trovare il tuo massimo/basso).

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)

successivo...

:: usa queste posizioni delle barre per trovare i risultati di iHighest e iLowest

int iHighest( simbolo stringa, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

int iLowest( simbolo stringa, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

:: results & done , non usate nessun loop in questo!

 

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?

 
IngvarDagmar:
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

File:
 

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...

Motivazione: