Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 746

 
AlexeyVik:

Да и ещё есть непонятка. Если N имеет тип datetime то D' 19:00 ' это текстовый формат. Можно-ли их сравнивать? Нет. В случаях сравнения времени я пишу

D'19:00' - это литеральная константа типа datetime.
 

Уважаемые программисты обьясните мне пожалуйста русским языком как кодом искать прошедшие показания индикаторов ? Например стоплосс при продаже мне нужно выставить на 3 хай ZigZagа от нулевого бара, или над восьмым верхним фракталом.Где ни читал - либо не то,либо написано не так :)

 
Petiyashaket:

Уважаемые программисты обьясните мне пожалуйста русским языком как кодом искать прошедшие показания индикаторов ? Например стоплосс при продаже мне нужно выставить на 3 хай ZigZagа от нулевого бара, или над восьмым верхним фракталом.Где ни читал - либо не то,либо написано не так :)

Цикл от нулевого бара до начала графика, int х=0.  В цикле вызываем нужный индикатор, фрактал, например. Если значение не пустое, добавляем единичку к х, когда х достигает нужного значения - запоминаем итерацию цикла и выходим из цикла, значение итерации теоретически буден номером бара, на котором находится нужный фрактал. Теоретически потому, что за время работы цикла на М1 может ещё один новый бар появиться, тогда упс, не на тот бар указатель будет )))
 
evillive:
Цикл от нулевого бара до начала графика, int х=0.  В цикле вызываем нужный индикатор, фрактал, например. Если значение не пустое, добавляем единичку к х, когда х достигает нужного значения - запоминаем итерацию цикла и выходим из цикла, значение итерации теоретически буден номером бара, на котором находится нужный фрактал. Теоретически потому, что за время работы цикла на М1 может ещё один новый бар появиться, тогда упс, не на тот бар указатель будет )))
Нужно сохранять время. А лучше использовать массив, в котором хранится время формирования последних фракталов. Скорость работы уменьшится за счет отказа лишних циклов
 
Petiyashaket:

Уважаемые программисты обьясните мне пожалуйста русским языком как кодом искать прошедшие показания индикаторов ? Например стоплосс при продаже мне нужно выставить на 3 хай ZigZagа от нулевого бара, или над восьмым верхним фракталом.Где ни читал - либо не то,либо написано не так :)

"Русский язык" и "язык программирования" (хотите объяснение кодом) - это не одно и то же.

Если алгоритмически:

1) Определяете какое значение возвращает интересуемый ZigZag, если у него нет "фрактальной точки" - это может быть EMPTY_VALUE или 0.0.

2) Через iCustom() в цикле получаете значение индикатора соответствующего буфера на проверяемом в цикле баре и проверяете его на отличие от "пустого значения", ведёте счётчик этих отличий. Когда счётчик будет равен в Вашем случае 3-ём - номер (N) этого бара и будет искомым баром;

3) High[N]\Low[N] - будет нужным уровнем.

Для стандартного ZigZag High ищем примерно так:

#define ZZ_NULL  0.0

    uint li_N = 0, li_Bar = 1;
    double ld_ZZ = 0.;
//----
    while (li_Bar < Bars - 1)
    {
        ld_ZZ = iCustom (_Symbol, _Period, "ZigZag", /* внешние параметры индикатора */, 1, li_Bar);
        if (ld_ZZ != ZZ_NULL)
        {
            li_N++;
            if (li_N >= 3) break;
        }
        li_Bar++;
    }
    double ld_Price = High[li_Bar];

правда, перед этим нужно изменить в коде ZigZag количество отображаемых буферов с 1 на 3:

#property indicator_buffers 3
 

спасибо за ответы,я к ним еще вернусь :) сейчас проблема такова

http://clip2net.com/s/j7xvk9

не могу понять почему не модифицирует ордер,а тупо открывает новые отложки

 
Petiyashaket:

спасибо за ответы,я к ним еще вернусь :) сейчас проблема такова

http://clip2net.com/s/j7xvk9

не могу понять почему не модифицирует ордер,а тупо открывает новые отложки

 
evillive:спасибо что показали :)
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);           //верхний фрактал
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);         //нижний фрактал
//----
  if(Up>0&&Down==0&&Volume[0]<2) //если верхний есть а нижнего нет то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если цена позволяет выставить отложенный ордер то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {
        for (int pos=0;pos<OrdersTotal();pos++) //     скопировал эту строчку хз откуда ибо не понимаю грёбаный счетчик :) тут видимо и косяк
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); // ищем текущие ордера
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)// и если все условия совпадают то:
          {
          OrderModify(OrderTicket(),Up+5*Point,Up-sl,Up+tp,0,CLR_NONE);//переносим байстоп на новый верхний фрактал
          }


 
Petiyashaket:
спасибо что показали :)
Жалуется-то на что в журнале при модификации? "Тупо открывает новые отложки" потому что ограничения нет никакого, зато есть OrderSend.
 
Petiyashaket:

1) Любая стратегия должна быть определена на количество одновременно открытых ордеров. Соответственно, прежде чем открывать следующий ордер, нужно проверить сколько их уже открыто.

2) На одном баре не могут быть одновременно UPPER и LOWER фракталы, соответственно, проверка

    if (Up > 0 && Down == 0)

относится к категории программистского идиотизма.

3) Прежде, чем писать условия возврата значений буферных индикаторов, нужно точно знать какое значение является для него "пустым"? Вы проверили, что 0?

4) Конструкция

    if (Volume[0] > 2)

хоть и будет работать (в большинстве случаев), но является как бы попроще назвать - неестественной, так как является "вольной придумкой" разработчика и для работы трейдера малоинформативна. Альтернатива - отслеживание нового бара.

5) Надо начинать с азов, так как это:

    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {

говорит о том, что совсем не понимаете, что пишите.

Лучший путь к пониманию - это изучение работы чужих кодов и их модификация в своих целях. Удачи.

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