#algorithmic-trading #mql5 #metatrader5
Вопрос:
Многим это может показаться тривиальным, но, похоже, это берет надо мной верх, так как я не смог понять, как использовать ArrayResize()
(что, я считаю, очень необходимо) для решения этой проблемы.
В приведенном ниже коде я хочу указать ar[][2]
, когда isBody
это true
произойдет . Как я могу этого достичь?
int ar[][2];
void CheckBody() {
for (int i = 20; i >= 0; i--) {
if (isBody) {
int a = i 1;
int b = i - 3*i;
// how to populate ar with [a,b] when isBody is true in this block
}
}
}
Ответ №1:
Попробуйте следующий код, он запрограммирован для работы в качестве советника, но может быть легко изменен при использовании в индикаторе (вам придется добавить свой код для isBody
переменной).
#property strict
int ar[][2];
// ------------------------------------------------------------------
//| Initialization function of the expert |
// ------------------------------------------------------------------
int OnInit()
{
ArrayInitialize(ar,NULL);
ArrayResize(ar,1);
return(INIT_SUCCEEDED);
}
// ------------------------------------------------------------------
//| Deinitialization function of the expert |
// ------------------------------------------------------------------
void OnDeinit(const int reason)
{
}
// ------------------------------------------------------------------
//| "Tick" event handler function |
// ------------------------------------------------------------------
void OnTick()
{
for(int i=20; i>=0; i--)
{
if(isBody)
{
if(ar[0][0]!=NULL) ArrayResize(ar,ArrayRange(ar,0) 1);
int a=i 1;
int b=i-3*i;
ar[ArrayRange(ar,0)-1][0]=a; ar[ArrayRange(ar,0)-1][1]=b;
}
}
}
Комментарии:
1. Я попробовал код и получил ошибку компилятора,
’{’ - too many initializers
указывающую наint ar[1][2] = {NULL,NULL};
то, что я изменил егоint ar[1][2] = {NULL};
, и это решило проблему. После запуска кода я понял, что размер массиваar
всегда равен 2, независимо от количества элементов, которые я добавляю в массив.2. Я отредактировал свой ответ, и, надеюсь, теперь он должен сработать для вас
3. Извините, я давно здесь не был. Спасибо.
4. код , который вы предоставили выше, работает для
int
s, но когда я используюdouble
, первая пара двойников дает мне некоторое значение мусора. Я всегда получаю 4.243991582918676 e-314 и 1.152034350044175 e-309 для первой пары, что далеко не правильно.5. Я думаю, вам нужно опубликовать свой код в качестве нового вопроса.