Как запрограммировать?

 
Всем привет, кто знает как запрограммировать вот эту часть:
Сигнал на покупку (продажу) "два пика" индикатора Awesome Oscillator (AO) образуется, когда гистограмма находится ниже (выше) нулевой линии, и последнее донышко индикатора Awesome Oscillator выше (последний пик индикатора ниже) предыдущего. При этом между этими донышками (пиками) гистограмма не поднималась выше (не опускалась ниже) ноля (рис. 1).



В этом случае также выставляем отложенный ордер Buy Stop (Sell Stop) на 1 пипс выше максимума (ниже минимума) сигнального бара. В случае сигнала на покупку столбец "С" (сигнальный) всегда зеленый, а в случае сигнала на продажу – красный.

Помогите кто-нибудь!!!
(Заранее спасибо)
 
Ищем два последних пика ниже нуля и выше нуля и сравниваем их. Если они прошли проверку на сравнение по высоте, то проверяем на то чтобы индикатор не между ними не пересекал нулевой уровень.
Поиск пиков реализуется с помощью цикла. Я сделал это отдельной функцией. Она принимает в качестве параметра индекс бара, с которого начинается поиск пика. А возвращает смещение найденного пика.

int get_high_peak(int start)
{
double ao0=0,ao1=0,ao2=0;
int retn_shift=0;
for(int i=start;i<Bars;i++)
{
ao0=iAO(NULL,0,i);
ao1=iAO(NULL,0,i+1);
ao2=iAO(NULL,0,i+2);
if(ao0>0&&ao2>0&&ao0<ao1&&ao1>ao2)
{
retn_shift=0;
break;
}
}
return(retn_shift)
}

К примеру используется, так:

int high_peak1=get_high_peak(0);
int high_peak2=get_high_peak(high_peak1);

if(iAO(NULL,0,high_peak1)<iAO(NULL,0,high_peak2)
{
...............
}

Все это я написал для верхних пиков. Для нижних пиков и проверку на пересечение нулевой я думаю догадаешься сделать сам.
 

Всем привет. У меня возникла большая проблема в простой ситуации. Задача такая: имеются два разнонаправленных отложенных ордера (один байстоп другой селл стоп). Далее один из них срабатывает. Нужно удалить оставшейся отложенный ордер.

Я делал так и не только так но почему то ничего не получается:


   
    for ( i=1; i<=OrdersTotal(); i++)                                           
      if(OrderSelect(i-1,SELECT_BY_POS)==true)
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
       {
         for(i=OrdersTotal(); i+1>=0; i--)
            {
             if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
                OrderDelete(OrderTicket());
            }
       }

Коряво, но должно работать, а нефига. Прошу помочь.

 
Chris_Brown писал(а) >>

Всем привет. У меня возникла большая проблема в простой ситуации. Задача такая: имеются два разнонаправленных отложенных ордера (один байстоп другой селл стоп). Далее один из них срабатывает. Нужно удалить оставшейся отложенный ордер.

Я делал так и не только так но почему то ничего не получается:

Коряво, но должно работать, а нефига. Прошу помочь.

У KimIV есть для этого библиотечная функция: DeleteOppositeOrders().

 
Chris_Brown >>:

Всем привет. У меня возникла большая проблема в простой ситуации. Задача такая: имеются два разнонаправленных отложенных ордера (один байстоп другой селл стоп). Далее один из них срабатывает. Нужно удалить оставшейся отложенный ордер.

Я делал так и не только так но почему то ничего не получается:


Коряво, но должно работать, а нефига. Прошу помочь.

         int k=0;
         for (int i=0;i<OrdersTotal();i++)//ищем открытые ордера бай и селл
         {
            if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
            {
               if (OrderType()<=1) k++;
            }
         }
         if (k>0)// если есть открытый ордер бай или селл
         {
            for (i=0;i<OrdersTotal();i++)
            {
               if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderType()>=2)
               {
                  OrderDelete(OrderTicket());
               }
            }
          }
       }
что-то типа этого
 
   if(OrdersTotal()>0)
   {
      int buy.ticket,sell.ticket;
      for(int i=0;i<=OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic_№) continue;
         
         if(OrderType()==OP_BUYSTOP)
            buy.ticket=OrderTicket();
         if(OrderType()==OP_SELLSTOP)
            sell.ticket=OrderTicket();
      }
      if(buy.ticket==0 && sell.ticket!=0)
         OrderDelete(sell.ticket);
      if(buy.ticket!=0 && sell.ticket==0)
         OrderDelete(buy.ticket);
   }
 

Всем привет. У меня возникла проблема в ходе построения ценового канала:



Попробую максимально чётко объяснить суть проблемы.

Как вы видете - построен нисходящий канал: верхняя его линия строится по максимальной цене High (диапазон поиска лежит между первой и второй точкой ), но некоторые бары выходят за пределы верхней линии канал (т.е. точка верхней линии канала найдена неправильно). Вопрос: как правильно найти верхнюю точку без перерисовки канала. (если с перерисовкой то мы просто идём в цикле по нисходящей наклонной максимальных цен и проверяя выходят ли бары за пределы канала).

 
Chris_Brown >>:

Всем привет. У меня возникла проблема в ходе построения ценового канала:



Попробую максимально чётко объяснить суть проблемы.

Как вы видете - построен нисходящий канал: верхняя его линия строится по максимальной цене High (диапазон поиска лежит между первой и второй точкой ), но некоторые бары выходят за пределы верхней линии канал (т.е. точка верхней линии канала найдена неправильно). Вопрос: как правильно найти верхнюю точку без перерисовки канала. (если с перерисовкой то мы просто идём в цикле по нисходящей наклонной максимальных цен и проверяя выходят ли бары за пределы канала).

решал аналогичную проблему только с вилами эндрюса,

приходилось делать цикл, который находил разность(по разности максимумы/минимумы) и переставлял вилы заново... так сходился к максимумам.

 
Chris_Brown >>:

Всем привет. У меня возникла проблема в ходе построения ценового канала:



Попробую максимально чётко объяснить суть проблемы.

Как вы видете - построен нисходящий канал: верхняя его линия строится по максимальной цене High (диапазон поиска лежит между первой и второй точкой ), но некоторые бары выходят за пределы верхней линии канал (т.е. точка верхней линии канала найдена неправильно). Вопрос: как правильно найти верхнюю точку без перерисовки канала. (если с перерисовкой то мы просто идём в цикле по нисходящей наклонной максимальных цен и проверяя выходят ли бары за пределы канала).

канал нарисован не правильно, надо две точки искать среди вершин, если тренд идет вниз и наоборот

 
sanyooooook >>:

канал нарисован не правильно, надо две точки искать среди вершин, если тренд идет вниз и наоборот

Это Вам так кажется, а заказчику нет... он думает по другому...

 
sanyooooook >>:

канал нарисован не правильно, надо две точки искать среди вершин, если тренд идет вниз и наоборот

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