Oi Jacson-Barbosa
O problema aqui está no modelo de execução entre o backtesting (em mercado fechado) e a automação (em mercado aberto)
Em resumo, em mercado fechado, o código é reexecutado uma vez por barra, enquanto em mercado aberto, o código é reexecutado a cada variação de tick (preço ou volume), isso quer dizer que o seu contador, com a instrução x := x + 1
irá incrementar em 1 a cada variação de tick, por tanto, após 11 variações de tick e não após 11 barras ou períodos.
Pra mais detalhes sobre modelo de execução, tenho esse artigo na Wiki.
Pra realizar o que você deseja, existem várias alternativas, mas um exemplo, poderia ser usando a função CurrentBar pra armazenar na variável i
a posição da barra no momento em que o sinal ocorre, e depois testar para que enquanto a posição atual for menor ou igual ao valor de i
mais a quantidade de barras que você aceita, continuar enviando a ordem de compra (nesse exemplo uma ordem limite, mas não precisa ser).
Note que nesse exemplo eu usei 3 barras, mas no seu caso seria substituir por 11.
var
sinal : booleano;
i : inteiro;
Inicio
sinal := fechamento > abertura;
se nao(HasPosition) e sinal entao
i := CurrentBar;
se (CurrentBar <= i + 3) entao
inicio
BuyLimit(minima);
fim;
Fim;
// Schiller