extern int Gap=10; это входные параметры
double b1[];
double b2[]; это выводимые результаты
прочитайте о функции iCustom в справке
double b1[];
double b2[]; это выводимые результаты
прочитайте о функции iCustom в справке
Параметры:
Пример: double val=iCustom(NULL, 0, "SampleInd",13,1,0); |
gorby777:
Спасибо. А как конкретно получить b1 и b2?
double b1=iCustom(NULL,0,"SampleInd",10,1,1)
double b2=iCustom(NULL,0,"SampleInd",10,2,1)
Правильно?
Нет, вот так:
double b1=iCustom(NULL,0,"SampleInd",10,0,1)
double b2=iCustom(NULL,0,"SampleInd",10,1,1)это для для бара № 1 (текущий бар имеет № 0), текущего инструмента и тайм-фрейма, Gap=10.
Ну и конечно если Ваш индикатор называется SampleInd
Спасибо. Все равно нифига не выходит. Чайник - он и в Африке чайник. :-((
Можно вопрос в тему...
у меня есть индикатор 3d oscilator
он состоит из 2х линий ,как мне вызвать в эксперт каждую линию в отдельности ,что бы можно было сделать условие в эксперте (типа когда одна линия больше другой и наоборот)
как я понимаю когда пишется icustom то вызывается целиком индикатор ,мне же нужно что бы вызывалась 1 линия из инидкатора
у меня есть индикатор 3d oscilator
он состоит из 2х линий ,как мне вызвать в эксперт каждую линию в отдельности ,что бы можно было сделать условие в эксперте (типа когда одна линия больше другой и наоборот)
как я понимаю когда пишется icustom то вызывается целиком индикатор ,мне же нужно что бы вызывалась 1 линия из инидкатора
//+------------------------------------------------------------------+ //| 3D Oscilator.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "Author - Luis Damiani. Ramdass - Conversion only" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 Red //---- input parameters extern int D1RSIPer=13; extern int D2StochPer=8; extern int D3tunnelPer=8; extern double hot=0.4; extern int sigsmooth=4; //---- buffers double sig1n[]; double sig2n[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicator line SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(0,sig1n); SetIndexBuffer(1,sig2n); //---- SetIndexDrawBegin(0,D1RSIPer+D2StochPer+D3tunnelPer+hot+sigsmooth); SetIndexDrawBegin(1,D1RSIPer+D2StochPer+D3tunnelPer+hot+sigsmooth); //---- return(0); } //+------------------------------------------------------------------+ //| CCI_Woodies | //+------------------------------------------------------------------+ int start() { int i,i2,counted_bars=IndicatorCounted(); double rsi,maxrsi,minrsi,storsi,E3D, sig1,sig2,sk,ss,sk2; double cs; bool init=true; //---- cs= D1RSIPer+D2StochPer+D3tunnelPer+hot+sigsmooth; if(Bars<=cs) return(0); //if (init) //{ ss=sigsmooth; if (ss<2) ss=2; sk = 2 / (ss + 1); sk2=2/(ss*0.8+1); init=false; //}; //---- initial zero if(counted_bars<1) { for(i=1;i<=cs;i++) sig1n[Bars-i]=0.0; for(i=1;i<=cs;i++) sig2n[Bars-i]=0.0; } //---- i=Bars-cs-1; if(counted_bars>=cs) i=Bars-counted_bars-1; while(i>=0) { rsi=iRSI(NULL,0,D1RSIPer,PRICE_CLOSE,i); maxrsi=rsi; minrsi=rsi; for (i2=i+D2StochPer;i2>=i; i2--) { rsi=iRSI(NULL,0,D1RSIPer,PRICE_CLOSE,i2); if (rsi>maxrsi) maxrsi=rsi; if (rsi<minrsi) minrsi=rsi; //maxrsi=Maximum(rsi,maxrsi); //minrsi=min(rsi,minrsi); } storsi=((rsi-minrsi)/(maxrsi-minrsi)*200-100); E3D=hot*iCCI(NULL,0,D3tunnelPer,PRICE_TYPICAL,i)+(1-hot)*storsi; sig1n[i]=sk*E3D+(1-sk)*sig1; sig2n[i]=sk2*sig1+(1-sk2)*sig2; sig1=sig1n[i]; sig2=sig2n[i]; i--; } return(0); } //+------------------------------------------------------------------+с уважением 9reen
9reen:
Можно вопрос в тему...
у меня есть индикатор 3d oscilator
он состоит из 2х линий ,как мне вызвать в эксперт каждую линию в отдельности ,что бы можно было сделать условие в эксперте (типа когда одна линия больше другой и наоборот)
как я понимаю когда пишется icustom то вызывается целиком индикатор ,мне же нужно что бы вызывалась 1 линия из инидкатора
Можно вопрос в тему...
у меня есть индикатор 3d oscilator
он состоит из 2х линий ,как мне вызвать в эксперт каждую линию в отдельности ,что бы можно было сделать условие в эксперте (типа когда одна линия больше другой и наоборот)
как я понимаю когда пишется icustom то вызывается целиком индикатор ,мне же нужно что бы вызывалась 1 линия из инидкатора
с уважением 9reen
Нет, не целиком. Вызывается совершенно определённое значение
Параметры:
Пример: double Znachenie=iCustom(NULL, 0, "Kokoko",13, 1 , 5 ); | ||||||||||||||||||||
Т.е. из конкретного индикаторного массива вызывается конкретное значение. Например, из 1-го массива (буфер 1, на основе которого строится линия 2) вызывается 5-е значение (т.е. значение на баре с индексом 5) |
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, пожалуйста, какие значения возвращает это индикатор. Хочу вставить его в эксперт (моя первая работа :-)). И как получит эти значения?
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Aqua
extern int Gap=10;
int dist=24;
double b1[];
double b2[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init() {
SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
SetIndexArrow(1,233);
SetIndexArrow(0,234);
SetIndexBuffer(0,b1);
SetIndexBuffer(1,b2);
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start() {
int counted_bars=IndicatorCounted();
int i,limit,hhb,llb;
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit=Bars-1;
if(counted_bars>=1) limit=Bars-counted_bars-1;
if (limit<0) limit=0;
for(i=limit;i>=0;i--) {
hhb=iHighest(NULL,0,MODE_HIGH,dist,i-dist/2);
llb=iLowest(NULL,0,MODE_LOW,dist,i-dist/2);
if (i==hhb)
b1[i]=High[hhb]+Gap*Point;
if (i==llb)
b2[i]=Low[llb]-Gap*Point;
}
return(0);
}