Come codificare? - pagina 311

 

Ciao Mladen, come sempre, u rock!

mladen:
Terrance Usa Close[0] in questo caso. Quasi tutti gli EA usano close per questo scopo, quindi penso che funzionerà anche per te
 

...

Se il tuo EA viene eseguito solo all'inizio della barra, possono esserci un paio di ragioni:

- è limitato a lavorare solo su una nuova barra. Questo approccio ha alcuni problemi se si devono gestire i trailing stop e altre cose simili, ma se funziona con stop loss e take profit fissi allora è lo stesso

- o sta controllando i segnali su una barra chiusa (che è il modo più comune (e migliore) di controllare i segnali). Di conseguenza, sembra che lo stia facendo quando si forma una nuova barra mentre, in realtà, sta ricevendo segnali su una barra chiusa che si è appena formata. Lavorare sui segnali di una barra chiusa è la migliore pratica negli EA e se il tuo EA funziona così, meglio non cambiare nulla

Premeus:
Ho notato che il mio EA non funziona tra il movimento del prezzo nel time frame M1. So che l'EA verrà eseguito ogni tick in arrivo.

Ma ho visto che viene eseguito ogni volta che inizia una nuova barra.

Ho capito male?

C'è un modo per forzare l'ea ad attivare ogni tick in arrivo?

Cerco di controllare i miei profitti e le mie perdite utilizzando i profitti e le perdite non in pip. Quando si verifica un picco l'EA non chiude l'ordine quando raggiunge l'impostazione dei profitti o delle perdite fino a quando non si verifica una nuova barra.

Qualcuno mi aiuti a risolvere questo problema.

Sono nuovo per la codifica degli EA.

Grazie in anticipo.
 

Grazie, mladen.

Proverò il tuo suggerimento.

 

Saluti dei codificatori,

Ho bisogno di assistenza per trovare una funzione EA che controlli l'esecuzione dell'ordine in modo che un ordine non possa essere aperto se esiste già un ordine allo stesso prezzo.

logica semplice: se il prezzo di apertura dell'ordine e il tipo di ordine = un prezzo di apertura dell'ordine esistente e il tipo di ordine, allora esci e cerca il prossimo criterio di entrata

Inoltre, ho bisogno di una funzione che impedisca l'esecuzione di un ordine se si trova a x pip di distanza da un prezzo già esistente.

logica semplice: se il prezzo aperto dell'ordine e il tipo sono < l'ultimo prezzo aperto dell'ordine e il tipo + x pips, allora esco e cerco il prossimo criterio di entrata

Grazie,

Pip

 

...

Provate queste 2 funzioni
: la prima è scoprire se c'è già un ordine con lo stesso identico prezzo aperto

La seconda è controllare se c'è un ordine che si trova entro nnn punti dal prezzo desiderato

Entrambi restituiscono true se il prezzo è uguale o se la distanza dal prezzo di alcuni ordini attualmente aperti è compresa nella distanza specificata

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
Saluti Dei Codificatori,

Ho bisogno di assistenza per trovare una funzione EA che controlli l'esecuzione dell'invio degli ordini in modo che un ordine non possa essere aperto se esiste già un ordine allo stesso prezzo.

logica semplice: se il prezzo di apertura dell'ordine e il tipo di ordine = un prezzo di apertura dell'ordine esistente e il tipo di ordine, allora esci e cerca il prossimo criterio di entrata

Inoltre, ho bisogno di una funzione che impedisca l'esecuzione di un ordine se si trova a x pip di distanza da un prezzo già esistente.

logica semplice: se il prezzo aperto dell'ordine e il tipo sono < l'ultimo prezzo aperto dell'ordine e il tipo + x pips, allora esco e cerco il prossimo criterio di entrata

Grazie,

Pip
 
mladen:
Possono esserci un paio di ragioni, ma le più comuni sono:
- stop loss e/o take profit sono troppo vicini al prezzo corrente

- il tuo broker è un broker di tipo ECN/STP nel qual caso devi prima piazzare un ordine con stop loss e take profit impostati a 0 e solo quando un ordine è aperto puoi modificare lo stop loss e/o take profit ai valori desiderati (onorando il punto precedente ovviamente)

Ciao!

Grazie per l'aiuto!

Quindi, se ho capito bene, se inserisco TakeProfit e StopLoss in OrderSend come "regole" esterne, questo EA funziona bene solo su broker Non-ECN?

scusate il mio inglese

 

...

Con ECN/STP come broker devi aprire un ordine con stop loss e/o take profit impostato a 0 e quando l'ordine è già aperto, solo allora puoi modificare stop loss e/o take profit

pearl1:
Ciao!

Grazie per l'aiuto!

Quindi, se ho capito bene, se inserisco TakeProfit e StopLoss in OrderSend come "regole" esterne, questo EA funziona bene solo su broker Non-ECN?

scusa per il mio inglese
 
mladen:
Si Con ECN/STP come broker devi aprire un ordine con stop loss e/o take profit impostato a 0 e quando l'ordine è già aperto, solo allora puoi modificare stop loss e/o take profit

Grazie ancora, quindi... come posso risolvere questo problema?

 

...

Come ho detto, devi farlo in 2 passi:

1. passo - aprire un ordine (usando OrderSend()) con stop loss e take profit impostati a 0

2. passo - modificare l'ordine (usando OrderModify()) impostando lo stop loss e il take profit ai valori desiderati

Quindi, il codice deve essere modificato per fare il lavoro in 2 passi, invece che in uno

pearl1:
Grazie ancora, quindi... come posso risolvere questo problema? scusa
 

Nuovo per la codifica

Ciao a tutti,

Sono nuovo nella codifica e sto lentamente imparando il linguaggio e la sintassi, ma ho una domanda su come MT4 aggiorna le variabili.

Ho provato a codificare un semplice EA che mostra il profitto più alto che un trade attualmente aperto ha avuto e dovrebbe aggiornarsi solo se viene raggiunto un nuovo massimo, ma quello che sta succedendo è che l'importo si sta muovendo verso il basso e verso l'alto come fa il profitto, non riesco a vedere il mio errore nella logica del codice.

Controllo per assicurarmi che il trade selezionato sia ancora aperto

t_CloseTime=OrderCloseTime(); //restituisce 0 se l'ordine non è chiuso

if(t_CloseTime==0) //l'ordine è chiuso se non è zero.

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

Quindi se la logica è corretta perché questa variabile "LastProfitHigh" va su e giù....

Grazie per il vostro aiuto.

Motivazione: