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
...
Come è dichiarato il vostro LastProfitHigh?
Se è dichiarata all'interno del corpo della funzione (start() per esempio) cambierà sempre valore se non la dichiari come statica. Quindi, se è dichiarata come locale (all'interno della funzione) provate a dichiararla nell'ambito globale o come variabile statica e in questo modo "erediterà" i valori tra due tick.
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.Nuovo alla codifica
Come è dichiarato il tuo LastProfitHigh? Se è dichiarato all'interno del corpo della funzione (start() per esempio) cambierà sempre valore se non lo dichiari come statico. Quindi, se è dichiarata come locale (all'interno della funzione) prova a dichiararla allo scope globale o come variabile statica e in questo modo "erediterà" i valori tra due tick.
Ciao mladen,
Ora ho spostato la variabile al di fuori della func start() e l'ho dichiarata "static double", grazie per la risposta e incrociamo le dita perché venga visualizzata correttamente.
La logica del codice è dichiarata correttamente?
aud4xtrader
La logica è OK
Se spostate la variabile fuori dall'inizio non avete bisogno di dichiararla statica (è automaticamente una variabile globale quando è fuori da qualsiasi corpo di funzione - ed è "visibile" attraverso tutto il codice) Se volete che la variabile rimanga locale a qualche funzione e mantenga lo stato precedente di essa (lo stato su un tick precedente, per esempio) allora la dichiarate come statica
Ecco due esempi che finiscono con lo stesso risultato
int start()
{
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
[/PHP]
or the same thing but with static variable
[PHP]
int start()
{
static double previousProfit=0;
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
Ciao mladen,
Ora ho spostato la variabile al di fuori della func start() e l'ho dichiarata "static double", grazie per la risposta e incrociamo le dita perché venga visualizzata correttamente.
La logica del codice è dichiarata correttamente?Come codificare?
Funziona benissimo, grazie ancora per l'eccellente aiuto.
aud4xtrader
La logica è OK
Se spostate la variabile al di fuori dell'inizio, allora non avete bisogno di dichiararla statica (è automaticamente una variabile globale quando è al di fuori di qualsiasi corpo di funzione - ed è "visibile" attraverso tutto il codice) Se volete che la variabile rimanga locale a qualche funzione e mantenga ancora lo stato precedente di essa (lo stato su un tick precedente, per esempio) allora la dichiarate come statica
Ecco due esempi che porteranno allo stesso risultato
int start()
{
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
[/PHP]
or the same thing but with static variable
[PHP]
int start()
{
static double previousProfit=0;
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
Perfetto! Grazie.
Prova queste 2 funzioni , la
Entrambe restituiscono true se il prezzo è uguale o se la distanza dal prezzo di alcuni ordini aperti attualmente è compresa nella distanza specificata
{
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));
}
Come codificare?
Ciao Pip,
Grazie per gli snippet di codice, è fantastico il modo in cui le persone possono condividere idee e stili di codifica, man mano che la mia conoscenza cresce posso trarre lezioni da persone come te e mladen.
Perfetto! Grazie.
Salve,
ho una richiesta.
Se voglio cancellare tutti gli oggetti che contengono nel nome la parola "esempio" con il comando ObjectDelete come devo scrivere il codice?
Per Esempio
Nome dell'oggetto
"Esempio13241"
"Esempio453623"
Voglio cancellare tutti gli oggetti che contengono la parola "Esempio".
Grazie mille
...
Usa qualcosa del genere (questo cancellerà tutti gli oggetti che hanno nomi che iniziano con "Esempio"):
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
Ciao,
Ho una richiesta.
Se voglio cancellare tutti gli oggetti che contengono nel nome la parola "esempio" con il comando ObjectDelete come devo scrivere il codice?
Per Esempio
Nome dell'oggetto
"Esempio13241"
"Esempio453623"
Voglio cancellare tutti gli oggetti che contengono la parola "Esempio".
Grazie milleUsa qualcosa del genere (questo cancellerà tutti gli oggetti che hanno nomi che iniziano con "Esempio"):
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
Grazie, è perfetto.
Ho un'altra domanda ^^.
Creo un segmento di linea di tendenza nel grafico con lunghezza dichiarata. Posso impostare il colore e va bene. Vorrei sapere se è possibile impostare più di 1 colore nella stessa linea di tendenza.
Per esempio per la prima parte 1/3 un colore, per la parte 2/3 un altro colore e per la parte 3/3 un altro.
È possibile?
Grazie^^
..
In breve, se vi riferite agli oggetti, la risposta è no. Dovresti creare 3 oggetti per questo
Se stai usando i buffer per questo, allora avresti bisogno di 5 buffer di disegno per una linea a 3 colori non ridipinta, e dato che ci sono solo 8 buffer di disegno, questo ti limita notevolmente
Grazie, è perfetto.
Ho un'altra domanda ^^.
Creo un segmento di linea di tendenza nel grafico con lunghezza dichiarata. Posso impostare il colore e va bene. Vorrei sapere se è possibile impostare più di 1 colore nella stessa linea di tendenza.
Per esempio per la prima parte 1/3 un colore, per la parte 2/3 un altro colore e per la parte 3/3 un altro.
È possibile?
Grazie^^