[WARNING CLOSED!] Any newbie question, so as not to clutter up the forum. Professionals, don't go by. Can't go anywhere without you. - page 443

 

Yeah, I got that...

 

Maybe I don't understand it?

A line like this:

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

comparing the MACDa value to zero and if the condition matches then an arrow is drawn.

How does it work?

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

what does it do? if MACD[i]>0 and macd[i+1] is also greater than 0 then how is the condition ????????????????? met?

 
igrok2008 писал(а) >>

Maybe I don't understand it?

A line like this:

comparing the MACDa value to zero and if the condition matches then an arrow is drawn.

How does it work?

What does it mean? If MACD[i]>0 and MACD[i+1] is also greater than 0, then how is the condition ????????????????? met?

If the product of the previous value and the current value is less than zero, then these values are on different sides of the zero line.

Multiplication is about 10 times faster than logical condition. I have replaced two logical conditions by one multiplication and a logical condition.

First we check if there was an intersection of zero line. If there is an intersection, then determine the direction of the intersection.

 

I beg your pardon, but I am having trouble implementing the condition:

MACD goes upwards, crosses level N (of course with a minus sign) - an arrow is drawn, NACD goes downwards, crosses level N (+ sign) - an arrow is drawn.

The N level is a certain level, like for CCI - 20 and 80. The logic is clear, but how to implement......?????

 
igrok2008 писал(а) >>

I beg your pardon, but I am having trouble implementing the condition:

MACD goes upwards, crosses level N (of course, with a minus sign) - an arrow is drawn, NACD goes downwards, crosses level N (+ sign) - an arrow is drawn.

The N level is a certain level, like for CCI - 20 and 80. The logic is clear, but how to implement......?????

if ((MACD[i]-Level)*(MACD[i+1]-Level)<0)
This is a level penetration control. In your case, you will need to do two controls. For positive and negative level separately
 
Vinin >>:
Это контроль пробития уровня. В твоем случае нужно будет делать два контроля. Для положительного и отрицательного Level отдельно

is it like this?


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

Sorry for the intrusion, you have already helped me with the definition of the NonLagDOT indicator input parameters and output them through the iCustom() function to the Expert Advisor.

Please advise how to open orders for this indicator.


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

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_width1 1
#property indicator_color2 RoyalBlue
#property indicator_width2 1
#property indicator_color3 Red
#property indicator_width3 1


//---- input parameters
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;

double Cycle = 4;

//---- indicator buffers
double MABuffer[];
double UpBuffer[];
double DnBuffer[];
double price[];
double trend[];

//+------------------------------------------------------------------+
//| Custom indicator initialisation function |
//+------------------------------------------------------------------+
int init()
{
int ft=0;
string short_name;
//---- indicator line
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,price);
SetIndexBuffer(4,trend);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
SetIndexArrow(0,159);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
SetIndexArrow(3,159);
//---- name for DataWindow and indicator subwindow label
short_name="NonLagDot("+Length+")";
IndicatorShortName(short_name);
SetIndexLabel(0, "NLD");
SetIndexLabel(1, "Up");
SetIndexLabel(2, "Dn");
//----
SetIndexShift(0,Displace);
SetIndexShift(1,Displace);
SetIndexShift(2,Displace);

SetIndexDrawBegin(0,Length*Cycle+Length);
SetIndexDrawBegin(1,Length*Cycle+Length);
SetIndexDrawBegin(2,Length*Cycle+Length);
//----
return(0);
}

//+------------------------------------------------------------------+
//| NonLagMA_v4 |
//+------------------------------------------------------------------+
int start()
{
int i,shift, counted_bars=IndicatorCounted(),limit;
double alfa,beta,t,Sum,Weight,step,g;
double pi = 3.1415926535;

double Coeff = 3*pi;
int Phase = Length-1;
double Len = Length*Cycle + Phase;

if ( counted_bars > 0 ) limit=Bars-counted_bars;
if ( counted_bars < 0 ) return(0);
if ( counted_bars ==0 ) limit=Bars-Len-1;
if ( counted_bars < 1 )
for(i=1;i<Length*Cycle+Length;i++)
{
MABuffer[Bars-i]=0;
UpBuffer[Bars-i]=0;
DnBuffer[Bars-i]=0;
}

for(shift=limit;shift>=0;shift--)
{
Weight=0; Sum=0; t=0;

for (i=0;i<=Len-1;i++)
{
g = 1.0/(Coeff*t+1);
if (t <= 0.5 ) g = 1;
beta = MathCos(pi*t);
alfa = g * beta;
//if (shift>=1) price[i] = iMA(NULL,0,Per,Displace,Mode,Price,shift+i);
//else
price[i] = iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);
Sum += alfa*price[i];
Weight += alfa;
if ( t < 1 ) t += 1.0/(Phase-1);
else if ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Length-1);
}

if (Weight > 0) MABuffer[shift] = (1.0+Deviation/100)*Sum/Weight;

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

if (Color>0)
{
trend[shift]=trend[shift+1];
if (MABuffer[shift]-MABuffer[shift+1] > Filter*Point) trend[shift]=1;
if (MABuffer[shift+1]-MABuffer[shift] > Filter*Point) trend[shift]=-1;
if (trend[shift]>0)
{
UpBuffer[shift] = MABuffer[shift];
if (trend[shift+ColorBarBack]<0) UpBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
DnBuffer[shift] = 0;
}
if (trend[shift]<0)
{
DnBuffer[shift] = MABuffer[shift];
if (trend[shift+ColorBarBack]>0) DnBuffer[shift+ColorBarBack]=MABuffer[shift+ColorBarBack];
UpBuffer[shift] = 0;
}
}
}
return(0);
}
 
igrok2008 писал(а) >>

is it like this?

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) {//}
}
It could be like this. As long as you know what you're doing. Apparently I made it difficult for you
 
Please explain the terms LevelUP and LevelDN
 
igrok2008 писал(а) >>
Please explain the terms LevelUP and LevelDN

LevelUP- positive level

LevelDN- negative level.

In general, they are equal in absolute value.

If they are equal, it is possible to use

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) {//}
}
Reason: