Помощь в кодировании - страница 201

 
Slow Moe:
Здравствуйте, я хотел бы спросить, можно ли переписать этот индикатор так, чтобы он показывал только стрелки, а они должны появляться на свечах? Может ли кто-нибудь помочь мне с этим, или, возможно, закодировать это для меня, пожалуйста?

с уважением

Медленный

fxmtn-test.mq4

Slow

Попробуйте так

Файлы:
 

Спасибо большое mladen работает прекрасно !!!

Я тоже пытаюсь как-то активировать "extern int arrowDistance = XXX;".

Теперь он отображается в меню выбора, но расстояние не меняется. Куда вставлять *arrowDistance ?

Или я совсем не прав?

Я ввел его в нескольких местах, но это дало мне только больше точек, а не больше расстояния.

Я новичок, пытаюсь понять код и надеюсь на помощь.

 

Сделал это следующим образом :

if (AboveBuff > 24.0) ShortBuff = High+ (Point*arrowDistance /2);

if (BelowBuff < -24.0) LongBuffe = Low- (Point*arrowDistance /2);

Правильный ли это способ? Просто потому что это работает, это может быть неправильно

 
Slow Moe:
Сделали вот так :

если (AboveBuff > 24.0) ShortBuff = High+ (Point*arrowDistance /2);

если (BelowBuff < -24.0) LongBuffe = Low- (Point*arrowDistance /2);

Правильный ли это способ? Просто потому что это работает, это может быть неправильно

Это должно сработать, есть и другой способ, который можно сделать следующим образом

LongBuffe = Low-arrowDistance*iATR(NULL,0,20,i) и ShortBuff = High+arrowDistance**iATR(NULL,0,20,i)

 

Медленно,

Лучше использовать режим iATR(). Поменяйте таймфреймы и вы поймете, что я имею в виду. Визуально у вас будет проблема на более высоких таймфреймах, когда расстояние стрелки от максимума или минимума фиксировано (они будут выглядеть грязно на некоторых таймфреймах). Использование iATR() вместо фиксированного расстояния решает эту проблему.

 

Спасибо mrtools, mladen работает действительно намного лучше.

Один последний индикатор, который я не могу контролировать.....

Пытаюсь изменить его здесь: SignalGap = MathCeil(iATR(NULL,0,50,0)/Point);

Думал, что это правильное место, так как изменение 50 изменяет расстояние. Но ничего из того, что я тестировал, не работало с arrowDistance.

 
Slow Moe:
Спасибо mrtools, mladen работает действительно намного лучше.

Один последний индикатор, который я не могу контролировать .....

Пытаюсь изменить его здесь: SignalGap = MathCeil(iATR(NULL,0,50,0)/Point);

Думал, что это правильное место, так как изменение 50 меняет дистанцию. Но ничего из того, что я тестировал, не работало с arrowDistance.

Медленно

Когда вы используете atr для расстояния между стрелками, вероятно, лучшим способом изменить это расстояние является своего рода множитель. Например :

arrowPrice = High+iATR(NULL,0,50,0)*arrowDistance;

Где arrowDistance определяется как double и может быть дробным (поэтому вы можете использовать как значения типа 0.5, так и 10.5). Изменение периода atr не приведет к существенному изменению расстояния (просто будет учитываться более длительное среднее значение диапазонов).

 

попытка получить значение из другого индикатора

Здравствуйте,

Я пытаюсь написать свой первый собственный индикатор и хочу использовать также значение из существующего индикатора, который я взял с этого сайта. Я просто скопировал код с инди здесь.

Что я должен написать в моем новом индикаторе, чтобы узнать, является ли бар синим/красным или 1/0. Я не против, но я уже много раз пробовал и все время получал только ноль.

Я даже пытался получить весь код в моем индикаторе, но ничего не вышло.

Любая помощь была бы признательна

спасибо Боб

#property copyright "fxfariz"

#property link "fxfariz@gmail.com"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue //Red //Aqua

#property indicator_color2 Red

extern int SSP=7;

extern double Kmax=50.6; //24 21.6 21.6

extern int CountBars=300;

extern int myPeriod = 0 ;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtHBuffer1[];

double ExtHBuffer2[];

int xPeriod ;

//+------------------------------------------------------------------+

string TimeFrameToString(int tf)

{

string tfs;

switch(tf) {

case PERIOD_M1: tfs="M1" ; break;

case PERIOD_M5: tfs="M5" ; break;

case PERIOD_M15: tfs="M15" ; break;

case PERIOD_M30: tfs="M30" ; break;

case PERIOD_H1: tfs="H1" ; break;

case PERIOD_H4: tfs="H4" ; break;

case PERIOD_D1: tfs="D1" ; break;

case PERIOD_W1: tfs="W1" ; break;

case PERIOD_MN1: tfs="MN1";

}

return(tfs);

}

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

IndicatorBuffers(4);

SetIndexStyle(0,DRAW_HISTOGRAM,0,4); //Red

SetIndexBuffer(0,ExtHBuffer1);

SetIndexStyle(1,DRAW_HISTOGRAM,0,4); //Lime

SetIndexBuffer(1,ExtHBuffer2);

SetIndexBuffer(2,ExtMapBuffer1);

SetIndexBuffer(3,ExtMapBuffer2);

if(myPeriod==0){xPeriod=Period();} {xPeriod=myPeriod;}

string tPeriod = TimeFrameToString(xPeriod) ;

IndicatorShortName(tPeriod + " Trade What You see ("+SSP+")");

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars+SSP);

SetIndexDrawBegin(1,Bars-CountBars+SSP);

int i, counted_bars=IndicatorCounted();

double SsMax, SsMin, smin, smax;

if(Bars<=SSP+1) return(0);

if(counted_bars<SSP+1)

{

for(i=1;i<=SSP;i++) ExtMapBuffer1[CountBars-i]=0.0;

for(i=1;i<=SSP;i++) ExtMapBuffer2[CountBars-i]=0.0;

}

for(i=CountBars-SSP;i>=0;i--) {

SsMax = High;

SsMin = Low[Lowest(NULL,xPeriod,MODE_LOW,SSP,i-SSP+1)];

smax = SsMax-(SsMax-SsMin)*Kmax/100;

ExtMapBuffer1=smax;

ExtMapBuffer2=smax;

}

for(int b=CountBars-SSP;b>=0;b--)

{

if(ExtMapBuffer1>ExtMapBuffer2)

{

ExtHBuffer1=1;

ExtHBuffer2=0;

}

else

{

ExtHBuffer1=0;

ExtHBuffer2=1;

}

}

return(0);

}
 
BobMorane1000:
hello com,

я пытаюсь написать свой первый собственный индикатор и хочу использовать также значение из существующего индикатора, который я взял с этого сайта. я просто скопировал код с инди здесь.

Что я должен написать в моем новом индикаторе, чтобы узнать, является ли бар синим/красным или 1/0. Я не против, но я уже много раз пробовал и все время получал только ноль.

Я даже пытался получить весь код в моем индикаторе, но ничего не вышло.

Любая помощь была бы признательна

спасибо Боб

#property copyright "fxfariz"

#property link "fxfariz@gmail.com"

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Blue //Red //Aqua

#property indicator_color2 Red

extern int SSP=7;

extern double Kmax=50.6; //24 21.6 21.6

extern int CountBars=300;

extern int myPeriod = 0 ;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtHBuffer1[];

double ExtHBuffer2[];

int xPeriod ;

//+------------------------------------------------------------------+

string TimeFrameToString(int tf)

{

string tfs;

switch(tf) {

case PERIOD_M1: tfs="M1" ; break;

case PERIOD_M5: tfs="M5" ; break;

case PERIOD_M15: tfs="M15" ; break;

case PERIOD_M30: tfs="M30" ; break;

case PERIOD_H1: tfs="H1" ; break;

case PERIOD_H4: tfs="H4" ; break;

case PERIOD_D1: tfs="D1" ; break;

case PERIOD_W1: tfs="W1" ; break;

case PERIOD_MN1: tfs="MN1";

}

return(tfs);

}

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

IndicatorBuffers(4);

SetIndexStyle(0,DRAW_HISTOGRAM,0,4); //Red

SetIndexBuffer(0,ExtHBuffer1);

SetIndexStyle(1,DRAW_HISTOGRAM,0,4); //Lime

SetIndexBuffer(1,ExtHBuffer2);

SetIndexBuffer(2,ExtMapBuffer1);

SetIndexBuffer(3,ExtMapBuffer2);

if(myPeriod==0){xPeriod=Period();} {xPeriod=myPeriod;}

string tPeriod = TimeFrameToString(xPeriod) ;

IndicatorShortName(tPeriod + " Trade What You see ("+SSP+")");

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

if (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars+SSP);

SetIndexDrawBegin(1,Bars-CountBars+SSP);

int i, counted_bars=IndicatorCounted();

double SsMax, SsMin, smin, smax;

if(Bars<=SSP+1) return(0);

if(counted_bars<SSP+1)

{

for(i=1;i<=SSP;i++) ExtMapBuffer1[CountBars-i]=0.0;

for(i=1;i<=SSP;i++) ExtMapBuffer2[CountBars-i]=0.0;

}

for(i=CountBars-SSP;i>=0;i--) {

SsMax = High;

SsMin = Low[Lowest(NULL,xPeriod,MODE_LOW,SSP,i-SSP+1)];

smax = SsMax-(SsMax-SsMin)*Kmax/100;

ExtMapBuffer1=smax;

ExtMapBuffer2=smax;

}

for(int b=CountBars-SSP;b>=0;b--)

{

if(ExtMapBuffer1>ExtMapBuffer2)

{

ExtHBuffer1=1;

ExtHBuffer2=0;

}

else

{

ExtHBuffer1=0;

ExtHBuffer2=1;

}

}

return(0);

}

BobMorane1000

Вы можете сделать что-то вроде этого:

bool blueValue = (iCustom(NULL,0,"indicatorNameHere",SSP,Kmax,0,0)!=0);

bool redValue = (iCustom(NULL,0,"indicatorNameHere",SSP,Kmax,1,0)!=0);

Но будьте осторожны. Этот индикатор является разновидностью индикатора суперсигнал, а индикатор суперсигнал пересчитывает (перерисовывает)

 

спасибо большое и за предупреждение^^, я попробую сейчас ...