[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 40

 
Noterday:

Ho inserito un nuovo blocco nel mio EA per calcolare la dimensione del lotto della posizione da aprire. L'idea è la seguente:

1. Lo stop è impostato al massimo del giorno corrente nel caso di una posizione di vendita, e al minimo del giorno nel caso di una posizione di acquisto.

2. Quando scatta la condizione di apertura dell'ordine, questo blocco per il calcolo del lotto inizia ad essere eseguito. Si calcola la distanza dal massimo e dal minimo del giorno in punti e si fa un loop dei lotti partendo da 0,1 per trovare il lotto necessario (5% quando uno stop è scattato)

Ma tali righe appaiono nel mio diario:

2011.01.30 16:59:47 TestGenerator: errore dati non abbinati (limite di volume 1107 al 2011.01.13 14:45 superato)

Non appena spengo questo blocco, tutto va bene. Dove mi sbaglio? Puoi dirmelo per favore?

Ecco il codice stesso:

È improbabile che il messaggio del tester sia legato al vostro codice.

Prova e riprova per ricalcolare tutti i timeframe nell'Archivio quotazioni.

Il messaggio dice che il volume di 1107 è stato raggiunto alle 14:45, il che è completamente impossibile, dato che il trading è continuato fino alle 24:00.

Tuttavia, questo errore è abbastanza trascurabile.

 
Saltan:

Quando si cerca di compilare un file include (*.mqh) si verifica un errore '\fine_di_programma' - nessuna funzione definita. Cosa c'è che non va e come risolvere il problema?

extern double Lots = 0.0;
extern int Percent = 0;
extern int StopLoss = 100;
extern int TakeProfit = 40;
extern int TrailngStop = 100;

int Level_New;
int Level_Old;


Succede ed è normale. Per esempio, nel mio Variables.mqh - le variabili esterne e globali dell'esperto sono specificate... quando si compila scrive '\fine_del_programma' - nessuna funzione definita, qualcosa come nessuna fine nel programma, nessuna funzione definita, ma allo stesso tempo, quando si compila l'esperto stesso, tutto è OK - 0 errori, 0 avvisi. (*.mqh) - non compilare separatamente, quando si compila l'Expert Advisor stesso, il compilatore metterà insieme tutti i suoi inludi e deciderà se ci sono errori, nessun errore, ecc. :-))) Quindi tutto è normale. Prova a compilare se stesso...

P.S. Durante la compilazione di altri inludi, il compilatore potrebbe scrivere che qualche variabile globale non è definita... Naturalmente, non deve essere definito se lo avete in una linea completamente diversa. Notate l'ordine in cui sono collocati gli inludi... Se una variabile è definita in un inlude e usata in un altro, il primo inlude deve essere messo prima del secondo, altrimenti si verificherà un errore durante la compilazione - qualche variabile non è definita, in generale tutte le variabili globali sono definite nell'inlude esterno. O in alternativa possono essere definiti in qualsiasi altro, se solo questo usa queste variabili. In qualche modo... È piuttosto vago ma dovrebbe essere comprensibile. Provalo.

 
DhP:

È improbabile che il messaggio del tester sia legato al vostro codice.

Prova e riprova per ricalcolare tutti i timeframe nell'Archivio quotazioni.

Il messaggio dice che il volume 1107 è stato raggiunto alle 14:45, il che è completamente impossibile, dato che il trading è continuato fino alle 24:00.

Tuttavia, questo errore è abbastanza trascurabile.

Bene, quando questo blocco è commentato, tutto va bene nel tester. Quindi l'errore è in questo blocco...
 
100yan:
Nessun problema... Ma come si fa a determinare il valore attuale del TF nel codice?

Periodo() aiuterebbe
 
Sergey_Rogozin:

Ho guardato la copertina del libro di STUDIO da tutti i lati e ancora non ho capito niente...))

Lo vedo scritto così dappertutto:

La seguente scrittura è corretta se voglio ottenere Price = OrderOpenPrice() per l'ulteriore elaborazione e l'impostazione degli stop?

Per me funziona, ma è accettabile?

La tua linea è valida come la prima.

In questo modo è possibile ottenere qualsiasi informazione su un ordine aperto,

ma solo una volta al momento della conferma dell'apertura.

Vedere https://docs.mql4.com/ru/trading/OrderSend

 
Noterday:
Bene, quando questo blocco è commentato, tutto va bene nel tester. Quindi l'errore è in questo blocco...
    double DistanceToHighDay = MathAbs(HighDay-Ask)*10000;
    double DistanceToLowDay  = MathAbs(Bid-LowDay)*10000;

È molto probabile che sia dovuto alla vostra gestione dei dati del giorno, che è incoerente nel volume con i minuti,

e il tester ti avverte di questo.
 
Le variabili HighDay e LowDay sono usate non solo in questo blocco, ma anche in altri luoghi del programma, quindi penso che non abbiano nulla a che fare con questo. Pensi che l'algoritmo di quel blocco sia corretto?
 

Qualcuno può fare un lavoro migliore?

1. Uno stop viene piazzato sul massimo del giorno in una posizione di vendita.

2. Poi calcoliamo la distanza in pip dal prezzo corrente al massimo del giorno.

3. Calcola quanto sarà questa distanza in $ con 0,1 lotto e calcola quanto sarà in % del deposito. Se sarà inferiore al 5%, allora conta per 0,2 lotti e così via fino a quando non supera il 5%.

E poi questa sarà la dimensione del lotto di cui avete bisogno.

Il mio codice non funziona per qualche motivo.... anche se tutto sembra essere scritto correttamente.

 

CHI LO SA?

come faccio a fare riferimento programmaticamente alla Bollinger che dice - apply to "Previous Indicator's Data" ? cosa devo mettere nel campo applied_price ?

grazie

 

Buona giornata a tutti. Domanda: Come faccio a far funzionare CheckEvents? Il file Events (da Komposter) è nella directory include. C'è un esempio in EventsExpert.mq4:

CheckEvents( MagicNumber );

        if ( eventBuyClosed_SL > 0 )
                Alert( Symbol(), ": Buy-позиция закрыта по СтопЛоссу!" );

Ma non ho bisogno di Alert. Ho bisogno che l'ordine pendente sia cancellato quando l'ordine a mercato chiude allo Stop Loss.

CheckEvents( Magic==0 );
    
   if (eventBuyClosed_SL > 0)
   ??????????? 
        
   DELETE("Buy Stop");

Cosa dovrei mettere al posto dell'Allarme? Se questa funzione è adatta allo scopo.