Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1204

 
Mihail Matkovskij:

Но чтобы данный код можно было использовать в реальной торговле понадобится еще много доработок...

Да понимаю. Вряд ли вообще дойдёт до полной автоматической торговли. Познание языка вызвано необходимостью тщательно проверять свои торговые идеи на большом промежутке времени с большим колличеством сделок.

Без тестера невозможно качественно проверить идею, что и печально. Так же оптимизация параметров стратегии. В тестере очень упрощается процесс.

 
Alexey Viktorov:

Вот уж не думал что придётся вам цитировать документацию…

... время закрытия ордера равно 0 ...

Спасибо, Я так-же не думал. Мне не часто, но приходилось делать выборку по тикету и проблем никогда не было, видимо потому, что проходил в цикле по тем, что в рынке.

 
Igor Makanu:
Alexey Viktorov:

Спасибо!

 

Здравствуйте. Пытаюсь найти ошибки вычислений в индикаторе. Вывел значение Close[0] (используется далее) через алерт. Выдает число с 4-мя знаками после запятой, у брокера пятизнак.

Alert(Close[0]);

Что я делаю не так? Спасибо.

 
Oleg Bondarev:

Здравствуйте. Пытаюсь найти ошибки вычислений в индикаторе. Вывел значение Close[0] (используется далее) через алерт. Выдает число с 4-мя знаками после запятой, у брокера пятизнак.

Что я делаю не так? Спасибо.

А откуда вы взяли Close[0]? Было бы интересно взглянуть на исходный код, поскольку вы находитесь не на форуме экстрасенсов... :)

 

Здравствуйте, помогите найти выход - задачка!

#define          Pmax 1200   //размер массива по периоду
double           ExtBuffer[];

//+------------------------------------------------------------------+
//| Структура для хранения данных Фибо                               |
//+------------------------------------------------------------------+
struct PosFib
  {
   double            period[Pmax]; 
  };

int OnCalculate(const int rates_total,....)
{
   PosFib BP[Pmax];
   
   for(int p=2; p<Pmax; p++) // отбор по периодам
      for(int b=prev_calculated>Pmax?prev_calculated:Pmax; b<rates_total; b++)
        {
         BP[b].period[p]=sm.d[p-1].m[b];
        }

   return(rates_total);
}

При компиляции выдает предупреждение - the size of local variables is too large (more than 512kb)

На сколько критично это предупреждение?


 
Top2n:

Здравствуйте, помогите найти выход - задачка!

При компиляции выдает предупреждение - the size of local variables is too large (more than 512kb)

Подскажите пожалуйста как обойти ситуацию! 

int OnCalculate(const int rates_total,....)
{
   PosFib BP[];
   ArrayResize(BP, Pmax);
....

ЗЫ: в индикаторах удобно использовать вспомогательные индикаторные буфера для расчетов ( INDICATOR_CALCULATIONS ) , если задача позволяет лучше используйте их

 
Igor Makanu:

Благодарю

 

Всем доброго времени суток!

Вопрос по MQL- 4.
Есть функция  ArrayBsearch( S_L,Ask,WHOLE_ARRAY,0,MODE_ASCEND);. Она ищет элемент предварительно отсортированного массива. Если массив двухмерный , то эта функция ищет элемент только в первом измерении.

ВОПРОС. При помощи какой функции или языковой конструкции можно найти нужный элемент массива во втором его измерении? У меня двумерный массив состоящий из двух строк

10,9,8,7,6,5,4,3,2,1

10,3,8,9,2,1,1,8,8,6
Как мне найти элемент массива с нужным мне значением в нижней , а не в верхней строке? Ведь   ArrayBsearch( ) ищет только в верхней строке.
Спасибо за помощь.

 
ANDREY:

Всем доброго времени суток!

Вопрос по MQL- 4.
Есть функция  ArrayBsearch( S_L,Ask,WHOLE_ARRAY,0,MODE_ASCEND);. Она ищет элемент предварительно отсортированного массива. Если массив двухмерный , то эта функция ищет элемент только в первом измерении.

ВОПРОС. При помощи какой функции или языковой конструкции можно найти нужный элемент массива во втором его измерении? У меня двумерный массив состоящий из двух строк

10,9,8,7,6,5,4,3,2,1

10,3,8,9,2,1,1,8,8,6
Как мне найти элемент массива с нужным мне значением в нижней , а не в верхней строке? Ведь   ArrayBsearch( ) ищет только в верхней строке.
Спасибо за помощь.

В MQL4 только таким способом:

//+------------------------------------------------------------------+
//|                                                  FindInArray.mq4 |
//|                                       Copyright 2020, © Cyberdev |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev"
#property version   "1.00"
#property strict

#property script_show_inputs

#define size1 2 
#define size2 10

input double value1 = 3;
input double value2 = 8;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() {
  double array[size1][size2] = {
    {10,9,8,7,6,5,4,3,2,1}, 
    {10,3,8,9,2,1,1,8,8,6}
  };
  
  double bufer[size2];
  
  int i;
  
  int index;
  
  string str;
  
  i = 0;
  for(; i < size2; i++) {
    bufer[i] = array[0, i];
  }
  
  ArraySort(bufer, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  index = ArrayBsearch(bufer, value1, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  str = "";
  
  i = 0;
  for(; i < size2; i++) {
    array[0, i] = bufer[i];
    str += (string)array[0, i] + ((i != size2 - 1) ? ", " : "");
  }
  
  Print("array[0]: {" + str + "}");
  
  Print("value1 array[0]["+(string)index+"]: ", array[0][index]);
  
  
  i = 0;
  for(; i < size2; i++) {
    bufer[i] = array[1, i];
  }
  
  ArraySort(bufer, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  index = ArrayBsearch(bufer, value2, WHOLE_ARRAY, 0, MODE_ASCEND);
  
  str = "";
  
  i = 0;
  for(; i < size2; i++) {
    array[1, i] = bufer[i];
    str += (string)array[1, i] + ((i != size2 - 1) ? ", " : "");
  }
  
  Print("array[1]: {" + str + "}");
  
  Print("value2 array[1]["+(string)index+"]: ", array[1][index]);
}
//+------------------------------------------------------------------+

Результат:

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: value2 array[1][6]: 8.0

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: array[1]: {1, 1, 2, 3, 6, 8, 8, 8, 9, 10}

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: value1 array[0][2]: 3.0

2020.07.08 09:25:41.426 FindInArray AUDUSD,M30: array[0]: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}


Файлы:
Причина обращения: