[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 1069

 
goldtrader:

Facciamo un semplice esperimento dimostrando che il drawdown in un trade separato (ogni trade) NON appare sul grafico del saldo/equity.

Scriviamo un Expert Advisor di due righe di codice:

Eseguiamolo sul grafico EURUSD D1 dal 1° maggio 2010 al 1° agosto 2010. Dovrà comprare EUR a 1.2200 senza stop e chiudere la posizione a take profit a 1.3000 Vedremo il drawdown sul grafico di equilibrio/equity e sul grafico di visualizzazione:

Come potete vedere, sul grafico di visualizzazione (in alto nello screenshot) il drawdown è visibile, mentre sul grafico di equilibrio/equity NON lo è. C'è solo un commercio lì. Guardiamo il rapporto del tester:

Nel rapporto del tester, l'estrazione è FIGURANTE.

Spero che la questione sia stata chiarita?

.

Forse, c'è una domanda "PERCHE' si fa così?" Questa è una domanda non per noi utenti, ma per gli sviluppatori di MT4. Secondo me, questo è sbagliato perché il grafico di equilibrio/equità non mostra l'overbetting.

Alexander, grazie mille! Molto dettagliato e approfondito, grazie mille per il vostro lavoro. Gli sviluppatori di MT4 non rispondono qui?
 

Colleghi, forse qualcuno si è imbattuto in questo.

C'è un limite al numero di file aperti contemporaneamente? 4 è OK, 5 è aperto, ma non ci scrive. Non riesco a capire cosa c'è che non va.

 

C'è un problema. Una transazione dovrebbe essere aperta quando passa attraverso il limite superiore (acquisto) o inferiore (vendita) del corridoio dell'indicatore.

double barier = 0.08; // confini del corridoio.

R() - funzione indicatore

Funzione per controllare la condizione di attraversamento del confine superiore o inferiore:

int RFilter()

{

se ( R(2)> -barier && R(1) < -barier ) ritorna (-1);

se ( R(2)< barier && R(1) > barier ) ritorna (1);

}

L'Expert Advisor apre una posizione immediatamente quando l'indicatore passa un confine (indipendentemente da quale). Se è su - compra, se è giù - vendi.

 
dzhini:

C'è un problema. L'operazione dovrebbe essere aperta quando passa attraverso il limite superiore (acquisto) o inferiore (vendita) del corridoio dell'indicatore.

...

In realtà succede che l'EA apre una posizione immediatamente quando l'indicatore passa il confine (non importa quale). Se sale - compra, se scende - vendi.

Aumentare leggermente il valore della variabile barier
 
costy_:

Domanda per gli intenditori

Posso creare il mio strumento di trading per il mio tester?

Sostituisci EURUSD30_2.fxt con il mio o con qualcos'altro.

metaquotes\tester\history\EURUSD30_2.fxt

Ho provato a creare simple_csv2fxt, ma tester ha sostituito il file con uno proprio.

Forse qualcuno ha qualche esperienza di creazione, grazie.

C'è, c'è. E c'è un buon articolo sull'argomento.
 
Reshetov:
Aumentare leggermente il valore della variabile barier
Non ha aiutato. Potrebbe essere dovuto a un errore di assegnazione dei segni?
 
dzhini:
Non è utile. Potrebbe essere dovuto a un errore di assegnazione dei segni?

Puoi leggere i fondi di caffè o qualcos'altro, dato che ovviamente non ci sono abbastanza informazioni.

1. un indicatore o oscillatore:

2. Se oscillatore, ha dei limiti o no? Se lo fa, quali sono i suoi alti e bassi?

3. Forse il problema non è nel codice della suddetta funzione, ma nel codice della sua interpretazione?

Poiché non ci sono telepati qui, e tutte le informazioni necessarie che avete sono classificate, la domanda è la risposta. Cioè, in base alle informazioni che hai fornito, aumentando la variabile avresti dovuto risolvere il problema.

 
Reshetov:

Si possono leggere i fondi di caffè o qualcos'altro, dato che le informazioni sono chiaramente insufficienti.

1. un indicatore o oscillatore:

2. Se è un oscillatore, è limitato o no? Se lo fa, quali sono il suo massimo e il suo minimo?

3. Forse il problema non sta nel codice della funzione di cui sopra, ma nel codice della sua interpretazione?

Dato che non ci sono telepati qui e hai tutte le informazioni che ti servono segnate come segrete, la domanda è la risposta. Cioè a colpo d'occhio, a giudicare dalle informazioni che fornite, l'aumento della variabile dovrebbe aver risolto il problema.

Questo è un indicatore con la seguente formula:

doppio R(int shift)
{
double coef1 = 100.0 * (iMA(NULL, 0, perfast, 0,MODE_LWMA, PRICE_CLOSE, shift) - iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift)) * iATR(NULL, 0, perslow, shift);
double coef2 = coef1 / iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift) / iATR(NULL, 0, perslow, shift);
double main =(MathExp(2.0 * coef2) - 1.0) / (MathExp(2.0 * coef2) + 1.0);

ritorno (principale);

}

Vincoli: (-1;1)

 
dzhini:

Questo è un indicatore con questa formula:

doppio R(int shift)
{
double coef1 = 100.0 * (iMA(NULL, 0, perfast, 0,MODE_LWMA, PRICE_CLOSE, shift) - iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift)) * iATR(NULL, 0, perslow, shift);
double coef2 = coef1 / iMA(NULL, 0, perslow, 0, MODE_LWMA, PRICE_CLOSE, shift) / iATR(NULL, 0, perslow, shift);
double main = (MathExp(2.0 * coef2) - 1.0) / (MathExp(2.0 * coef2) + 1.0);

ritorno (principale);

}

Vincoli: (-1;1)

La vostra funzione deve funzionare correttamente secondo le condizioni menzionate nei commenti:

int RFilter()

{

if ( R(2)> -barier && R(1) < -barier ) return (-1); // posa corta se il valore dell'indicatore sulla barra precedente è superiore alla barra inferiore e quella attuale è inferiore a questa barra

if ( R(2)< barier && R(1) > barier ) return (1); // posa lunga se il valore dell'indicatore è sotto la barra superiore sulla barra precedente ed è sopra questa barra su quella attuale

return(0); // Non fare nulla in tutti gli altri casi.

}

 
Reshetov:

Allora la vostra funzione dovrebbe funzionare correttamente per le condizioni nei commenti:

int RFilter()

{

if ( R(2)> -barier && R(1) < -barier ) return (-1); // posa breve, se il valore dell'indicatore sulla barra precedente è superiore alla barra inferiore e quella attuale è inferiore a questa barra

if ( R(2)< barier && R(1) > barier ) return (1); // posa lunga se il valore dell'indicatore è sotto la barriera superiore sulla barra precedente e la supera sulla barra attuale

return(0); // Nessuna azione in tutti gli altri casi.

}

Ma non funziona :(
Motivazione: