Убился искать, помогите!

 
Сигнал покупка, продолжительность условий покупки 10 баров - опосля опять сигнал покупка, продолжительность 5 баров. Как сделать, что бы, грубо говоря стрелка на покупку появлялась не на 10 и 5 барах, а только на первых барах появления сигнала? Не могу найти, помогите с поиском или просвятите, пожалуйста. Заранее спасибо.
 
savva08 >>:
Сигнал покупка, продолжительность условий покупки 10 баров - опосля опять сигнал покупка, продолжительность 5 баров. Как сделать, что бы, грубо говоря стрелка на покупку появлялась не на 10 и 5 барах, а только на первых барах появления сигнала? Не могу найти, помогите с поиском или просвятите, пожалуйста. Заранее спасибо.  


В коде найдите условие отрисовки стрелок и замените на нужное вам..... :)
 
al.k >>:


В коде найдите условие отрисовки стрелок и замените на нужное вам..... :)


Тут не так просто, к сожалению. 

 
Простейшее решение - добавить обозначение флета - когда нет сигнала ни на покупку ни на продажу. Если флет был на предыдущем баре && на текущем сигнал покупка/продажа тогда рисуется только одна стрелка? Правильно?
 
Код показывайте, на словах я ни че не понял...
 

Маленькие стрелки - сигнал индюка, большие красные нарисовал я сам, именно эти стрелки ( первый бар появления сигнала ) мне нужны.
 
savva08 писал(а) >>

Маленькие стрелки - сигнал индюка, большие красные нарисовал я сам, именно эти стрелки ( первый бар появления сигнала ) мне нужны.

А где индюк то?

 
al.k >>:
Код показывайте, на словах я ни че не понял...


За основу взят стрелочный индюк с различными алармами. По моему 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"); }
}

 
savva08 >>:


За основу взят стрелочный индюк с различными алармами. По моему QQE. Лишнее выкинул, свое вставил, спасибо автору.....


Вот этот участок кода вызывает массу вопросов. Условие не выполнится ни когда, зачем оно  в индикаторе?

if (false) 
{
  CrossUp[i] = Low[i] - Range*Позиция_стрелок;
}
else 
  if (false) 
  {
    CrossDown[i] = High[i] + Range*Позиция_стрелок;
  }


Как я понял индикатор ставит стрелку и подает звуковой сигнал при пересечении скользящих средних, но в коде не увидел откуда берутся текущие значения EMA и где они сравниваются. Такое ощущение что вы не весь код показали.....

Мой вам совет вместо вашего идикатора возьмите этот советник  EMA - советник на пересечении двух скользящих средних  и добавьте к нему звуковое оповещение

 
al.k >>:


Вот этот участок кода вызывает массу вопросов. Условие не выполнится ни когда, зачем оно  в индикаторе?


Как я понял индикатор ставит стрелку и подает звуковой сигнал при пересечении скользящих средних, но в коде не увидел откуда берутся текущие значения EMA и где они сравниваются. Такое ощущение что вы не весь код показали.....

Мой вам совет вместо вашего идикатора возьмите этот советник  EMA - советник на пересечении двух скользящих средних  и добавьте к нему звуковое оповещение



Прошу прощения, за то, что не показываю ни условий открытия( значение false ) ни значений условий открытия. Вопрос ведь не в этом? За советник спасибо, но есть собственный, который открывается по сигналам данного индюка. Ближе к теме - если обозначить флет ( отсутствие любых сигнал ) и если флет был на предыдущем баре а на текущем имеем сигнал, то появится только одна стрелка на открытие. Соответственно делаем на закрытие. Это правильно?
 
savva08 >>:


  Прошу прощения, за то, что не показываю ни условий открытия( значение false ) ни значений условий открытия. Вопрос ведь не в этом?......


именно в этом вопрос.....CroosUp и CrossDown - это индикаторные буфера, все значения которые туда попадают отображаются на графике цен в виде линии или как в вашем случае в виде стрелок. Осталось узнать при каких условиях туда попадают значения 
if (условие_попадания_в_буфер) 
{
  CrossUp[i] = Low[i] - Range*Позиция_стрелок;
}
else 
  if (условие_попадания_в_буфер) 
  {
    CrossDown[i] = High[i] + Range*Позиция_стрелок;
  }
После этого вы сможете легко ответить на вопрос-"почему вместо одной стрелки рисуются десять". Остальную часть вашего сообщения про флэт, не понял.......
Причина обращения: