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

 

Здравствуйте! Я сравниваю цены открытия 3 баров ( 3,2,1). Как можно не засчитывать бар где цены равны?

for( x=<3;x--)
{
 if( Open[x]==Open[x] )
  {
    x+1;
   }
  if( Open[x]<Open[x] )
   {
   ,,,
   }
 
skyjet:

Здравствуйте! Я сравниваю цены открытия 3 баров ( 3,2,1). Как можно не засчитывать бар где цены равны?

for (int x=1; x<3; x++)
{
 if(Open[x]==Open[x+1]) continue;
 if(Open[x]<Open[x+1])
   {
   //--- action
   }
}
 
Здравствуйте, помогите. Я играю на Н1, у меня есть индикатор Н4. Он правильно показывает. Но если запустить его в тестере, с визуализацией, к примеру в начале года, он показывает текущую информацию,которая сейчас на рынке. В общем не работает в тестере. Как сделать, чтобы он заработал. Или подкиньте на тему где это решается.
 
artmedia70:
Ну как пусто? Вообще ничего не выводит, или всё-таки в ячейках массива нули?


Вообще ничего..

Даже если зайти в Объекты, то там не вообще никаких объектов, кроме стрелок и трендовых линий..

artmedia70:

А зачем i увеличиваете в теле цикла?

и вот это: i<=p, зачем "или равно" ?


Это уже я от усталости накосячил. Исправил так:

for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }

Этот кусок кода сам находится в функции:

//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}
 
hoz:


Вообще ничего..

Даже если зайти в Объекты, то там не вообще никаких объектов, кроме стрелок и трендовых линий..


Это уже я от усталости накосячил. Исправил так:

Этот кусок кода сам находится в функции:

Перед и после

if (p > 0)

распринтуйте значение p

Неужели мне за вас писать последовательность поиска ошибок?

 
artmedia70:

Перед и после

распринтуйте значение p

Неужели мне за вас писать последовательность поиска ошибок?



Вообще-то да. В общем ситуация такая:

void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   pr("___p = " + p);   // Значение кол-ва позиций до if..
   
   if (p > 0)
   {
      pr("p = " + p);   // Значение кол-ва позиций после if..
      
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

Прогоняю так, тоже ничего не выдаёт на данном участке графика. Хотя в других местах принтовало 0, когда открыта было одна позиция, и она закрывалась по тейку сразу. Т.е. на данном участке канкретно косякова отрабатывает как-будто...

Вот скрин:

Тперь все эти значения принтовать?

p++;
ArrayResize(a, p);
a[p-1][0] = OrderLots();
a[p-1][1] = OrderTicket();

Вроде бы куда дальше уже. Ведь там всё понятно и обычно написано.

 
hoz:


Вообще-то да. В общем ситуация такая:

Прогоняю так, тоже ничего не выдаёт на данном участке графика. Хотя в других местах принтовало 0, когда открыта было одна позиция, и она закрывалась по тейку сразу. Т.е. на данном участке канкретно косякова отрабатывает как-будто...

Вот скрин:

Тперь все эти значения принтовать?

Вроде бы куда дальше уже. Ведь там всё понятно и обычно написано.

Вы понимаете и видите, что содержится в вашем массиве сразу после его "заполнения" данными об ордерах? Нет. Не знаете, а только предполагаете. РАСПРИНТУЙТЕ содержимое всех ячеек массива, не вашей pr(), а стандартным Print() и потрудитесь заглянуть в журнал тестера и увидеть, чего ж там у вас в массиве находится, в каждой его ячеечке, сразу после его заполнения. Вот когда точно будете знать, что содержание массива соответствует вашим представлениям о его содержимом, вот тогда и принтуйте его своей pr(). Если она вам выдаст не те же результаты - дело в ней, в вашей pr(), если данные будут совпадать, значит ищите ошибку дальше, на следующем этапе.
 
В журнале есть ошибки, связанные с лотностью (OrderSend error 4051). Решу этот вопрос. Может поможет. А дальше будем тогда смотреть.
 
hoz:
В журнале есть ошибки, связанные с лотностью (OrderSend error 4051). Решу этот вопрос. Может поможет. А дальше будем тогда смотреть.

На танки посмотрите, перегрузитесь, может поможет... :-)

П.С. Я щас - по доброму.

 
Такая задачка - есть одномерный массив, размер которого может изменяться.
Как в цикле перебрать все возможные комбинации элементов массива друг с другом?
Порядок элементов роли не играет, т.е. 123==213==321..

Вот пример для массива с 4-мя элементами:
[4] <=> { 1 2 3 4 }

1, 12, 13, 14, 123, 124, 134, 1234, 
2, 23, 24, 234, 
3, 34,
4