Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте, я пытаюсь извлечь самое высокое и самое низкое значение за x периодов главной линии стохастика в буфер. Где-то читал, что нужно сделать Array со значениями, но это не работает. Пока что я застрял с этим кодом. Правильно ли я делаю, может ли кто-нибудь помочь мне с этим? Большое спасибо. С уважением.
double num_array[1]={iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,CustomPeriod)};
int gmax=ArrayMaximum(num_array[1],WHOLE_ARRAY,0);
int gmin=ArrayMinimum(num_array[1],WHOLE_ARRAY,0);
MinBuffer=gmin;
MaxBuffer=gmax;
Все в порядке, я нашел ответ... Буферизация iStochastic, установка значений в серию с помощью ArraySetAsSeries, затем сделать ArrayMaximum из серии .
Все в порядке, я нашел ответ... Буферизация iStochastic, установка значений в серию с помощью ArraySetAsSeries, затем делаем ArrayMaximum из серии .
заменить
ArrayMaximum(num_array[1],WHOLE_ARRAY,0);
ArrayMinimum(num_array[1],WHOLE_ARRAY,0);
с
ArrayMaximum(num_array,WHOLE_ARRAY,0);
ArrayMinimum(num_array,WHOLE_ARRAY,0);
Извините, я виноват, перепутал их, хотя все еще использую правильное уже dojh! глупые метакотировки, которые меняют все.
Не только у вас есть такой опыт.
Это все, что угодно, только не удобство для пользователя
Здравствуйте кодеры и крекеры,
Нужен ваш опыт в модификации индикатора ZigZag on Close (прилагается).
Вместо него мне нужен ZigZag on Open (те же базовые настройки). Алерт на открытие новой свечи был бы приятным штрихом (если возможно).
Буду очень признателен, спасибо!
Здравствуйте кодеры и взломщики,
Нужен ваш опыт в модификации индикатора ZigZag on Close (прилагается).
Вместо него мне нужен ZigZag on Open (те же базовые настройки). Алерт на открытие новой свечи был бы приятным штрихом (если возможно).
Большое спасибо, спасибо!Здравствуйте Razo, это зигзаг открытия.
Привет всем гуру,
У меня проблема с iCustom со следующим индикатором, как прилагается... #VQ бары.
Не мог бы кто-нибудь ПОЖАЛУЙСТА показать мне, как извлечь значение для следующего буфера....DIR[].
Я использую следующий код для извлечения буфера... но он не возвращает никакого значения....
double dir=iCustom(NULL,PERIOD_M1, "#VQ bars",4,0);
Не мог бы кто-нибудь, пожалуйста, взглянуть на этот вопрос...
Ваша помощь и помощники будут высоко оценены.....
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
extern int Length = 5;
extern int Method = 3;
extern int Smoothing = 1;
extern int Filter = 5;
extern bool Steady = false;
double VQ[];
double SumVQ[];
double DIR[];
double UpBuffer[];
double DnBuffer[];
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,UpBuffer);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,DnBuffer);
SetIndexBuffer(2,SumVQ);
SetIndexBuffer(3,VQ);
SetIndexBuffer(4,DIR);
если (Length < 2) Length = 2;
if (Method < 0) Method = 0;
if (Method > 3) Method = 3;
if (Smoothing < 0) Smoothing = 0;
if (Filter < 0) Filter = 0;
string short_name = "VQ | "+ Length + " , " +
Method + " " , " + Smoothing + " " , " + Filter + " | ";
IndicatorShortName(short_name);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
double MH = 0, ML = 0, MO = 0, MC = 0, MC1 = 0;
int i, j, limit, counted_bars=IndicatorCounted();
//---- проверка на возможные ошибки
if(counted_bars<0) return(-1);
//---- последний подсчитанный бар будет пересчитан
if(counted_bars>0) counted_bars--;
//----
if(counted_bars<1) i=Bars-Length-1;
else i=Bars-counted_bars;
if(counted_bars<1)
{
j=Bars-Length-1;
SumVQ[j + 1] = Close[j + 1];
}
while (i >= 0)
{
MH = iMA(NULL,0,Length,0,Method,PRICE_HIGH,i);
ML = iMA(NULL,0,Length,0,Method,PRICE_LOW,i);
MO = iMA(NULL,0,Length,0,Method,PRICE_OPEN,i);
MC = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,i);
MC1 = iMA(NULL,0,Length,0,Method,PRICE_CLOSE,i+Smoothing);
if (Steady==true)
{
MC=iMA(NULL,0,Length,0,Method,PRICE_MEDIAN,i);
MC1=iMA(NULL,0,Length,0,Method,PRICE_MEDIAN,i+Smoothing);
}
if((MH - ML)>0)
VQ = MathAbs(((MC - MC1) / MathMax(MH - ML, MathMax(MH - MC1, MC1 - ML)) + (MC - MO) / (MH - ML)) * 0,5) * ((MC - MC1 + (MC - MO)) * 0.5);
SumVQ = SumVQ + VQ;
если (Filter > 0)
if (MathAbs(SumVQ - SumVQ) < Filter * Point)
SumVQ = SumVQ;
i--;
}
if(counted_bars<1)
limit=Bars-Length-1;
else limit=Bars-counted_bars;
for (i = limit-1; i >= 0; i--)
{
если (SumVQ > SumVQ) DIR = 1;
если (SumVQ < SumVQ) DIR = -1;
if (SumVQ== SumVQ) DIR = DIR;
if (DIR > 0)
{
UpBuffer = High;
DnBuffer = Low;
}
else
if (DIR < 0)
{
DnBuffer = High;
UpBuffer = Low;
}
}
return(0);
}
Привет всем гуру,
У меня проблема с iCustom со следующим индикатором, как прилагается... #VQ бары.
Не мог бы кто-нибудь ПОЖАЛУЙСТА показать мне, как извлечь значение для следующего буфера....DIR[].
Я использую следующий код для извлечения буфера... но он не возвращает никакого значения....
double dir=iCustom(NULL,PERIOD_M1, "#VQ bars",4,0);
Не мог бы кто-нибудь взглянуть на это дело...
Ваша помощь и помощники высоко ценятся.....Все вроде бы в порядке
Прикрепляю #vq бары, а также тестовый индикатор, который использует эти значения, и он показывает правильные значения
Кажется, все в порядке Прикрепляю бары #vq, а также тестовый индикатор, который использует эти значения, и он показывает правильные значения.
Вау... Спасибо, сэр MLADEN....
Странная вещь произошла... этот код не работает на моем индикаторе... не может открыть журнал ошибок....
но я протестировал его на барах #VQ и он работает просто отлично....
Потратил несколько часов на это....
Что я могу сказать.... Должен вам один....SIR.... за то, что прояснили для меня этот вопрос.....
Это мой #VQ.....
У него есть значение, но когда я вызываю iCustom в советнике, у него нет значения.... что я могу сказать.... глупый я....
Уважаемый господин МЛАДЕН,
Не могли бы Вы, пожалуйста, рассмотреть мой индикатор #VQ....... Я удалил несколько строк, которые я не использую.... и добавил несколько алертов.....
Возможно, это и есть причина проблемы, из-за которой я не могу вызвать буфер в советнике через iCustom.....
Ваша помощь еще раз высоко ценится.....
Искренне Ваш
AZRUL.......
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
extern int Length = 5;
extern int Method = 3;
extern int Smoothing = 1;
extern double Filter = 0.5;
extern bool Steady = False;
extern string SoundGbp = "news.wav";
extern string SoundEur = "news.wav";
extern bool PopupAlert = true;
extern bool SendPushNotification = false;
extern bool SoundAlert = True;
int lastAlert = 3;
double VQ[];
double SumVQ[];
double DIR[];
double UpBuffer[];
double DnBuffer[];
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,UpBuffer);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,DnBuffer);
SetIndexBuffer(2,SumVQ);
SetIndexBuffer(3,VQ);
SetIndexBuffer(4,DIR);
если (Length < 2) Length = 2;
if (Method < 0) Method = 0;
if (Method > 3) Method = 3;
if (Smoothing < 0) Smoothing = 0;
if (Filter < 0) Filter = 0;
string short_name = "VQ | "+ Length + " , " +
Method + " " , " + Smoothing + " " , " + Filter + " | ";
IndicatorShortName(short_name);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i, limit, counted_bars=IndicatorCounted();
//---- проверка на возможные ошибки
if(counted_bars<0) return(-1);
//---- последний подсчитанный бар будет пересчитан
if(counted_bars>0) counted_bars--;
//----
if(counted_bars<1) i=Bars-Length;
else i=Bars-counted_bars;
if(counted_bars<1)
while (i >= 0)
{
VQ = iCustom(NULL,0, "#pollan indy",0,i+1);
SumVQ = iCustom(NULL,0, "#pollan indy",1,i+1);
//if (Filter > 0)
//if (MathAbs(VQ - SumVQ) < Filter)
//VQ = SumVQ;
i--;
}
if(counted_bars<1)
limit=Bars-Length-1;
else limit=Bars-counted_bars;
for (i = limit-1; i >= 0; i--)
{
//если (VQ > SumVQ) DIR = 1;
if ((VQ+VQ) > (SumVQ+SumVQ))
DIR = 1;
if ((VQ+VQ) < (SumVQ+SumVQ))
DIR = -1;
if ((VQ+VQ) == (SumVQ+SumVQ))
DIR = DIR;
if (DIR > 0)
{
UpBuffer = High;
DnBuffer = Low;
}
else
if (DIR < 0)
{
DnBuffer = High;
UpBuffer = Low;
}
if ((DIR > 0) && (DIR > 0))
{
CheckForAlerts(OP_BUY);//ALERT BUY
}
if ((DIR < 0) && (DIR < 0))
{
CheckForAlerts(OP_SELL);//ПРЕДУПРЕЖДЕНИЕ ПРОДАВАТЬ
}
}
double vq1=iCustom(NULL,0, "#pollan indy",0,i+1);
double svq1=iCustom(NULL,0, "#pollan indy",1,i+1);
double vq2=iCustom(NULL,0, "#pollan indy",0,i+2);
double svq2=iCustom(NULL,0, "#pollan indy",1,i+2);
double vq3=iCustom(NULL,0, "#pollan indy",0,i+3);
double svq3=iCustom(NULL,0, "#pollan indy",1,i+3);
double dir1=DIR;
double dir2=DIR;
double dir3=DIR;
double vq0= (vq1 + vq2);
double svq0= (svq1 + svq2);
string VQ0_Teks=DoubleToStr(vq0,6);
string VQS0_Teks=DoubleToStr(svq0,6);
string VQ1_Teks=DoubleToStr(vq1,6);
string VQS1_Teks=DoubleToStr(svq1,6);
string VQ2_Teks=DoubleToStr(vq2,6);
string VQS2_Teks=DoubleToStr(svq2,6);
string VQ3_Teks=DoubleToStr(vq3,6);
string VQS3_Teks=DoubleToStr(svq3,6);
string dir1_Teks=DoubleToStr(dir1,6);
string dir2_Teks=DoubleToStr(dir2,6);
string dir3_Teks=DoubleToStr(dir3,6);
string h =
" Синий" + " " + VQ0_Teks+ " " + "Красный" + " " + VQS0_Teks + "\n" + "\n".
" Синий" + " " + VQ1_Teks+ " " + " " + " Красный" + " " + VQS1_Teks + "\n" +
" Синий" + " " + VQ2_Teks+ " " + " " Красный" + " " + VQS2_Teks+ "\n" +
" Синий" + " " + VQ3_Teks+ " " + " " Красный" + " " + VQS3_Teks + "\n" + "\n" +
" DIR1" + " " + dir1_Teks+" " + "DIR2" + " " + dir2_Teks + " " + "DIR3" + " " + dir3_Teks;
Комментарий(h);
return(0);
}
//--------------------------------------------------------------
void CheckForAlerts(int type)
{
//АЛЕРТЫ:
static datetime lastAlertTime=0;
if (lastAlertTime != iTime(NULL,0,0)) {
if (type==OP_BUY && lastAlert!=2) { //BUY
doAlerts("Pollan BAR UP "+Symbol()+" (tf: "+Period()+")", SoundEur);
lastAlert=2;
lastAlertTime=iTime(NULL,0,0);
}
if (type==OP_SELL && lastAlert!=1) { //SELL
doAlerts("Pollan BAR DOWN "+Symbol()+" (tf: "+Period()+")", SoundGbp);
lastAlert=1;
lastAlertTime=iTime(NULL,0,0);
}
}//if (lastAlertTime != iTime(NULL,0,0)) {
//end ALERTS
}
//--------------------------------------------------------------
void doAlerts(string sMsg,string SoundFile) {
if (PopupAlert) Alert(sMsg);
if(SoundAlert) PlaySound(SoundFile);
if(SendPushNotification) SendNotification(sMsg);
}
СПАСИБО........
Уважаемый сэр МЛАДЕН,
Не могли бы вы ПОЖАЛУЙСТА посмотреть на мой индикатор #VQ....... Я удалил несколько строк, которые я не использую.... и добавил несколько алертов.....
Возможно, это и есть причина проблемы в том, что я не могу вызвать буфер в советнике через iCustom.....
Ваша помощь еще раз высоко ценится.....
Искренне Ваш
AZRUL.......
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
extern int Length = 5;
extern int Method = 3;
extern int Smoothing = 1;
extern double Filter = 0.5;
extern bool Steady = False;
extern string SoundGbp = "news.wav";
extern string SoundEur = "news.wav";
extern bool PopupAlert = true;
extern bool SendPushNotification = false;
extern bool SoundAlert = True;
int lastAlert = 3;
double VQ[];
double SumVQ[];
double DIR[];
double UpBuffer[];
double DnBuffer[];
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,UpBuffer);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,DnBuffer);
SetIndexBuffer(2,SumVQ);
SetIndexBuffer(3,VQ);
SetIndexBuffer(4,DIR);
если (Length < 2) Length = 2;
if (Method < 0) Method = 0;
if (Method > 3) Method = 3;
if (Smoothing < 0) Smoothing = 0;
if (Filter < 0) Filter = 0;
string short_name = "VQ | "+ Length + " , " +
Method + " " , " + Smoothing + " " , " + Filter + " | ";
IndicatorShortName(short_name);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i, limit, counted_bars=IndicatorCounted();
//---- проверка на возможные ошибки
if(counted_bars<0) return(-1);
//---- последний подсчитанный бар будет пересчитан
if(counted_bars>0) counted_bars--;
//----
if(counted_bars<1) i=Bars-Length;
else i=Bars-counted_bars;
if(counted_bars<1)
while (i >= 0)
{
VQ = iCustom(NULL,0, "#pollan indy",0,i+1);
SumVQ = iCustom(NULL,0, "#pollan indy",1,i+1);
//if (Filter > 0)
//if (MathAbs(VQ - SumVQ) < Filter)
//VQ = SumVQ;
i--;
}
if(counted_bars<1)
limit=Bars-Length-1;
else limit=Bars-counted_bars;
for (i = limit-1; i >= 0; i--)
{
//если (VQ > SumVQ) DIR = 1;
if ((VQ+VQ) > (SumVQ+SumVQ))
DIR = 1;
if ((VQ+VQ) < (SumVQ+SumVQ))
DIR = -1;
if ((VQ+VQ) == (SumVQ+SumVQ))
DIR = DIR;
if (DIR > 0)
{
UpBuffer = High;
DnBuffer = Low;
}
else
if (DIR < 0)
{
DnBuffer = High;
UpBuffer = Low;
}
if ((DIR > 0) && (DIR > 0))
{
CheckForAlerts(OP_BUY);//ALERT BUY
}
if ((DIR < 0) && (DIR < 0))
{
CheckForAlerts(OP_SELL);//ПРЕДУПРЕЖДЕНИЕ ПРОДАВАТЬ
}
}
double vq1=iCustom(NULL,0, "#pollan indy",0,i+1);
double svq1=iCustom(NULL,0, "#pollan indy",1,i+1);
double vq2=iCustom(NULL,0, "#pollan indy",0,i+2);
double svq2=iCustom(NULL,0, "#pollan indy",1,i+2);
double vq3=iCustom(NULL,0, "#pollan indy",0,i+3);
double svq3=iCustom(NULL,0, "#pollan indy",1,i+3);
double dir1=DIR;
double dir2=DIR;
double dir3=DIR;
double vq0= (vq1 + vq2);
double svq0= (svq1 + svq2);
string VQ0_Teks=DoubleToStr(vq0,6);
string VQS0_Teks=DoubleToStr(svq0,6);
string VQ1_Teks=DoubleToStr(vq1,6);
string VQS1_Teks=DoubleToStr(svq1,6);
string VQ2_Teks=DoubleToStr(vq2,6);
string VQS2_Teks=DoubleToStr(svq2,6);
string VQ3_Teks=DoubleToStr(vq3,6);
string VQS3_Teks=DoubleToStr(svq3,6);
string dir1_Teks=DoubleToStr(dir1,6);
string dir2_Teks=DoubleToStr(dir2,6);
string dir3_Teks=DoubleToStr(dir3,6);
string h =
" Синий" + " " + VQ0_Teks+ " " + "Красный" + " " + VQS0_Teks + "\n" + "\n".
" Синий" + " " + VQ1_Teks+ " " + " " + " Красный" + " " + VQS1_Teks + "\n" +
" Синий" + " " + VQ2_Teks+ " " + " " Красный" + " " + VQS2_Teks+ "\n" +
" Синий" + " " + VQ3_Teks+ " " + " " Красный" + " " + VQS3_Teks + "\n" + "\n" +
" DIR1" + " " + dir1_Teks+" " + "DIR2" + " " + dir2_Teks + " " + "DIR3" + " " + dir3_Teks;
Комментарий(h);
return(0);
}
//--------------------------------------------------------------
void CheckForAlerts(int type)
{
//АЛЕРТЫ:
static datetime lastAlertTime=0;
if (lastAlertTime != iTime(NULL,0,0)) {
if (type==OP_BUY && lastAlert!=2) { //BUY
doAlerts("Pollan BAR UP "+Symbol()+" (tf: "+Period()+")", SoundEur);
lastAlert=2;
lastAlertTime=iTime(NULL,0,0);
}
if (type==OP_SELL && lastAlert!=1) { //SELL
doAlerts("Pollan BAR DOWN "+Symbol()+" (tf: "+Period()+")", SoundGbp);
lastAlert=1;
lastAlertTime=iTime(NULL,0,0);
}
}//if (lastAlertTime != iTime(NULL,0,0)) {
//end ALERTS
}
//--------------------------------------------------------------
void doAlerts(string sMsg,string SoundFile) {
if (PopupAlert) Alert(sMsg);
if(SoundAlert) PlaySound(SoundFile);
if(SendPushNotification) SendNotification(sMsg);
}
THANKS........Вы изменили его, чтобы использовать "#pollan indy".
Я понятия не имею, что делает этот индикатор (если он такой же, как остальные индикаторы "pollan", то он перерисовывается и это может вызвать ваши проблемы, но сейчас я просто играю в угадайку).