Сравнение строковых значений - страница 3

 
xrust:
А не могли бы вы на примере этой же функции показать. как правильно расставлять скобочки, провести мастер класс, так сказать, для начинающих.

Нашли лопуха =)

Мог бы.

    int    total    = OrdersTotal();
    int    ok       = 0;        // счетчик ордеров
    bool   op       = false;    // флаг наличия открытого ордера
 
    for(i=0;i<total;i++)    //проверка на наличие сработавших ордеров
    {
        if ( !OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
 
        if ( OrderSymbol() == Symbol() )
        {
            if ( OrderType()==OP_BUY || OrderType()==OP_SELL )
            {
                op=true;    //если есть сработавшие ордера то новых не ставим 
                break;
            }
            else
            {
                op=false;
                ok++;
            }
        }
    }
 
    if(!op)    //если нет открытых ордеров
    {
        if(ok>0)    // если есть установленные отложенники
        {
            for(i=total-1;i>=0;i--)    //Циклично перебираем ордера от макс. до нулевого 
            {
                if ( !OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
 
                if (OrderSymbol()==Symbol())// Если ордер нужной нам пары
                {
                    if ( OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP )
                    {
                        magic = OrderMagicNumber();//Считиваем магик
 
                        if ( magic != -123 && magic != 123 && magic != 236 && magic != 764 )
                        { 
                            Print( "magic != -123 && magic != 123 && magic != 236 && magic != 764
        !real magic = ", magic, "!" );
                            del( OrderTicket() );// то мы их удаляем
                        }
                    }
                }
            }
        }
    }

Ошибки:

1. Цикл for(i=total;i>=0;i--) и выбор ордера OrderSelect(i-1) в нем.

2. В этом же цикле: если if (OrderSymbol()==Symbol()) то выполняется ТОЛЬКО ОДНА СТРОКА КОДА: int tickdel=OrderTicket(); Следующие строки выполняются при любом символе ордера.

 
Спасибо изучаю, а как у вас получился разнос по горизонтали, я когда вставляю из буфера то все строки подгоняются к началу строки
 
xrust:
А не могли бы вы на примере этой же функции показать. как правильно расставлять скобочки, провести мастер класс, так сказать, для начинающих.
У меня получилось вот так
total = OrdersTotal();
int ok = 0;// счетчик ордеров
bool op = false;// флаг наличия открытого ордера
for(i=0;i<total;i++)
  { //проверка на наличие сработавших ордеров
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol()==Symbol())
       if ((OrderType()==OP_BUY)||(OrderType()==OP_SELL)){op=true;break;}//если есть сработавшие ордера то новых не ставим 
       else{op=false;ok++;}
  }
if(!op)//если нет открытых ордеров
  if(ok>0)
    {// если есть установленные отложенники
       for(i=total;i>=0;i--)//Циклично перебираем ордера от макс. до нулевого 
         {
            OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);по позиции из смиска отложенных или сработаших
            if (OrderSymbol()==Symbol())// Если ордер нужной нам пары
              int tickdel=OrderTicket();// Заносим тикет в пер. для поледующего удаления
              magic = OrderMagicNumber();//Считиваем магик
              if ((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))//Если ордер отложенный(мы работаем со стопами)
                if(magic == -123)//А здесь if(magic != -123) Если маг.не(-123)
                  if(magic == 123)// должно if(magic != 123) Если маг.не( 123)
                    if(magic == 236)// быть if(magic != 236) Если маг.не( 236)
                      if(magic == 764)// так if(magic != 764) Если маг.не( 764)
                        { 
                           Print("1.0");// МЕТКА ДЛЯ ТРАССЕРА!
                           del(tickdel);// то мы их удаляем
                        } // А ПОЛУЧАЕТСЯ НАОБОРОТ!
        }
    }
До функции del() программа с такой логикой никогда не дойдет
 
Vinin:

До функции del() программа с такой логикой никогда не дойдет

Ну, там имелось в виду что магик != всем перечисленным значениям.
Тогда она дойдет, но при определенных обстоятельствах - без переменной tickdel.

 
xrust:
а как у вас получился разнос по горизонтали, я когда вставляю из буфера то все строки подгоняются к началу строки
А кнопочкой пользуетесь? Какой броузер?
 
Именнно ей и пользуюсь броузер седьмой
но если вставлять из буфера через contrl C\\contrlV то все строки в коде подгоняются к началу, пропадают все отступы
 
komposter:
Vinin:

До функции del() программа с такой логикой никогда не дойдет

Ну, там имелось в виду что магик != всем перечисленным значениям.
Тогда она дойдет, но при определенных обстоятельствах - без переменной tickdel.

Ну как же прога дойдет если по дороге взаимоисключающие условия ?


if ((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))//Если ордер отложенный(мы работаем со стопами)
if(magic == -123)//А здесь if(magic != -123) Если маг.не(-123)  <= Этот иф относится к предыдущему и выполняется если ордер отложенный
if(magic == 123)// должно if(magic != 123) Если маг.не( 123)  <= Этот иф относится к предыдущему и выполняется если магик == -123

                                                                                       следовательно магик при попадании сюда никогда не равен 123 и результатом всегда есть фальш

Остальная часть никогда не выполняется поскольку следующий иф также выполняется если предыдущий дает истину ( а он всегда дает фальш)

if(magic == 236)// быть if(magic != 236) Если маг.не( 236)
if(magic == 764)// так if(magic != 764) Если маг.не( 764)
{
...................


Успехов.


ЗЫ. Вы совершенно верно заметили: все дело в логике: комбинировании логических условий (и расстановке скобочек в том числе).

И еще логика Вашей проги на соотвествует логике исходной. У Вас, судя по всему, реализовано то, что пытался реализовать автор.

 
VladislavVG:

Ну как же прога дойдет если по дороге взаимоисключающие условия ?

Я же написал - там везде должно быть "!=". И автор имел в виду именно это (он говорил).

 
komposter:
VladislavVG:

Ну как же прога дойдет если по дороге взаимоисключающие условия ?

Я же написал - там везде должно быть "!=". И автор имел в виду именно это (он говорил).

Я имел ввиду код исходный. Да и Vinin приводит исходный код в пример о котором и говорит, что этот код до вызова функции дел не дойдет. Видимо, просто не понял о каком коде Вы говорили.


Успехов.


ЗЫ Сорри - действительно глянул невнимательно.

 

Предлагаю конструкцию по проще


int ArrayFibo[]={23,38,50,61,74,100,123,138,150,161,174,200,223,238,250,261,274,300};
if (magic!=ArrayFibo[ArrayBsearch(ArrayFibo,magic)]){del(tickdel);}

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