nt Sygnal() // Пользовательская функция { string Sym=Symbol(); //--------------------------------------------------------------- 4 -- // Параметры технич. индикат: double main=iADX(Sym,0,14,PRICE_CLOSE,MODE_MAIN,0); double plusDiSHELL=iADX(Sym,0,14,PRICE_CLOSE,MODE_PLUSDI,0); double minusDiSHELL=iADX(Sym,0,14,PRICE_CLOSE,MODE_MINUSDI,0); double plusDiSHELL1 =iADX(Sym,0,14,PRICE_CLOSE,MODE_PLUSDI,1); double minusDiSHELL1 =iADX(Sym,0,14,PRICE_CLOSE,MODE_MINUSDI,1); double plusDiBUY =iADX(Sym,0,14,PRICE_OPEN,MODE_PLUSDI,0); double minusDiBUY =iADX(Sym,0,14,PRICE_OPEN,MODE_MINUSDI,0); double plusDiBUY1 =iADX(Sym,0,14,PRICE_OPEN,MODE_PLUSDI,1); double minusDiBUY1 =iADX(Sym,0,14,PRICE_OPEN,MODE_MINUSDI,1); //--------------------------------------------------------------- 5 -- // Вычисление торговых критериев // -----------BUY double DeltaBUY=plusDiBUY - minusDiBUY; double DeltaBUY1=plusDiBUY1-minusDiBUY1; if(DeltaBUY > 0 && DeltaBUY1 <0){ return(10); // Открытие Buy } if(plusDiBUY < plusDiBUY){ return(11); // Закрытие Buy } //--------------SHELL double DeltaSHELL=plusDiSHELL - minusDiSHELL; double DeltaSHELL1=plusDiSHELL1-minusDiSHELL1; if(DeltaSHELL < 0 && DeltaSHELL1 >0){ return(20); // Открытие Sell } if(minusDiSHELL < minusDiSHELL1){ return(21); // Закрытие Sell } //--------------------------------------------------------------- 6 -- return(0); // Выход из пользов. функции } //-----------------
Здравствуйте!
Использую в своем советнике индикатор ADX, при пересечении +di -di открываю ордер в зависимости от положение +di и -di после пересечения.
double main=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_MAIN,0);
double plusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_PLUSDI,0);
double minusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_MINUSDI,0);
double LastplusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_PLUSDI,1);
double LastminusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_MINUSDI,1);
if(plusDi > minusDi){
razn=plusDi-minusDi;
}
if(plusDi < minusDi){
razn=minusDi-plusDi;
}
if(razn < 1){
// открываем
}else{
if(plusDi < minusDi){
if(LastplusDi > LastminusDi){
//открываем
}
}
if(plusDi > minusDi){
if(LastplusDi < LastminusDi){
//открываем
}
}
Возникла проблема позднего определения точки пересечения, потому что координаты графика обновляются только на линиях то есть в 0 минут 15 30 45 .... и иногда если пересечение на графике произошло между периодом, то соответствующие координаты новой линии (то есть 0 15 30 45 минуты ) которые позволяют определить пересечении не сразу меняются (+di не становиться выше или ниже -di относительно предыдущей линии)
Кто нибудь сталкивался с этой проблемой ? Поможет мне исправить проблему пересчет нулевого бара в индикаторе?
Здравствуйте. Гляньте здесь - бейте подобное.
Здравствуйте.
Отладил работает но пользы нет так как этот инструмент больше для фондовой биржи, работал безупречно на М1, а запоздание происходит из-за установки периода в iADX или в другом любом индекаторе где есть ТаймФрейм- это время сробатывания, надо ставить минимальный
double MidIndx = 17; // Параметры технич. индикат: double main=iADX(Sym,1,MidIndx,PRICE_CLOSE,MODE_MAIN,0); double plusDi=iADX(Sym,1,MidIndx,PRICE_CLOSE,MODE_PLUSDI,0); double minusDi=iADX(Sym,1,MidIndx,PRICE_CLOSE,MODE_MINUSDI,0); double plusDi1 =iADX(Sym,1,MidIndx,PRICE_CLOSE,MODE_PLUSDI,1); double minusDi1 =iADX(Sym,1,MidIndx,PRICE_CLOSE,MODE_MINUSDI,1); //--------------------------------------------------------------- 5 -- // Вычисление торговых критериев // -----------BUY double Delta0=plusDi-minusDi; double Delta1=plusDi1-minusDi1; //--------------SHELL // -----------BUY if(Delta0 > 0 && Delta1 <0 && main < plusDi){ Comment("Открытие Buy Delta=" ,Delta0," Delta1=" ,Delta1,"\n","+DI=",plusDi," -DI=",minusDi," +DI1=",plusDi1," -DI1=",minusDi1); return(10); // Открытие Buy } if(minusDi < minusDi1){ Comment("Закрытие Buy Delta=" ,Delta0," Delta1=" ,Delta1,"\n","+DI=",plusDi," -DI=",minusDi," +DI1=",plusDi1," -DI1=",minusDi1); return(11); // Закрытие Buy } //--------------SHELL if(Delta0 < 0 && Delta1 >0 && main > minusDi1 ){ Comment("Открытие Sell Delta=" ,Delta0," Delta1=" ,Delta1,"\n","+DI=",plusDi," -DI=",minusDi," +DI1=",plusDi1," -DI1=",minusDi1); return(20); // Открытие Sell } if( plusDi < plusDi1){ Comment("Закрытие Sell Delta=" ,Delta0," Delta1=" ,Delta1,"\n","+DI=",plusDi," -DI=",minusDi," +DI1=",plusDi1," -DI1=",minusDi1); return(21); // Закрытие Sell }
а запоздание происходит из-за установки периода в iADX или в другом любом индекаторе где есть ТаймФрейм- это время сробатывания, надо ставить минимальный
// берем два соседних значения Быстрой МА double fast0=iMA(Symbol(),PERIOD_M1, 10, 0, MODE_EMA, PRICE_CLOSE, 0); double fast1=iMA(Symbol(), PERIOD_M1, 10, 0, MODE_EMA, PRICE_CLOSE, 1); // берем два значения Медленной МА double slow0=iMA(Symbol(), PERIOD_M1, 20, 0, MODE_EMA, PRICE_CLOSE, 0); double slow1=iMA(Symbol(), PERIOD_M1, 20, 0, MODE_EMA, PRICE_CLOSE, 1); // сравниваем значения и определяем направление пересечения if (fast0>slow0 && fast1<slow1) Print("Пересечение ВВЕРХ"); if (fast0<slow0 && fast1>slow1) Print("Пересечение ВНИЗ");
Попробуйте отказаться от использования нулевого бара. Т.е. пользуйте вместо "0" - первый "1", вместо "1" - второй "2".
Или вместо прайс_клозе бейте цены открытия:
double fast0=iMA(Symbol(),PERIOD_M1, 10, 0, MODE_EMA, PRICE_OPEN, 0); double fast1=iMA(Symbol(), PERIOD_M1, 10, 0, MODE_EMA, PRICE_OPEN, 1);
Попробуйте отказаться от использования нулевого бара. Т.е. пользуйте вместо "0" - первый "1", вместо "1" - второй "2".
Или вместо прайс_клозе бейте цены открытия:
цены открытия не меняется на протяжении всего таймфрейма т.е. если стоит у вас часовой таймфрейм то и цена открытия у вас в течении часа одинаковая
Здравствуйте!
Использую в своем советнике индикатор ADX, при пересечении +di -di открываю ордер в зависимости от положение +di и -di после пересечения.Возникла проблема позднего определения точки пересечения, потому что координаты графика обновляются только на линиях то есть в 0 минут 15 30 45 .... и иногда если пересечение на графике произошло между периодом, то соответствующие координаты новой линии (то есть 0 15 30 45 минуты ) которые позволяют определить пересечении не сразу меняются (+di не становиться выше или ниже -di относительно предыдущей линии)
Кто нибудь сталкивался с этой проблемой ? Поможет мне исправить проблему пересчет нулевого бара в индикаторе?
Простое и довольно элементарное решение :
if ((ADXLine[Index+2]<=AlertSignal)&&(ADXLine[Index+1]>AlertSignal)) Signal=1; if ((ADXLine[Index+2]>=AlertSignal)&&(ADXLine[Index+1]<AlertSignal)) Signal=-1;
ADXLine - Буфер данных, AlertSignal - Уровень отработки сигнала - в данном случае показано отработка по открытию ..
Простое и довольно элементарное решение :
ADXLine - Буфер данных, AlertSignal - Уровень отработки сигнала - в данном случае показано отработка по открытию ..
Решение содержит некритическую ошибку.
В правых частях условий лучше применять то же условие, что и в левых, иначе иногда будем запаздывать.
В смысле - условие нестрогое :)
Решение содержит некритическую ошибку.
В правых частях условий лучше применять то же условие, что и в левых, иначе иногда будем запаздывать.
В смысле - условие нестрогое :)
Наверное нужно поменять условия с равенством местами тогда условие будет уточняяющим - это будет незапаздывающее..
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
Использую в своем советнике индикатор ADX, при пересечении +di -di открываю ордер в зависимости от положение +di и -di после пересечения.
double main=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_MAIN,0);
double plusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_PLUSDI,0);
double minusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_MINUSDI,0);
double LastplusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_PLUSDI,1);
double LastminusDi=iADX("EURUSD",15,14,PRICE_CLOSE,MODE_MINUSDI,1);
if(plusDi > minusDi){
razn=plusDi-minusDi;
}
if(plusDi < minusDi){
razn=minusDi-plusDi;
}
if(razn < 1){
// открываем
}else{
if(plusDi < minusDi){
if(LastplusDi > LastminusDi){
//открываем
}
}
if(plusDi > minusDi){
if(LastplusDi < LastminusDi){
//открываем
}
}
Возникла проблема позднего определения точки пересечения, потому что координаты графика обновляются только на линиях то есть в 0 минут 15 30 45 .... и иногда если пересечение на графике произошло между периодом, то соответствующие координаты новой линии (то есть 0 15 30 45 минуты ) которые позволяют определить пересечении не сразу меняются (+di не становиться выше или ниже -di относительно предыдущей линии)
Кто нибудь сталкивался с этой проблемой ? Поможет мне исправить проблему пересчет нулевого бара в индикаторе?