Olá, não entendi pq o parametro de "chegada" do eixo Y na função fillRect() é sempre 133? então não seria para nao desenhar nada, jah que ele começa em 133 e termina em 133? e no caso do amarelo, é pior pois ele começa em 266 e termina 133, então era pra atropelas as outras cores... nao entendi... aqui vai o modo como fiz
<!-- bandeira-alemanha.html -->
<canvas width="600" height="400"></canvas>
<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
pincel.fillStyle = 'black';
pincel.fillRect(0, 0, 600, 133);
pincel.fillStyle = 'red';
pincel.fillRect(0, 133, 600, 266); // aqui está 133 no de vocês, ao inves de 266
pincel.fillStyle = 'yellow';
pincel.fillRect(0, 266, 600, 400); // aqui também
</script>