deyron: Se ci fossero tentativi di aprire un ordine, ci sarebbe un errore nei messaggi. E se non c'è nessun tentativo di aprire un ordine, perché dovrebbe esserci un errore. La questione è se le condizioni del passaggio di Macha attraverso i livelli sono impostate correttamente. Perché gli ordini si aprono molto più tardi del previsto quando i parametri sono hardcoded?
Print() e GetLastError() nei posti giusti risponderebbero a tutte le vostre domande.
Ho bisogno di trovare il valore dell'ultimo punto di una serie parabolica passata. Diciamo questo:
Ho scritto una funzione per trovarlo:
double FindLastLevel ()
{double Level; int i;
for (i=0; Level==0; i++)
{double SAR0=iSAR(Symbol(),Period(), Step, Maximum, i),
SAR1=iSAR(Symbol(),Period(), Step, Maximum, i+1),
SAR2=iSAR(Symbol(),Period(), Step, Maximum, i+2);
if (SAR0>SAR1){if(SAR1<SAR2){Level=SAR2; return (Level);}}
if (SAR0<SAR1){if(SAR1>SAR2){Level=SAR2;return (Level);}}
}}
Cioè ricalcola ogni valore di Parabolic, a partire dalla barra corrente. Non appena la condizione di diminuzione/aumento graduale dei valori viene violata, la funzione restituisce il valore su quella barra che ha "rotto" la tendenza. Tuttavia, se ci fosse un salto di 1 barra, come questo:
La funzione "non lo vede".
Si prega di consigliare come riscrivere la funzione? Forse c'è una soluzione pronta?
Ho bisogno di trovare il valore dell'ultimo punto di una serie parabolica passata. Diciamo questo:
Ho scritto una funzione per trovarlo:
Cioè ricalcola ogni valore di Parabolic, a partire dalla barra corrente. Non appena la condizione di diminuzione/aumento graduale dei valori viene violata, la funzione restituisce il valore su quella barra che ha "rotto" la tendenza. Tuttavia, se ci fosse un salto di 1 barra, come questo:
La funzione "non lo vede".
Si prega di consigliare come riscrivere la funzione? Forse c'è una soluzione pronta?
Bisogna anche guardare la posizione in relazione al prezzo.
Ciao, ho scritto un indicatore con due diversi MACD nella stessa finestra e nella stessa scala.
Ora ho bisogno di ripercorrere tutte le barre SEEN e trovare il momento in cui la seconda linea di segnale dell'indicatore (arancione) sulla barra ZERO sarà uguale alla prima linea di segnale (rossa).
Qualcuno può aiutarmi a capirlo?
Код 2
-----
#property indicator_separate_window#property indicator_buffers 6#property indicator_color1 Lime#property indicator_color2 Red#property indicator_color5 Aqua#property indicator_color6 DarkOrange#property indicator_width1 2#property indicator_width5 2//--- buffersdouble Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
double Macd3Buffer[];
double Signa13Buffer[];
//--- for one bardatetime last;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicatorsSetIndexStyle(0,DRAW_NONE);
SetIndexBuffer(0,Macd1Buffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Signal1Buffer);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,Macd2Buffer);
SetIndexStyle(3,DRAW_NONE);
SetIndexBuffer(3,Signal2Buffer);
SetIndexStyle(4,DRAW_NONE);
SetIndexBuffer(4,Macd3Buffer);
SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,Signa13Buffer);
IndicatorDigits(Digits);
//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
if(last>=Time[0]) return;
double max_M1=-0.01,min_M1=0.01,
max_M2=-0.01,min_M2=0.01,
max_S1=-0.01,min_S1=0.01,
max_S2=-0.01,min_S2=0.01,
max1=-0.01,min1=0.01,
max2=-0.01,min2=0.01,
max3,
M,
Dmax_3,
D_sig,
D_sig_Last=1.0;
int j=0;
while(j<WindowBarsPerChart()-1)
{
//----for(int i=0;i<=j;i++)
{
Macd1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_MAIN,i+1); // основная линия 1-ого MACD
Macd2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,i+1); // основная линия 2-ого MACD
max_M1=MathMax(Macd1Buffer[i],max_M1);
min_M1=MathMin(Macd1Buffer[i],min_M1);
max_M2=MathMax(Macd2Buffer[i],max_M2);
min_M2=MathMin(Macd2Buffer[i],min_M2);
Signal1Buffer[i]=iMACD(0,PERIOD_H1,6,12,5,PRICE_CLOSE,MODE_SIGNAL,i+1); // сигнальная линия 1-ого MACD
Signal2Buffer[i]=iMACD(0,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i+1); // сигнальная линия 2-ого MACD
max_S1=MathMax(Signal1Buffer[i],max_S1);
min_S1=MathMin(Signal1Buffer[i],min_S1);
max_S2=MathMax(Signal2Buffer[i],max_S2);
min_S2=MathMin(Signal2Buffer[i],min_S2);
max1=MathMax(max_M1,max_S1); // максимум 1-ого MACD
min1=MathMin(min_M1,min_S1); // минимум 1-ого MACD
max2=MathMax(max_M2,max_S2); // максимум 2-ого MACD
min2=MathMin(min_M2,min_S2); // минимум 2-ого MACD
}
M=(max1-min1)/(max2-min2); // соотношение диапазонов max-min 1-ого и 2-ого MACD
max3=max2*M; // max 3-его MACD,т.е."нового" 2-ого MACD
Dmax_3=max1-max3; // смещение 3-ого MACD относительно 1-ого MACDfor( i=0;i<=j;i++)
{
Macd3Buffer[0]=Macd2Buffer[0]*M+Dmax_3; // приведение диапазона max-min 2-ого MACD к диапазону 1-ого MACD,// т.е.подучаем 3-ий MACD и совмещаем max и min 3-его MACD с // max и min 1-ого MACD
Signa13Buffer[0]=Signal2Buffer[0]*M+Dmax_3; // max и min 1-ого MACD
}
D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]); // разница между сигнальными линиями 1-ого и 3-ого MACD на// нулевом бареif(Signa13Buffer[0]==Signal1Buffer[0])
break;
D_sig_Last=D_sig;
j++;
}
Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
"\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
"\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
"\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
"\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
"\n"," D_sig = ",DoubleToStr(D_sig,4));
//----
last=Time[0];
//----return(0);
}
//+------------------------------------------------------------------+
Se ci fossero tentativi di aprire un ordine, ci sarebbe un errore nei messaggi. E se non c'è nessun tentativo di aprire un ordine, perché dovrebbe esserci un errore. La questione è se le condizioni del passaggio di Macha attraverso i livelli sono impostate correttamente. Perché gli ordini si aprono molto più tardi del previsto quando i parametri sono hardcoded?
Print() e GetLastError() nei posti giusti risponderebbero a tutte le vostre domande.
Buon pomeriggio!
Ho bisogno di trovare il valore dell'ultimo punto di una serie parabolica passata. Diciamo questo:
Ho scritto una funzione per trovarlo:
Cioè ricalcola ogni valore di Parabolic, a partire dalla barra corrente. Non appena la condizione di diminuzione/aumento graduale dei valori viene violata, la funzione restituisce il valore su quella barra che ha "rotto" la tendenza. Tuttavia, se ci fosse un salto di 1 barra, come questo:
La funzione "non lo vede".
Si prega di consigliare come riscrivere la funzione? Forse c'è una soluzione pronta?
Buon pomeriggio!
Ho bisogno di trovare il valore dell'ultimo punto di una serie parabolica passata. Diciamo questo:
Ho scritto una funzione per trovarlo:
Cioè ricalcola ogni valore di Parabolic, a partire dalla barra corrente. Non appena la condizione di diminuzione/aumento graduale dei valori viene violata, la funzione restituisce il valore su quella barra che ha "rotto" la tendenza. Tuttavia, se ci fosse un salto di 1 barra, come questo:
La funzione "non lo vede".
Si prega di consigliare come riscrivere la funzione? Forse c'è una soluzione pronta?
Bisogna anche guardare la posizione in relazione al prezzo.
Cioè confrontare non solo l'indicatore stesso, ma anche la posizione dei suoi valori in i rispetto al valore del prezzo in i, diciamo?
Controlla questo consulente per vedere se c'è qualcosa di interessante https://www.mql5.com/ru/code/10649
Domanda.
Perché la condizione non va
if(Close_1>Open_1 && ( Close_1-Open_1)>=30*Point) buffer[i]=High_1;
...Invece di
fare così
Posta qui la parte di codice in cui è presente questa condizione. Forse c'è un errore nel ciclo. Pubblicare il codice sul forum usando SRC.
Prova questo invece di
come questo.
Posta qui la parte di codice in cui è presente questa condizione. Forse c'è un errore nel ciclo. Sul forum, pubblicate il codice usando SRC.
Provato.... non funziona.
Ho messo le parentesi in diversi modi, contorto come potevo... non posso più!!!!!!!!!!!))))
Ecco perché sto chiedendo COME posso farlo senza distorsioni):?
Sembra che questa creep MT4 non veda affatto i pip per condizione if(.....)...((
Per di più, ho scritto separatamente un indicatore per mantenere questa condizione... non posso(...):
Perché è così?
Eccolo qui.... bastardo(((!!!!
già arrabbiato...
Cosa avete controllato?
Ciao, ho scritto un indicatore con due diversi MACD nella stessa finestra e nella stessa scala.
Ora ho bisogno di ripercorrere tutte le barre SEEN e trovare il momento in cui la seconda linea di segnale dell'indicatore (arancione) sulla barra ZERO sarà uguale alla prima linea di segnale (rossa).
Qualcuno può aiutarmi a capirlo?