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

 

Sì, l'ho capito...

 

Forse non lo capisco?

Una linea come questa:

if( MACD[ i] < 0) ExtMapBuffer2[ i] = High[ i]+iATR(Symbol(), 0, 14, i);

confrontando il valore MACDa con zero e se la condizione corrisponde allora viene disegnata una freccia.

Come funziona?

if (MACD[i] * MACD[i+1]<0) {

cosa fa? se MACD[i]>0 e macd[i+1] è anche maggiore di 0 allora come viene soddisfatta la condizione ??????????????????

 
igrok2008 писал(а) >>

Forse non lo capisco?

Una linea come questa:

confrontando il valore MACDa con zero e se la condizione corrisponde allora viene disegnata una freccia.

Come funziona?

Se MACD[i]>0 e anche MACD[i+1] è maggiore di 0, allora come viene soddisfatta la condizione ??????????????????

Se il prodotto del valore precedente e del valore attuale è inferiore a zero, allora questi valori sono su lati diversi della linea dello zero.

La moltiplicazione è circa 10 volte più veloce della condizione logica. Ho sostituito due condizioni logiche con una moltiplicazione e una condizione logica.

Prima controlliamo se c'è stata un'intersezione della linea zero. Se c'è un'intersezione, allora determiniamo la direzione dell'intersezione.

 

Chiedo scusa, ma ho problemi ad implementare la condizione:

MACD va verso l'alto, attraversa il livello N (naturalmente con un segno meno) - viene disegnata una freccia, NACD va verso il basso, attraversa il livello N (segno +) - viene disegnata una freccia.

Il livello N è un certo livello, come per il CCI - 20 e 80. La logica è chiara, ma come implementare......?????

 
igrok2008 писал(а) >>

Chiedo scusa, ma ho problemi ad implementare la condizione:

MACD va verso l'alto, attraversa il livello N (naturalmente con un segno meno) - viene disegnata una freccia, NACD va verso il basso, attraversa il livello N (segno +) - viene disegnata una freccia.

Il livello N è un certo livello, come per il CCI - 20 e 80. La logica è chiara, ma come implementare......?????

if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
Questo è un controllo di penetrazione di livello. Nel vostro caso, dovrete fare due controlli. Per il livello positivo e negativo separatamente
 
Vinin >>:
Это контроль пробития уровня. В твоем случае нужно будет делать два контроля. Для положительного и отрицательного Level отдельно

è così?


      if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
         ((MACD[i]+Level)*(MACD[i+1]+Level)>0){
 

Scusa per l'intrusione, mi hai già aiutato con la definizione dei parametri di input dell'indicatore NonLagDOT e l'output attraverso la funzione iCustom() all'Expert Advisor.

Si prega di consigliare come aprire gli ordini per questo indicatore.


/+------------------------------------------------------------------+
|| NonLagDOT.mq4
//| Copyright © 2009, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"

#proprietà indicator_chart_window
#proprietà indicator_buffers 3
#proprietà indicatore_colore1 Giallo
#proprietà indicator_width1 1
#property indicator_color2 RoyalBlue
#proprietà indicator_width2 1
#property indicator_color3 Red
#proprietà indicator_width3 1


//---- parametri di ingresso
extern int Price = 0;
extern int Length = 20;
extern intplace Displace = 0;
extern int Filter = 0;
extern int Color = 1;
extern int ColorBarBack = 0;
extern double Deviation = 0;

doppio Ciclo = 4;

//---- buffer degli indicatori
doppio MABuffer[];
doppio UpBuffer[];
doppio DnBuffer[];
doppio prezzo[];
doppia tendenza[];

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
int ft=0;
stringa short_name;
//---- linea di indicazione
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_ARROW);
SetIndexBuffer(0,MABuffer);
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1,UpBuffer);
SetIndexStyle(2,DRAW_ARROW);
SetIndexBuffer(2,DnBuffer);
SetIndexBuffer(3,prezzo);
SetIndexBuffer(4,trend);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
SetIndexArrow(3,159);
//---- nome per DataWindow e l'etichetta della sottofinestra dell'indicatore
short_name="NonLagDot("+Length+")";
IndicatoreNomeCorto(nome_corto);
SetIndexLabel(0, "NLD");
SetIndexLabel(1, "Su");
SetIndexLabel(2, "Dn");
//----
SetIndexShift(0,Displace);
SetIndexShift(1,Displace);
SetIndexShift(2,Displace);

SetIndexDrawBegin(0,Lunghezza*Ciclo+Lunghezza);
SetIndexDrawBegin(1,Lunghezza*Ciclo+Lunghezza);
SetIndexDrawBegin(2,Lunghezza*Ciclo+Lunghezza);
//----
ritorno(0);
}

//+------------------------------------------------------------------+
//| NonLagMA_v4 |
//+------------------------------------------------------------------+
int start()
{
int i,shift, counted_bars=IndicatorCounted(),limit;
doppio alfa, beta, t, somma, peso, passo, g;
doppio pi = 3,1415926535;

doppio Coeff = 3*pi;
int Fase = Lunghezza-1;
doppio Len = Lunghezza*Ciclo + Fase;

se ( counted_bars > 0 ) limit=Bars-counted_bars;
se ( counted_bars < 0 ) return(0);
if ( counted_bars ==0 ) limit=Bars-Len-1;
se ( barre contate < 1 )
for(i=1;i<Lunghezza*Ciclo+Lunghezza;i++)
{
MABuffer[Bars-i]=0;
UpBuffer[Bars-i]=0;
DnBuffer[Bars-i]=0;
}

for(shift=limit;shift>=0;shift--)
{
Peso=0; Somma=0; t=0;

per (i=0;i<=Len-1;i++)
{
g = 1,0/(Coeff*t+1);
se (t <= 0,5 ) g = 1;
beta = MathCos(pi*t);
alfa = g * beta;
//se (shift>=1) price[i] = iMA(NULL,0,Per,Displace,Mode,Price,shift+i);
//altrimenti
prezzo[i] = iMA(NULL,0,1,0,MODE_SMA,Prezzo,shift+i);
Somma += alfa*prezzo[i];
Peso += alfa;
se ( t < 1 ) t += 1.0/(Fase-1);
else if ( t < Len-1 ) t += (2*Ciclo-1)/(Ciclo*Lunghezza-1);
}

se (Peso > 0) MABuffer[shift] = (1.0+Deviazione/100)*Somma/Peso;

se (Filtro>0)
{
if( MathAbs(MABuffer[shift]-MABuffer[shift+1]) < Filter*Point ) MABuffer[shift]=MABuffer[shift+1];
}

se (Colore>0)
{
trend[shift]=trend[shift+1];
se (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) tendenza[shift]=1;
se (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) tendenza[shift]=-1;
se (tendenza[spostamento]>0)
{
UpBuffer[shift] = MABuffer[shift];
se (tendenza[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
DnBuffer[shift] = 0;
}
se (tendenza[shift]<0)
{
DnBuffer[shift] = MABuffer[shift];
se (tendenza[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
UpBuffer[shift] = 0;
}
}
}
ritorno(0);
}
 
igrok2008 писал(а) >>

è così?

if (( MACD[ i]- LevelUP)*( MACD[ i+1]- LevelUP)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]- LevelDN)*( MACD[ i+1]- LevelDN)<0){
   if ( MACD[ i]- LevelDN<0) {//}
}
Potrebbe essere così. Basta che tu sappia cosa stai facendo. A quanto pare ti ho reso le cose difficili
 
Spiegare i termini LevelUP e LevelDN
 
igrok2008 писал(а) >>
Spiegare i termini LevelUP e LevelDN

LevelUP- livello positivo

LivelloDN- livello negativo.

In generale, sono uguali in valore assoluto.

Se sono uguali, è possibile usare

if (( MACD[ i]- Level)*( MACD[ i+1]- Level)<0) {
   if ( MACD[ i]- Level>0) {//}
}
if (( MACD[ i]+ LevelDN)*( MACD[ i+1]+ LevelDN)<0){
   if ( MACD[ i]+ Level<0) {//}
}
Motivazione: