Come codificare? - pagina 67

 

contatore?

Ho programmato indicatori per così tanti mesi che sono un po' carente di esperti, ma ho intenzione di risolverlo. Lungo la strada ho bisogno di un piccolo aiuto. Nel mio esperto che ho messo insieme faccio controllare alla chiusura della barra se c'è una condizione che giustifichi la chiusura del trade.

Inizio con una variabile globale,

//--- Global variable

datetime PreviousBar; // record candle/bar time[/CODE]

and set one bool in init()

int init()

{

do_this = true;

}

[/CODE]

blah blah boring stuff.... etc, etc

then in the main loop I have:

[CODE]

if(do_this == true)

{

PreviousBar = Time[0];

do_this= false; // so it does this only once only

}

if(NewBar() == true)

{

if(TotalOpenOrders() == blah blah close my order you crazy monkey)

}

and outside the main loop I have:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

OK, quindi è impostato per fare una volta per barra. Quello che voglio fare è avere una funzione che incrementa 90 secondi o 60 secondi o qualsiasi altra cosa, poi imposta un bool a true dopo aver incrementato quel tempo. Fondamentalmente voglio controllare gli indicatori ogni 60, 90, 120 secondi o altro invece che alla chiusura della barra. Come posso farlo?

Grazie per qualsiasi aiuto,

- nittany1

 
nittany1:
Ho programmato indicatori per così tanti mesi che sono un po' carente di esperti, ma ho intenzione di risolverlo. Lungo la strada ho bisogno di un piccolo aiuto. Nel mio esperto che ho messo insieme ho fatto controllare alla chiusura della barra se c'è una condizione che giustifica la chiusura del trade.

Inizio con una variabile globale,

//--- Global variable

datetime PreviousBar; // record candle/bar time[/CODE]

and set one bool in init()

int init()

{

do_this = true;

}

[/CODE]

blah blah boring stuff.... etc, etc

then in the main loop I have:

[CODE]

if(do_this == true)

{

PreviousBar = Time[0];

do_this= false; // so it does this only once only

}

if(NewBar() == true)

{

if(TotalOpenOrders() == blah blah close my order you crazy monkey)

}

and outside the main loop I have:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

OK quindi è impostato per fare una volta per barra. Quello che voglio fare è avere una funzione che incrementa 90 secondi o 60 secondi o qualsiasi altra cosa, poi imposta un bool a true dopo aver incrementato quel tempo. Fondamentalmente voglio controllare gli indicatori ogni 60, 90, 120 secondi o altro invece che alla chiusura della barra. Come posso farlo?

Grazie per qualsiasi aiuto,

- nittany1

Questo dovrebbe farlo. Ricorda che MT usa l'esecuzione basata sui tick, quindi la precisione al secondo non è possibile (a meno che tu non metta tutto in loop nella sub Init()).

if (CallIndicatorsCheck())

{

// il vostro codice qui

}

bool CallIndicatorsCheck()

{

static datetime Oldtime;

int Secs = 90;

bool Flag;

se (CurrTime() >= Oldtime) {

Oldtime = CurrTime() + Secs;

Flag = true; }

return(Flag);

}

 

Posizionamento dei commenti

Qualcuno potrebbe mostrarmi il codice per posizionare un commento nell'angolo SUPERIOREDESTRO dello schermo, piuttosto che in quello superiore sinistro di default?

Grazie!

 
wolfe:
Qualcuno potrebbe mostrarmi il codice per mettere un commento nell'angolo in alto adestra dello schermo, invece che in quello predefinito in alto a sinistra? Grazie!

Non si può. Dal manuale MQL4:

void Comment( ...)La funzione emette il commento definito dall'utente nell'angolo superiore sinistro del grafico.

Se avete bisogno per morte potreste creare degli oggetti.

 
wolfe:
Qualcuno potrebbe mostrarmi il codice per mettere un commento nell'angolo in alto adestra dello schermo, invece che in quello predefinito in alto a sinistra? Grazie!

LinusGuy ha ragione; non c'è un modo diretto. La soluzione più semplice è quella di riempire il tuo Commento con degli spazi --

Comment(" hello world!");

sposterà il testo a destra.

Puoi anche mettere dei feed di linea per far scendere la pagina.

Comment("\n \n \n \n \n \testo tuo");

o combinare i linefeed e lo spazio per stampare nell'angolo in basso a destra dello schermo.

mog

 
mog:
LinusGuy ha ragione; non c'è un modo diretto. La soluzione più semplice è quella di riempire il tuo commento con degli spazi --

Comment(" ciao mondo!");

sposterà il testo a destra.

Puoi anche inserire dei feed di linea per far scendere la pagina.

Comment("\n \n \n \n \n \testo");

o combinare i linefeed e lo spazio per stampare nell'angolo in basso a destra dello schermo.

mog

Grazie per l'aiuto. Ci proverò!

 

nessun nuovo trade per X barre dopo un trade perdente

ciao team - sperando che qualcuno possa aiutare per favore...

come faccio a impedire l'inizio di un nuovo trade per 10 barre se l'ultimo trade era in perdita?

grazie

 

La funzione qui sotto restituirà true se la cronologia del conto ha un'operazione in perdita che si è chiusa all'apertura della decima barra passata o dopo (la barra corrente è 0),

e restituisce falso altrimenti.

bool postMortem()

{

datetime since = Time[ bar+10 ];

for ( int i = OrdersHistoryTotal() - 1; i >= 0; i-- ) {

if ( ! OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )

continue;

if ( OrderProfit() = since )

return( true );

}

return( false );

}

[/PHP]

If you add that function to your EA, then include a statement like the following in the start() function, then Bob's your uncle.

[PHP]if ( postMortem() ) return( 0 );
 

grazie mille per questo - lo proverò

saluti

 

Ragazzi, avete lo stesso problema?

Ho codificato un esperto. Voglio aprire una posizione quando il prezzo è lo stesso di un indicatore. Per fare questo uso la seguente frase:

//per comprare

doppio indicatorpast = icustom(....................,1);

doppio indicatornow = icustom(....................,0);

se (close[1]indicatornow) OpenBUY();

se (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();

ma con questo satatement, l'esperto apre posizioni non solo quando il prezzo incrocia l'indicatore, ma apre anche posizioni sopra l'indicatore. Voglio che l'esperto apra la posizione SOLO quando incrocia l'indicatore, quindi ho provato questo:

//per comprare

double indicatorpast = icustom(....................,1);

doppio indicatornow = icustom(....................,0);

se (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();

se (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();

Ma questa dichiarazione non funziona.

Sapete cosa succede? Perché penso che non ci siano errori nella dichiarazione.

Saluti.

Motivazione: