Назначьте прошлые значения массива, используя метод массива в Amibroker - PullRequest
3 голосов
/ 02 марта 2020

Я хотел бы назначить последние 8 баров массива BB со значением false, когда текущий бар массива AA равен true. Это код, который я написал;

for( i = 8; i < BarCount; i++) 
{
    if (AA[i] == True)
    {
        BB[i] = False;
        BB[i-1] = False;
        BB[i-2] = False;
        BB[i-3] = False;
        BB[i-4] = False;
        BB[i-5] = False;
        BB[i-6] = False;
        BB[i-7] = False;
        BB[i-8] = False;
    }
}

Код работает нормально, но использует подход l oop. L oop Подход медленный и не подходит для Amibroker. Как этот код AFL, использующий l oop, можно преобразовать в более быстрый и элегантный подход к массиву?

Я использую Amibroker v6.3

1 Ответ

2 голосов
/ 04 марта 2020

Почему вы думаете, что для l oop медленный и почему он не подходит для Amibroker? Amibroker не хватало этой возможности, и она была добавлена, чтобы вы могли лучше контролировать массивы, как вы делаете в своем коде. Альтернатива была намного сложнее из того, что я понимаю. Это было до моего времени с amibroker, хотя. Но если вы хотите что-то, что выглядит красиво, попробуйте это.

BB_Initial = true; // Your initial BB array.
BB = IIF(BarsSince(Ref(AA, 8)) <= 8, false, BB_Initial);

Но разбейте это на каждый шаг

BB_Initial = true; // Your initial BB array.

BB_Ref = Ref(AA, 8);
BB_BarsSince = BarsSince(BB_Ref);
BB_IIfCondition = BarsSince(BB_BarsSince) <= 8;
BB = IIf(BB_IIfCondition, false, BB_Initial);

Это пять массивов для ваших двух. Но я не могу сказать вам, насколько эффективно Amibroker обрабатывает этот синтаксис для того, что вы делаете. Надеюсь, поможет.

...