Как определить "реквизиты" последнего переключения pSAR ?

 

Там как-то не в тему:

'Поиск максимумов и минимумов'

поэтому спрошу здесь...


Как определить "реквизиты" последнего переключения pSAR?

его время и цену , что-то по типу:

ParSarTimeSw();

( или ParSarShiftBarsSw(); )

ParSarPriceSw();

Определение времени (шифта) по первой точке новой параболы.

 
через цикл for() я так делал
 

Да это понятно шо через цикл...

С алгоритмом никак не определюсь.

Пока копаю в сторону сравнения сар и выше\ниже цены бара.

Начинать видимо с текущего направления:

int PSLSDir(string sim="")
{
// 1 = SAR выше текущей цены; 0 = SAR ниже текущей цены;
if(sim=="") sim=Symbol();
if(iSAR(NULL,0,0.02,0.2,0)>MarketInfo(sim,MODE_BID)) return(1);
return(0);
}

далее уже типа, если 1, то сравнивать с сары>Хаями, но не меньше чем Лоу.

Как только меньше, то стоп! вычисляем смещение...

При 0 соответственно наоборот.

Как-то так.

 

Немного не понял,что вообще требуется найти? Можно поконкретнее

Не совсем понятно причем тут цена? если исследуем сар...

 

Вот картинка, переделывать не стал, но будет понятнее.

Там, последнее переключение направления сар отмечено зеленой трендлайн с привязками.


так вот, в данном случае первой "новой" точкой текущей параболы

это нижняя точка трендлайн, а бар где она образована её "время".

Цена же, поскольку это уже история, средняя того бара. (примерно 1.4230 на картинке).

*

Вот только как все это себя поведет при текущей смене направления сар...

ЗЫ: Направлением, dir, называю взаимное положение сар и цены.


Функции которые в разработке:

datetime PSLSTime()
{
// время последнего переключения сар
datetime st;
return(st);
}
//-----
int PSLSShiftBars()
{
// смещения бар последнего переключения сар
int sb;
return(sb);
}
//---
double PSLSPriceSw()
{
// "цена" последнего переключения сар
double sp;
return(sp);
}
//----
int PSLSDir(string sim="")
{
// 1 = SAR выше текущей цены; 0 = SAR ниже текущей цены;
if(sim=="") sim=Symbol();
if(iSAR(NULL,0,0.02,0.2,0)>MarketInfo(sim,MODE_BID)) return(1);
return(0);
}
 
А кто мешает создать ещё один массив и заполнять по ходу событий его 1|-1, а потом через бинарный поиск получить необходимый индекс бара, ну а всё остальное (datetime,value) - дело техники.
 

Попробуй скрипт... я правильно тебя понял???

это для пяти знаков, как видишь обошелся без цены))))

//+------------------------------------------------------------------+
//|                                           Special for Kombat.mq4 |
//|                                                            Roman |
//|                                                   srb-78@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Roman"
#property link      "srb-78@mail.ru"

int start()
  {
  for (int bar=0; bar<100; bar++)
    {
     double SAR_0 = iSAR("EURUSD",NULL,0.001,0.2,bar);
     double SAR_1 = iSAR("EURUSD",NULL,0.001,0.2,bar+1);
     if (SAR_0-SAR_1>0 && MathAbs(SAR_0-SAR_1)<100*Point) Alert("SAR ползет вверх SAR=",SAR_0);
     if (SAR_0-SAR_1>0 && MathAbs(SAR_0-SAR_1)>100*Point) Alert("переворот SAR с max SAR=",SAR_0," на min SAR=",SAR_1);
     if (SAR_0-SAR_1<0 && MathAbs(SAR_0-SAR_1)<100*Point) Alert("SAR ползет вниз SAR=",SAR_0);
     if (SAR_0-SAR_1<0 && MathAbs(SAR_0-SAR_1)>100*Point) Alert("переворот SAR с min SAR=",SAR_0," на max SAR=",SAR_1);
    }
  return(0);
  }

ЗЫ:

Время сам прикрутишь ;)

 

Если не внедрять код параболика в текст своей проги, откуда можно вытянуть стат. переменную longdir, а просто использовать iSAR, то я это решил так: (см. в тексте индикатора ZZ@SAR.mq4 https://c.mql5.com/mql4/forum/2009/08/_ZZzSAR.mq4).


SAR[i]=iSAR(NULL,0,Step,Maximum, i);

double mid[2]; // ср. цена
mid[0]=(High[i]+Low[i])/2; // ср.цена на текущем баре
mid[1]=(High[i+1]+Low[i+1])/2; // ср.цена на пред.баре

if(SAR[i+1]>=mid[1] && SAR[i]<mid[0]) // переворот вверх
if(SAR[i+1]<=mid[1] && SAR[i]>mid[0]) // переворот вниз

====================================

массив SAR[] - индикаторный

Можно просто обойтись текущим значением SAR и на пред. баре - PrevSAR, если на экран выводить не нужно.

 
RomanS >>:

Время сам прикрутишь ;)


Епстественно!

спасиб, пригодится...

*

Я щас тему заново перечитал, и понял что слишком много написал.

Когда проще было отметить на рисунке нижнюю точку первой трендлайн,

тем самым указав искомое место: первую точку начала последней параболы

и спосить мол, А как мне узнать цену\время ?

;)

Причина обращения: