Тоесть, нужны значения Jaws, Teeth, Lips...
В справке:
Параметры:
Пример: double jaw_val=iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 1); |
Rosh:
В справке:
В справке:
.... |
Rosh - тоесть, если мне надо узнать разницу между Jaws и Lips на данный момент, как это будет выглядеть в коде...
Спасибо за терпение и помощь
Чайник я, одним словом, пытаюсь разобраться...
Хорошо, а как вот обратиться к своему индикатору, не к стандартному... Ну например к своему "Фракталу"
double jaw_val=iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, 0);
double lips_val=iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 0);
double raznitsa=jaw_val-lips_val;
double iCustom( | string symbol, int timeframe, string name, ..., int mode, int shift) |
Параметры:
symbol | - | Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ. |
timeframe | - | Период. Может быть одним из периодов графика. 0 означает период текущего графика. |
name | - | Имя пользовательского индикатора. |
... | - | Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора. |
mode | - | Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer. |
shift | - | Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад). |
Пример:
double val=iCustom(NULL, 0, "SampleInd",13,1,0);
Вопросик
у меня есть индикатор 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); } //+------------------------------------------------------------------+
При первом вызове любого поьзовательского индикатора происходит
расчет всех индикаторных массивов (линий). То есть, если сначала
был вызов iCustom(NULL,0,"Имя_индикатора"...,0,1), то следующий вызов iCustom(NULL,0,"Имя_индикатора"...,1,1) или iCustom(NULL,0,"Имя_индикатора"...,0,4) использует уже рассчитанные значения для всех индексов и линий.
Повтороного лишнего расчета не происходит. Считается все и
за один раз.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь