[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 71
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ecco un consiglio:
NormalizeDouble(Low[i]-Low[i+1],Digits)<=3*Point --- differenza di barre adiacenti. Se la condizione non è soddisfatta -> Return(False); (restituisce false)
Return(False) dopo il passaggio del ciclo
Possiamo farlo in un modo diverso:
Se la condizione NormalizeDouble(Low[i]-Low[i+1],Digits)<=3*Point è vera, aumenta il contatore delle barre adiacenti (inizialmente uguale a zero) di 1,
se la condizione è falsa, restituiamo il valore del contatore della barra adiacente.
Più grande è il numero restituito dalla funzione, più forte è l'insieme. Se viene restituito zero - il setup non esiste.
Non penso che il prezzo debba essere normalizzato perché abbiamo solo bisogno di confrontare con un intero. È meglio usare la funzioneMathAbs(double value), in modo che se uno dei prezzi è più alto dell'altro, il segno sull'uscita è sempre positivo.
Ecco un altro punto. Si scopre che non abbiamo affatto bisogno di un ciclo!
Possiamo semplicemente usare una funzione con un contatore. Controlliamo continuamente 2 barre vicine per gli estremi, e se sono uguali, il contatore viene incrementato di 1 (inizialmente sarà 0, ovviamente). Poi, sulla prossima nuova barra si effettua un controllo simile. Se gli estremi sono uguali, il contatore sarà incrementato di 1, ecc. Non c'è bisogno di un ciclo qui mentre andiamo avanti, giusto?
Dopo tutto, non sappiamo quante barre avremo con lo stesso valore di estremo e quindi non ha senso specificare il parametro di spostamento nella storia.
Si parla molto di trading ad alta frequenza. Dicono che l'HFT li batte tutti. Qual è il suo principale vantaggio su di noi? Il fatto che un ping breve sia una buona cosa in sé è comprensibile, ma ci vuole più di un millisecondo per fare uno scambio :) Quale nuova qualità appare nell'HFT e come differiscono gli algoritmi in linea di principio?
Grazie.
Tu guidi una Zaporozhets e questi ragazzi guidano una Ferrari. Si può sorpassare (non si tratta di algoritmi)
Tu guidi una Zaporozhets e questi ragazzi guidano una Ferrari. Si può sorpassare (non si tratta di algoritmi)
Tu guidi una Zaporozhets e questi ragazzi guidano una Ferrari. Puoi superarli?
C'è però una differenza fondamentale.
Almeno prendi il rischio/rendimento. Se l'HFT registra un profitto per punti, ovviamente non piazza gli stop, e la chiusura della posizione secondo altri criteri. Può essere che ogni tick contro una posizione sia un'uscita). Ma allora da dove viene il profitto?
Come faccio a determinare da quale lato la SMA incrocia i prezzi?
Non credo che abbiamo bisogno di normalizzare il prezzo, perché abbiamo solo bisogno di confrontare con un intero. È meglio usare la funzioneMathAbs(double value), in modo che se uno dei prezzi è più alto dell'altro, il segno dell'output è sempre positivo.
Ecco un altro punto. Si scopre che non abbiamo affatto bisogno di un ciclo!
Possiamo semplicemente usare una funzione con un contatore. Controlliamo continuamente 2 barre vicine per gli estremi, e se sono uguali, il contatore viene incrementato di 1 (inizialmente sarà 0, ovviamente). Poi, sulla nuova barra successiva, facciamo un controllo simile. Se gli estremi sono uguali, il contatore sarà incrementato di 1, ecc. Non c'è bisogno di un ciclo qui mentre andiamo avanti, giusto?
Dopo tutto, non sappiamo quante barre avremo con lo stesso valore estremo e quindi non ha senso specificare il parametro di spostamento nella storia.
Naturalmente, MathAbs() è necessaria lì - l'ho scritta di getto, seduto al volante - non si può scrivere molto, inoltre ho dato un suggerimento per questo. Normalizzare i prezzi, perché confrontare i numeri reali richiede la normalizzazione, mentre non stiamo confrontando con un intero (perché 3*Point è int*double- conversione da int a double). Farei ancora una funzione che confronta le barre su ogni tick - sono abituato a pensare immediatamente per il reale. Se l'EA è disabilitato per qualche motivo, la variabile che memorizza il valore del contatore sarà resettata quando l'EA viene riavviato - questo non è buono ... è una perdita di dati. Ma in caso di ricerca ritmica (o meglio per ottimizzare la velocità), il riavvio di Expert Advisor in questo caso non è così male - ricalcolerà tutto. Pertanto, è meglio creare una funzione separata che confronta un dato numero di barre adiacenti su ogni nuova barra per l'uguaglianza (bene, come l'avete voi) e restituisce il numero di barre consecutive uguali per un dato criterio, a partire dalla prima e più avanti nella storia per il numero di barre che sono state passate alla funzione (dieci per pezzo...).
In generale... qualcosa del genere ...
Ancora una volta per aiuto.
Come posso dire da quale lato la SMA è attraversata dal prezzo?
Se (
iMA(Symbol(), Period(), 1, 0, MODE_SMA, PRICE_CLOSE, 2) <= SMA(bla, bla, bla, 2)
и
iMA(Symbol(), Period(), 1, 0, MODE_SMA, PRICE_CLOSE, 1) > SMA(bla, bla, bla, 1)
) allora
{ il prezzo ha attraversato la tua SMA dal basso verso l'alto sulla prima barra}
Grazie, ho trovato l'errore.
Buon pomeriggio, per favore aiutatemi. Ho scaricato l'indicatore VininI_HMA e ho provato a inserirlo nel modello EA, ma l'EA non apre i trade. La compilazione è andata bene.
Condizione per SELL (Sigj1==EMPTY_VALUE)&& (Sigj2!=EMPTY_VALUE)&& (Sigj1!=EMPTY_VALUE)&& (Sigj2!=EMPTY_VALUE)
Condizioni per acquistare (sigj1==EMPTY_VALUE)&& (sigj2!=EMPTY_VALUE)&& (sigj1!=EMPTY_VALUE)&& (sigj2!=EMPTY_VALUE)
double sigz1 = iCustom(NULL,0, "VininI_HMA_sound&Alert",period,method,price,sdvig,0,1);
double sigz2 = iCustom(NULL,0, "VininI_HMA_sound&Alert",period,method,price,sdvig,0,2);
double sigz1 = iCustom(NULL,0, "VininI_HMA_sound&Alert",period,method,price,sdvig,1,1);
double sigz2 = iCustom(NULL,0, "VininI_HMA_sound&Alert",period,method,price,sdvig,1,2);
double sigk1 = iCustom(NULL,0, "VininI_HMA_sound&Alert",period,method,price,sdvig,2,1);
double sigk2 = iCustom(NULL,0, "VininI_HMA_sound&Alert",period,method,price,sdvig,2,2);
Per favore, ditemi dove ho sbagliato?