Questo è quello che voglio dire. Bisogna tenere conto dei vincoli esistenti, che, in generale, cambiano continuamente.
C'è qualche funzione che analizza tutti i possibili vincoli?
Lo stesso per le modifiche.
--
(Ho 16 funzioni - 3 per ogni ordine buono (OP, SL, TP) e 2 per ogni ordine a mercato (SL, TP),
e poi altre funzioni che analizzano le combinazioni di permessi).
Sì, ho anche una funzione separata per impostare un ordine controllando tutte le limitazioni possibili e una separata (parzialmente simile alla prima) per le modifiche. non darò il codice - c'è così tanta roba "sinistra" lì che solo io ho bisogno, che - ahi. :-) ma in generale - è difficile senza di esso nel trading reale Expert Advisors. :-)
Sì, ho anche una funzione separata per impostare un ordine, che controlla tutte le possibili limitazioni e una separata (parzialmente simile alla prima) per la modifica. Non vi darò il codice - ci sono così tanti trucchi "a sinistra", che servono solo a me, che - ahi. :-) ma in generale - è difficile senza di esso nel trading reale Expert Advisors. :-)
In realtà, volevo verificare io stesso - se ho tenuto conto di tutto. Se non li controllate, potete andare incontro a una serie di rimbalzi (a volte con la prospettiva di essere bannati).
Elencherò brevemente i miei controlli.
1) StopLevel. Per esempio, quando si modifica il SL BuyStop.
Non controlla solo la distanza. Dovresti analizzare la posizione attuale di StopLevel e la direzione del movimento dell'ordine di stop.
Se SL è al di fuori del corridoio di StopLevel, puoi spostarlo vicino o spostarlo indefinitamente.
Se lo SL è all'interno del corridoio, il movimento verso l'alto viene respinto. Il movimento verso il basso è accettato, ma con considerazione dello StopLevel: se la distanza di modifica all'interno del corridoio di distanza è impostata a 3 p, e il corridoio è 30 p, allora il valore effettivo accettato per l'esecuzione è definito dal confine del corridoio StopLevel.
2) FreezeLevel.
3. rapporto tra StopLevel e TICKSIZE. L'ordine può essere fuori da tutti i corridoi, ma non multiplo di TICKSIZE - allora è un problema. Deve essere arrotondato verso la direzione di modifica. Critico per "non valuta".
4. Lotti. Minlote +/- minlote. Tieni conto che le chiusure parziali e le controchiusure sono limitate anche ai minlot (anche se secondo me è illogico, ma è così).
Dopo gli assegni personali, l'ordine viene emesso se ogni assegno si è concluso positivamente (nessun divieto).
Questa funzione genera un array di valori di regressione lineare. La funzione accetta i seguenti parametri obbligatori:
x è un array di valori di serie numeriche. Questo è il parametro di ingresso. Questo array deve contenere i valori prima che la funzione venga chiamata.
y è una matrice di valori di regressione lineare. Questo è il parametro di uscita, cioè l'array sarà riempito dopo l'esecuzione della funzione.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 20.05.2008 |//| Описание : Формирует массив значений линейной регрессии. |//+----------------------------------------------------------------------------+//| Параметры: |//| x - массив значений числового ряда |//| y - массив значений линейной регрессии |//+----------------------------------------------------------------------------+voidArrayLR(double& x[], double& y[]){doublea, b, c, sx=0, sx2=0, sxy=0, sy=0;
inti, n=ArraySize(x);
if(n>1){for(i=0; i<n; i++){sx+=i+1;
sy+=x[i];
sxy+=(i+1)*x[i];
sx2+=(i+1)*(i+1);
}a=sx*sy-n*sxy;
c=sx*sx-n*sx2;
if(c!=0)a=a/c; elsea=0;
b=(sy-a*sx)/n;
ArrayResize(y, n);
for(i=0; i<n; i++)y[i]=a*(i+1)+b;
}elsePrint("ArrayLR(): Недостаточное количество элементов ряда! n=", n);
}
Un simile indicatore è già stato scritto, non ricordo da chi e non ricordo dove l'ho visto... Pensavo che l'avresti trovato da solo o che qualcuno ti avrebbe dato il link...
1. Non tiene conto della posizione temporale delle barre. Funziona in modo errato quando mancano le barre.
2. l'algoritmo utilizzato per calcolare i coefficienti ha un inconveniente sotto forma di accumulo di errori di arrotondamento, vedi 'Help me write a linear regression' (il fondo della pagina di Rosh conferma questa insidia).
3. Propongo un algoritmo senza questi inconvenienti.
4. Se sostituite X[i]=Time[i+1]; con X[i]=i+1; l'algoritmo è simile, ma senza accumulo di errori.
5. I bar sono saltati non solo nei fine settimana :-(((
Ecco la mia variante
//+----------------------------------------------------------------------------+//| Автор : Сергей Привалов aka Prival, Skype: privalov-sv |//+----------------------------------------------------------------------------+//| Версия : 10.09.2008 |//| Описание : Формирует массив значений линейной регрессии y(x)=A*x+B. |//+----------------------------------------------------------------------------+//| Параметры: |//| X - массив значений числового ряда, ось X |//| Y - массив значений числового ряда, ось Y |//+----------------------------------------------------------------------------+voidArray_LR(double &X[], double& Y[]){doublemo_X = 0, mo_Y = 0, var_0 = 0, var_1 = 0;
inti,N=ArraySize(X);
doubleA,B;
if(N>1){for(i = 0; i < N; i ++ ){mo_X +=X[i];
mo_Y +=Y[i];
}mo_X /=N;
mo_Y /=N;
for(i = 0; i < N; i ++ ){var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y);
var_1 +=(X[i]-mo_X)*(X[i]-mo_X);
}// значение коэффициента Aif(var_1!=0)A = var_0 / var_1; elseA=0;
// значение коэффициента BB = mo_Y - A * mo_X;
ArrayResize(Y, N);
for(i=0; i<N; i++)Y[i]=A*X[i]+B;
}elsePrint("ArrayLR(): Недостаточное количество элементов ряда! n=", N);
}
Ok, Sergei, facciamo che ci siano due varianti di questa funzione.
La mia variante è buona perché è identica all'oggetto grafico integrato OBJ_REGRESSION. Se qualcuno ha bisogno di prendere prezzi da questo oggetto, la mia funzione lo aiuterà, mentre la tua, ahimè... Ma potrebbe essere usato per qualcos'altro... Grazie!
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Questo è quello che voglio dire. Bisogna tenere conto dei vincoli esistenti, che, in generale, cambiano continuamente.
C'è qualche funzione che analizza tutti i possibili vincoli?
Lo stesso per le modifiche.
--
(Ho 16 funzioni - 3 per ogni ordine buono (OP, SL, TP) e 2 per ogni ordine a mercato (SL, TP),
e poi altre funzioni che analizzano le combinazioni di permessi).
Sì, ho anche una funzione separata per impostare un ordine controllando tutte le limitazioni possibili e una separata (parzialmente simile alla prima) per le modifiche. non darò il codice - c'è così tanta roba "sinistra" lì che solo io ho bisogno, che - ahi. :-) ma in generale - è difficile senza di esso nel trading reale Expert Advisors. :-)
Sì, ho anche una funzione separata per impostare un ordine, che controlla tutte le possibili limitazioni e una separata (parzialmente simile alla prima) per la modifica. Non vi darò il codice - ci sono così tanti trucchi "a sinistra", che servono solo a me, che - ahi. :-) ma in generale - è difficile senza di esso nel trading reale Expert Advisors. :-)
In realtà, volevo verificare io stesso - se ho tenuto conto di tutto. Se non li controllate, potete andare incontro a una serie di rimbalzi (a volte con la prospettiva di essere bannati).
Elencherò brevemente i miei controlli.
1) StopLevel. Per esempio, quando si modifica il SL BuyStop.
Non controlla solo la distanza. Dovresti analizzare la posizione attuale di StopLevel e la direzione del movimento dell'ordine di stop.
Se SL è al di fuori del corridoio di StopLevel, puoi spostarlo vicino o spostarlo indefinitamente.
Se lo SL è all'interno del corridoio, il movimento verso l'alto viene respinto. Il movimento verso il basso è accettato, ma con considerazione dello StopLevel: se la distanza di modifica all'interno del corridoio di distanza è impostata a 3 p, e il corridoio è 30 p, allora il valore effettivo accettato per l'esecuzione è definito dal confine del corridoio StopLevel.
2) FreezeLevel.
3. rapporto tra StopLevel e TICKSIZE. L'ordine può essere fuori da tutti i corridoi, ma non multiplo di TICKSIZE - allora è un problema. Deve essere arrotondato verso la direzione di modifica. Critico per "non valuta".
4. Lotti. Minlote +/- minlote. Tieni conto che le chiusure parziali e le controchiusure sono limitate anche ai minlot (anche se secondo me è illogico, ma è così).
Dopo gli assegni personali, l'ordine viene emesso se ogni assegno si è concluso positivamente (nessun divieto).
Librerie di funzioni completamente pubblicate:
b-Graphics.rar - lavora con oggetti grafici.
b-Indicators.rar - lavora con gli indicatori.
La funzione ArrayLR().
Questa funzione genera un array di valori di regressione lineare. La funzione accetta i seguenti parametri obbligatori:
Esempio di utilizzo della funzione ArrayLR().
Segniamo i livelli di prezzo della regressione lineare per le 30 barre precedenti.
P.S. In allegato c'è uno script per testare la funzione ArrayLR().
Librerie di funzioni completamente pubblicate:
b-Graphics.rar - lavora con oggetti grafici.
b-Indicators.rar - lavora con gli indicatori.
Molto figo! >> Grazie!
Igor, c'è un buon indicatore che può combinare diverse candele in una sola. Ma funziona solo sul grafico orario. È possibile renderlo universale?
Grazie.
?
?
ooh... Scusa...
Un simile indicatore è già stato scritto, non ricordo da chi e non ricordo dove l'ho visto... Pensavo che l'avresti trovato da solo o che qualcuno ti avrebbe dato il link...
La funzione ArrayLR() non funziona accuratamente.
1. Non tiene conto della posizione temporale delle barre. Funziona in modo errato quando mancano le barre.
2. l'algoritmo utilizzato per calcolare i coefficienti ha un inconveniente sotto forma di accumulo di errori di arrotondamento, vedi 'Help me write a linear regression' (il fondo della pagina di Rosh conferma questa insidia).
3. Propongo un algoritmo senza questi inconvenienti.
4. Se sostituite X[i]=Time[i+1]; con X[i]=i+1; l'algoritmo è simile, ma senza accumulo di errori.
5. I bar sono saltati non solo nei fine settimana :-(((
Ecco la mia variante
ecco un'immagine
Esempio di lavoro
Script di controllo allegato
Ecco la mia variante
Ok, Sergei, facciamo che ci siano due varianti di questa funzione.
La mia variante è buona perché è identica all'oggetto grafico integrato OBJ_REGRESSION. Se qualcuno ha bisogno di prendere prezzi da questo oggetto, la mia funzione lo aiuterà, mentre la tua, ahimè... Ma potrebbe essere usato per qualcos'altro... Grazie!