- Мультитаймфреймовые индикаторы
- Помогите найти индикатор или советник нового бара
- Напишу индикатор бесплатно
Сигнал покупка, продолжительность условий покупки 10 баров - опосля опять сигнал покупка, продолжительность 5 баров. Как сделать, что бы, грубо говоря стрелка на покупку появлялась не на 10 и 5 барах, а только на первых барах появления сигнала? Не могу найти, помогите с поиском или просвятите, пожалуйста. Заранее спасибо.
За основу взят стрелочный индюк с различными алармами. По моему QQE. Лишнее выкинул, свое вставил, спасибо автору:
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Magenta
//extern bool ShowCrossQQE_RSISlow = true;
extern string Настройки = "=== Общие настройки ===";
extern int Величина_стрелок = 1;
extern double Позиция_стрелок = 0.5;
extern bool Разрешить_звук = false;
extern bool Разрешить_ALERT = false;
extern bool Разрешить_EmailAlert = false;
double CrossUp[];
double CrossDown[];
static datetime alertTag = D'1980.01.01';
static datetime soundTag = D'1980.01.01';
static datetime emailTag = D'1980.01.01';
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY,Величина_стрелок);
SetIndexArrow(0, 241);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY,Величина_стрелок);
SetIndexArrow(1, 242);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, counter,a,n,b;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(i = 0; i <= limit; i++)
{
counter=i;
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
if (false)
{
CrossUp[i] = Low[i] - Range*Позиция_стрелок;
}
else
if (false)
{
CrossDown[i] = High[i] + Range*Позиция_стрелок;
}
/* if (SoundON==true && i==1 && CrossUp[i] > CrossDown[i] && alertTag!=Time[0])
{
Alert("EMA Cross Trend going Down on ",Symbol()," ",Period());
alertTag = Time[0];
}
if (SoundON==true && i==1 && CrossUp[i] < CrossDown[i] && alertTag!=Time[0])
{
Alert("EMA Cross Trend going Up on ",Symbol()," ",Period());
alertTag = Time[0];
} */
// Gestione Alert visivo //
if (Разрешить_ALERT==true && i==1 && CrossUp[i] > CrossDown[i] && alertTag!=Time[0])
{
Alert("QQE Cross Trend going DOWN on ",Symbol()," ",Periodo(Period()));
alertTag = Time[0];
}
if (Разрешить_ALERT==true && i==1 && CrossUp[i] < CrossDown[i] && alertTag!=Time[0])
{
Alert("QQE Cross Trend going UP on ",Symbol()," ",Periodo(Period()));
alertTag = Time[0];
}
// Gestione Alert sonoro //
if (Разрешить_звук==true && i==1 && CrossUp[i] > CrossDown[i] && soundTag!=Time[0])
{
PlaySound ("short.wav");
soundTag = Time[0];
}
if (Разрешить_звук==true && i==1 && CrossUp[i] < CrossDown[i] && soundTag!=Time[0])
{
PlaySound ("long.wav");
soundTag = Time[0];
}
// Gestione Alert con email //
if (Разрешить_EmailAlert==true && i==1 && CrossUp[i] > CrossDown[i] && emailTag!=Time[0])
{
SendMail("Supernova alert signal!","QQE Cross Trend going DONWN on " + (StringConcatenate(Symbol()," ",Periodo(Period()))));
emailTag = Time[0];
}
if (Разрешить_EmailAlert==true && i==1 && CrossUp[i] < CrossDown[i] && emailTag!=Time[0])
{
SendMail("Supernova alert signal!","QQE Cross Trend going UP on " + (StringConcatenate(Symbol()," ",Periodo(Period()))));
emailTag = Time[0];
}
}
return(0);
}
string Periodo(int TF)
{
if (TF==1) { return("M1"); }
if (TF==5) { return("M5"); }
if (TF==15) { return("M15"); }
if (TF==30) { return("M30"); }
if (TF==60) { return("H1"); }
if (TF==240) { return("H4"); }
if (TF==1440) { return("D1"); }
}
За основу взят стрелочный индюк с различными алармами. По моему QQE. Лишнее выкинул, свое вставил, спасибо автору.....
Вот этот участок кода вызывает массу вопросов. Условие не выполнится ни когда, зачем оно в индикаторе?
if (false) { CrossUp[i] = Low[i] - Range*Позиция_стрелок; } else if (false) { CrossDown[i] = High[i] + Range*Позиция_стрелок; }
Как я понял индикатор ставит стрелку и подает звуковой сигнал при пересечении скользящих средних, но в коде не увидел откуда берутся текущие значения EMA и где они сравниваются. Такое ощущение что вы не весь код показали.....
Мой вам совет вместо вашего идикатора возьмите этот советник EMA - советник на пересечении двух скользящих средних и добавьте к нему звуковое оповещение
Вот этот участок кода вызывает массу вопросов. Условие не выполнится ни когда, зачем оно в индикаторе?
Как я понял индикатор ставит стрелку и подает звуковой сигнал при пересечении скользящих средних, но в коде не увидел откуда берутся текущие значения EMA и где они сравниваются. Такое ощущение что вы не весь код показали.....
Мой вам совет вместо вашего идикатора возьмите этот советник EMA - советник на пересечении двух скользящих средних и добавьте к нему звуковое оповещение
if (условие_попадания_в_буфер) { CrossUp[i] = Low[i] - Range*Позиция_стрелок; } else if (условие_попадания_в_буфер) { CrossDown[i] = High[i] + Range*Позиция_стрелок; }После этого вы сможете легко ответить на вопрос-"почему вместо одной стрелки рисуются десять". Остальную часть вашего сообщения про флэт, не понял.......

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования