0110100111011001000001001001001010011100111001110001110000101100110010101000001000110100001000111101000100101111010011000000101011101101001110111010110010011011000010001110111111111101111110110011100100011000010011111101000000110010101101110011100100100010001101100011110110010011001001111001000100110000111101111111000011011111111100101000111000100100011000111110100001110011101000011100000010101101 1111110000111001111000000011010110110001111011000001111111111001000101000100110001111111100100100111010010011010101111000110011000101101000000111110011111010011101011010010001111110101100101010100001010110001000001001000110101110111000000111001100110100101110010100010101101010000011011101101010101111110111011001010100110011010000011101010100000001110001001001100111000001010011111001001101011110111 0010010011100010111100000101110101111111000000010111111001110010011011011111010010001100100001010110010110111010110110000000011111011010000101010011110010110001111011010000101010100011100011100111101011110000000100100000101100100110010100111001010000011111111011100001101000000010010101010001100001110011110101000111001101100001111110010000011010011100011110001001110100101111111100111101100000111000 0000111001110000100010111011010101001010100001011101101011001110111010000110001100110000101001011000000110111101000011100010010000111110011101100000010011000001100001111101000111101100101110001010010111110000001101000110001010001110010101110000000011011010001000101010010100111011010111100110110101111101010011111001110001101000111000000010111111101111010001111111011110111010001011010011100110010011 1110100110101111101110011011011011100101010011000101010111110000001100100001101011100000100000001011000111111110000010101010111000010110100000110111011011111110011111101000001010011011011000110111101001001110000001101100101101100101110010011011110110010100101111110101010111011011110111101110000011010110100011001010110000111111010111000000100111010010100011000111001010100101011000100000010010101111 1011111110100101001110000010100101011000000000110000110010100001111110101110001010001011011110001110100010111100010110101110100100111111101011110101111101111101110001011101100000000111101101111101111001001011100100001010110011001011100001000010101001000001010000010010101100011111100101010000010100100100010110000010011010100000011010000111101001111000111101111010001110101110011111101011100011111110 1010101001010010111001100100111010011011001110001010011011110110111100101101000001100001011101001101100101101011001101000011101001100000011010011101101100011100111111110010000111000110101001010010101100010011010100010101101000110100111101011011100110001000000001011011001100100001000100000100111010001111100000011100110001000000010100101010011101110110100110010111100111100010000110011010011110011010 1101111100001001011010011001101000110111001010010100001110101110000011001101101011001000101010111111110101110011101110000111111000100001100011000000000000101101000101101000011011100111111011010101111011110100001100001101101110001111101010111010010000100010101011001001000111001100001011010001001100110111010010010001111100110110110111001110111111000001011000001111000110011111011100001110000101111111 1011101100000111000111110100100001110101000011001000111111110111001001011000000000110011011111111011010000001101111010000000110110111100011101111111010110110001011100111111000100100000110011011010001110111000101010010010111100101111000100101011000111111110111110001011110110111111101001100111001000000001100011010001001000010011011111001111101111001101011010011011011110100011000110111101000101011100 0011110111101001100101001011011101100100010101110111111000110001001011100100010001000011111001110001111100000101000111011000100000100101111101010010101001111010000111001010101000110101001100100001100001001001001110001110001010110100101101011011000111101011001110111111100101001001001011000100010011111111100011000100101100000011100000011000000011111101111001110010101110010010011100111000010000100000 1111111100010000100100110011110110100011010100111000100100110110011101000111101011110010000100010100011110011100010101111001011101000110001101001110100001101110001010011101011101011010101000010000100110100100001000111000000011110000110100001001010000011011000010110101111000011111001100101001010101010111101111000001000101011010101000100101000011111101000010111010111000010110110001011110111100100100 1110111010010000100000101010101001100110010011101110001010011110110010111010010111010011000010111000101011111001011100011000010011010111011110001100100001001000000001000000010100101100110000111010111000110100101001110100001001010100010011001100110000010100011110100000110011001011110111000001111011010101111010011101010100000100110101010000101100001001100111100110001001010000001100100111000111101111 1111011000100111010001100110010001001110101001000010101101111001010110000000000000111011001100100100100001101011111110001100010010101000110001001000101110101010101011100101111001000000101011011110110100110110001101100010011011001010101111000100101011001110000011001101010010001010010011100011001010101101010100100110101100111001110100101101000000111111010010110110010101001010000101101000110101110000 0100001000011110111010101111111101100010100000000111000110111110011101010010001100001011110010110011001101101011010001110110100000011010110000000110010100111110110110010101011111010101100111001000110100100111011110110111001010111000011111101010110010111101000010101101001000101000001010000000100111011111110100000111001100100001110001100011000011111010010110000101111000110111000001010001100010100101 1111111011110111000100110111100011010110000110000000010101100011000011011000001101011101100000011101100100000010011110011111001100001101001011010011100001100010110001111010011001011001101011010101000001011100001110000100011011011111000111010101110100001001011110010000011011011001000001100001110011110001001111010111111011010100000000111010001111101000011001001111011100111011011111110110000101100100 0001011100010101101000100010101101011001010010100100001001100000111011101101111110000110011001011100101011111000110011000110010100000010011001110011101111110110010111111100011001100001010000100101000001101000011000111011101100000110101101101011011000100100101011101100000011000001001010100100001010010111001011111011100010100001111010111110111001111001111010111010111000001010100101110010100000100010 1100011111101101010111101101101110111010110010000011000000100011100111100101011111100100000001010010000010011101101111101011100001100010010000011000111000110001000000010101111010011110001000101001111010010001001011100010100011101111001001011001010101101001010111011110001110111101011001110110100110110011111100011111010010011110100100100001000010001101100000011111110010010001001101100011111101000011 1001010110000110010000110101100111001000000100110110110101101110100001010011001010011111011111110110010011010001110001000111100111011000110010101010001011111100111001001010111101001100011010101100010000011100111011100110111100000010100010101001011001110011110011010000000111110001010010001011000101101111011010100001001010101111001101001010010100111111000001101110011100011010101100101010011011001110 0111010110011100110110001000011111101011110111011000010101001011111001101000110110010110010010110101001100111000111011010000100000101010100101010000110011111001000010111110001111100111010111011000110100111101011101101010000000110100010010101101100111110000000001011111110010111000111011101101011111111011110010010011010000111010000011010100111011111110100100100000110100000011000010101001111010110001 0000000101000010001111111110110000111101001100010101101101010000100001100000100101101111010011011001000001000111001100100101101000111101111101011111101101000110011000010011110110011010100010110010011111010101100111101001000011000011001001111010000101011011011111011011100001011100011010111000011000100000101111110111011101010001001101111100100000110111000000101010111010101111010011110001010111010110 0011110111100000000011011101101111000110100101000101011000010111001100001110001101000111001110101001111000111001110111010000100010110011111111011011100000010000110111111100010110000111001110011100111110110001111000101010011001011101101111111000000001110000100100010000111001010000111111001001001100101111110001110101001010001111101010111111111011001111000001100101100011100000011111111000100000001111 1011100010101001001000101100011110101111001101101010100010110110000100110000100011101010011011000110110000111110111100010011101110101011011010011111100010101000010011101110110100000111010011011100001111000011111000101000011100110011110100111101000001111100000001100100110100000010101101010101011001001101010001100000111011001100100101101111111011000101010110101100111011000001100101110111000011101001 0111101100111110000000001101001110001000111001111011001101011010011001000100001111111110110011010101010010010110011110000101000011011010100011100101010111110111011101100111001001111000110111111010100101111001110110011000000001011110011110001110010110111011011011111110101100000000110001111100010010101010000111100001010000101000000000100111000110010111110011010100000011110001010100000011010010101111 0110111100100000100101101001100011111000000010011101011110100111100010001100010000011100001101011000100100011000111000001110010000110100111110111010011110000101101111010001101010000001100011001011100111100011001101110000100011011010010001010100101100101000110110110001100110011000011101111100000010101011111101110001101010101111101100011000011101011001100011000000010010110010010010111110111001110111 1011101110011110100011000000101111000100001111000101111111110001000011000111011000100101010010110011001000001110101010110011001000110101111111011000001101000001111001101111100000001101100001010101100010100100110000100010100001011110111011000000000011010000011100001111101010001000011100100111110010010010010010010001011000011001000001101011011100111101000100010100110000000100001111100010001001111011 0110010101110111110111111101100011101111011111110011101001100001111001001101000011000101000100010000000101001000111100101010111011011001011010001000011110011101001011101111100101110011010100100100001010110101111000000010101100101001111100011001011010010110000101101110111111110010111010010101110100000010011010010011000010001010100011010000111001000101011001111111111000010010000001000101100010010011 1010110010110011011000001110000001100111110100110111001001010000001010110111001001100000000001111111000100011111000010011001010000101111011011000000000101011111100001100111010001001101011110001100111110110110110000010001100000100000011001010000011011111000111101110110110000000000011000101101111111001010011110000101000000000100101001010001111110000010111100000001001111100111111100100110010001000100 1101111010101111010001001100111011010111100010101110000111101101011000100010110101001010101001110101000101100011000101101010001100000000111111101011001111111001100111101011000011111100111010110001011110100101010011101010101000100101110111110010001001000000000001010000100010101000101110101100110100101000101010010110011011101000111101010110001001010001011001110001110101110101010100111101111010101011 0001111101010010010110000011011101010011001000001100000001100001000111111111101110111100100101010010110000010111001110101110100111111001011110101011010011101101001001110010111101101100110010000100001001011101000110110100010100001101010000110100111111101101111011100010110101110110010100100110000101001000111110000111101101011101001010010100111011101011010111000100011110011011010100111111101011001001 1011011110001011010010011000101101111011011101001110010010101101110100011110000101101101110110110100100110011100100010010001001011100100101101100010101111000111111010110001011111111110010001100111011000001000100110000010100100001010101011000111011100110101001110100100110001110011100101111000000111110111000101011110000101110010011101110101101001100101100010100110010010000011101000000001000111101001 0100101011111011110100001011010110110010111100011110110101100100000010110101000011011111010000011000000010110110010101010101011011010101100110010011110111010011111001111110010001010111010110010110110111001000101110011111010110111111100101101001011001110010100000010001011100010010000011110101001000111100010010001101000000000001000010000000101001010001011110010000111100110111101111101000011011111010 1011000011011100000111110100001010011011110110001101111000100110000101001010010101000100110100011101100011010001110100111000011010001111101100110001101110010100110100100001101111110101100001011100000101000110110000001100000010110010100100000001010000110011100111001010111010110101100001001000110100011011010111101001011011000110000101000001001011110010101001000110000110101000001101011110100001100001 0101010010000000111111011001100011000111010111100001110100100011001010101111111100001100101000001100000101001100010001100001100110010100010110111000010001101000100111111111011001100000011100010000011101101100001000011011101011111110011000100100100011110110011000011011011101111101000110101010100010111010010101101111010011101011110110100111101110011011110111111101001110100110110001100101000010011110 1100111100101101101011010101111010101000111001001000100111110111110010101011100101001001000001000000001101110001100101001000100000010010100001011010001100001001010111000100100111100101011100001111110001110001100110110011001101001010101011010010101001110111010101000001010001001110110100100011110100111111011100101000010010111000001110001100110100101111011111010010000001100111011110110111101010110111 1000111010000010001110011100001010110111111101100010000101110000101101001100100101000100011101100100011000000010000001010100101011100000101011111001011110001110011000111100111110101101001000011100011010001000001100010001000011011000101010101010111110110110001100100111000011010000100101001010100100010101010010101010000101101001001010110110001000100111111011100111010001010111001010101000000001101010 1100000101100101010111010111011000001110111011111011011000000101000010101101001110011011100000101100010001111000011000001101101111010000010001101100011010010001010000010011100001110000011011011110011000100000111001001101100011111001010010110010111111011110010111010110000100101111010011011011010001110111011101100111010000011000010110011011111001001100100000010001111010010111000101100011000000010010 0101001100000111110110100101011101110001000101011110000001000001110111110111011101001110010000011000000101000100100110111011001100000011000011000001100001100000010001110110000110101111110110011011101101110011101111000100111100111011001010010111010011111010001101111011011000100011000100100101010011110110110101110111010010110011110100000111011001010100101010100100101111110111110101010011101110101000 1111011100101111010111010101100011110000000100011100110110001001110110001011000111110010111101011101000000010111100111000000110111000111001110011010101011110011011111011001010010100011000111111110001111011010010000010011110101101010010100001000110101011010010011101100101111010011001001100100010010010110010011101100110000011111100001011011101011001000001101110111111100011000101000110000100001010000 1001101110010001101011100011101010100101011101101011010100111101110101100110111110011110111000111001101000000111100001000000001111100011001111000001000000100100001101010101110111101011001111010111001010100101111110101010000101000001010011000011000110011111000000101111001111111010010010000001101100001111110000111100110111110110111000011010001001010111111111010101000011101010011000101110010010001011 0010110000110111001111111101101001110011100111010111101000000011101010101101000011110110000001001100101011111011000011000100010110010000010110111111001000010011000010010110011110101010001110011000011101010101101101011101000011010101111011001011101100010010110100100010000111101001101010010000100000111011000000000110001111000101010110001111011010000000110010001000011001011111010000110101110010010100 1010100111000011111101100001100110100101010110010100001000110110001000010011110001000010000001010101010110111000111010011001000001101110100111100100011110011001010100100000010100111100110100011101011010010100011100010100001111100011001100110111100100000111100111011011001100101101100010110011111101110111001001111110000100101101110111001110000101100001011100110110101110001101100110111001100010010101 1010100001001110000101000011001110101110001111000101011001011101100111001111101110101000000111011000101001000001110000010010100011001100001100111110111100010000011111111101010001101000111101111011011001000100110100000011000000111110000001011111100111000110000011101011111101100010011001001000101110000111111100000011001010010011000000110100000011110100010000111111110011100110000101000010101001100111 1011011100111011011101110110101011101010011110101100101011110010110101001111110010011001011111000000010100010100011000010000100010111010101000110000111010110101100101010000011000000110011010000101100001100101101001011011000111111010100100110100010111010100011100000000101011010001100001101100100111000110011011001000110001000011001100100101110010010001001001011011010000111010001011001100100110000110 0001110001000100010111001011000010100111000010000011111110000110000110101010110001110111111100110101101010101111111010111000010001010110000000111000111100001011001111100101001100010011101101011000111011100001001110110101100100110110001111001111001010001111111110101011101001100011101101011011100011101110001111110001010000000101111111010111111011011111110101100001100100000100001111011101011011100101 1010110001110001010100101110100000111111000101011000101010111001000010111100010100000101010111011111111100100110111010010101100001111001100100111111011101101100100110010101010101010010011000111111001111110111100010000111101010110100100001101011011001111101110101001011110100010111001010111100110110000000100100101000001011101110000011101100110011110111001001011101110010111001001001101010111010011100 0010111110100011101110111100010010011110000001000010110111101100101011110011111111111101011011000110010000010010010001100111101000110011011110100000101100011010100000010110111001000010001001101000101010110010010110110110010100101000111000000110000001110101111010110100011110011010010110000011111111111000011010000010010101001001000111010010111100101010011110000100000101100001100111011111011100110011 1101101001110010010001110011110001110101101001011111011101111110111110010101110001000110000110101111000111100011111101010110111101011011111101111010010001001111111000101011001000100110111000101000100011101001010111110110010000110011110001111011000001011110001011000010110111011001000101011011100101001111110000100001011110110111100111011010000101001111000110101001001000011001111001011100001111010010 1111100010101101111101110110100111111100010001011011100000101001011001111001001000100000010011101111000010010010000101001100001000110001101000001010010001100101101010111110001001101101000111001000100000100110110101101111110011101100111101011011110110010111111010111100000010010000111110001001101000000000111111000101111011000111001111011000100111010111001110001011100011100101000010100100010100101011 0110011101011110100110111010001110000110110100000101100110000110100111000100111110010001111010111001111111010111000001100000010110011010111011000101000010001001111111011001100001000110010010011100011110110010010110100100101111110111111111000100100110111111100001010110100110111110001101101011000001001101111001001011000000000111011010111000010101110100100101101110111100000000000010001110010010011010 0110001010100100011111010101100001100111000010111111111111000010111111111001011010111000110111111100100111101101100010101000001110111000000101101011110100000111100100011000111011100010111000111011110111011110010010011101111010110010011011010000000111100000000011000101010100001000111101011101010100100000010001011011000010111010101111011010000101011101000100000011100111000100011010011111001011011010 1000110111111010000100101100001111110011011101001010010100111011011110001101010011011000110100010011000110101100010011000100011010110010010011101111000001001101101110010000110001011000111011011011011000111110001100001011110111110110101011011001101111101010001001010001001100010011110110100101000111001010010010001101100001000110111001101110010000101001001111001101100100001000011001111101100110001110 1011010110010100001110001011110000010010001101001111111111011001110001111111100001001111101110001000010000100111001000110101010101101010100111111011101010000100001010000001111001100110011101100010000101111111011011110011011011101011000011111111001110101011100110010101000101110110110000010011100000110011100011000100000100111001101001011010011001010001111111101000001011000001101001011101011110011111 1111111000101110000011010101101101010101010000000000001011011111010101100101010100010101010010100100001000000011101000100111101001011001111000001110111011000111001111011011000001001010000110101101011011111010000011010001100100001000001001001100111001100001111101101110100001111000111010111100000100011010101010111010001111010111110001000100010110011100100110111100110110010011010110111010100011110101 0110000001100000100010110110101011100000100111000111101011111111011011010101111000000011110001000101101101110101010110111011001101001011100111111010000101010010010010000001100110010010111010011100010000011111110100101110010010110010110001001100011111101001010111101101011011011011111110011111100101010000011000111100110110101000110000111111001010011100011111101110101011110010110000100100101100011011 1011111011010010100010001011111110000111110010101111011010001001101111010000100011010011110111000001110001110010010001010101001111101000011110001010001101001001000111001011101000001011101000011111001010101110100101010010011000110110111000011010011110110000010011010001100000010100100100101000001111010110111101011111111010111000001101000110001100111000110010110100111001001011001110100100011101011110 0001111101010011010100111001010001000110011111000000101111001000010111101101110101000000111101110000011100001001101010000001001011000011011100100110111011000001101100111110010111001011001010001010011010010100001111110110100010100011100001011000101111000001000111111110011110100010010011111011110010001000010010100011001000011011100011000100101001111110100001100001001111100010000111100001100111111011 1100000011100111101010001001000000101011101010011111101001001111001100111011010001000010000100100101100101001001001010110010100101011101101011100110011000011101010010100010110000101100000110111011111001101000000011001111000001100101100010010110011001100110000110111000001111010001101110001100111011011101101010011101111100100110110100110111101011100110101001010111000101000110010110010110100110110010 0110001010011001010100011111011011111000111000010011000100100100010100101101000110110111111101101001011001110000101101001100101001110111001111000101111000110010011011001110110001101011110000101010111010010000011101101101011011000110100001010010000110010010000010000000101100111111110010010100010000001110011011010110100100011100011100101000111101000111010011011010011000011101100110100100011001001101 0110001000001110011000010111101001111111011110010101011000001111000100010010000101101000111101010111110011110101011010101110001001001110001000100110111101010111011010100111000110100101101011010000010100101001101101011101001100001100101100111001001110101101000010101100110111101110100001101011110001100001000011000001011001111110010010100101010100010111010111110001011000111001010101000110111110000110 0010001011000111000011001000001100001011010010100011001011010000110010111110000110111011101111111100010010100001110011100010100111111110111010101100011010010000011000000110001011010110110100100110111010001001110000111100010111000111100101100100101000110110011110101010101101001111001010001000111100001010010101100000001101110110110001100110011000101110100101010110011001100100110000100001010111001100 1110011000101001110101111010101001101110000001100110100100010010001010100110101110000000011000010111001100001110011000110110010000011001010000011011110010101101010010011101111000000101010110001000000110010011110011110100001001100010101001000011000111010101111101101001110101010111110110001000111110111110111100101010001010011001110011101000010001111011010111010110101100110011111001110111100101001000 1100110110101001011110101110100110001000000010100110001101101110110000111001100001110111001111000100111011001101100110001011111110000010100101101110100010100110101110010111010010101000011101101110110101111101010000010111101000100100000010001011101111101000101100011010110001101110101001110011010010111011110111110100001011000100100110110001011111001001011100111111010111000001000001000010111011110111 0110111010000111110011001111000111011000001100011100110011100100000111011101100110101001010111101111100110001000010101000101011001000001001101000000001111101110001100111111110110010111110010101011101101100001000011001110111000001011101100010101100110111111101010010011010001010101110011111100001110010110010110010100000100111100000011011000110001001110000111010110010111010001110110100010111101010001 0110111011111101110110100101101111011000000101000000110110100111111011100011010100001110100100111111110011110001110001011001111011110110101110011001010111011001010100110011011000110001100101101001011001110111000101000110100010001111111000010000101111001100000000111101111001011001011010000011001110111110000010001101111000110010100011001011001111000010010110100100010110010110100101100010100000011100 0100011101100010001000010001101010000000000010000011101110100110100001010110110100100100110000110001110000001011010111011110010100110100001011001111000111100000110011000111010110011001011100100110110101011110100100011111110010010011011011011011110101100100001010101000011001011101000001100110110011000111010011000101111111111010010000101011010011100111000100110001010011010001100001100101100111110100 0000111000111000101001100000011011011101001100011011001000101000101100101000000000100011111010100000011001011100111101010111011100100010110011111000000001111111100101110101000010101010000100101100011011011001111000000001100011001101110010100000111100100001011000100001001111010010011111010101101011000100101111101101101110010001111111100010100100001001010111100110110111110101100110101101111101010110 1000110010100101101110110110010001010101010111101111001011100111101000001010001011011100100010110110001001010010011101101010110011011000100110000001111111010000010000111100010110001100100010011001001000101011110101001101010010111011100000111011111111101110000110010011000110011101010000011110001011100001111000011100001000111100000100000000000000000110010100111101010110001110010001101010011101011011 1001110111011011100000001101101110000101000000000100011111010000001010101001110001000111001101111111000101101011010111000001001001110100100111101100101000101101010010111011111100110001010000110011001101100001010010011101001110000101110001010111101010101101100010111111111010110110000011100111100100111110111000101010001100001110001011011010101010000000011111100101001111100001110010100011101000110011 0011001111001110001111000101010011101001001101100011001000111001101100000010000010011010001111111101110000001100111000100110011101111111101001111100110001101111110110001001111001100010110111100001001111000111011011011100101010011111100011000110101001101010111001011110011111101100100110100110110011000100111000100000011101010011100111001110010001110110011010100010010001101001001000011101010100101101 0000010111111000001111101111101010111011101110100001111011001010101110110101001100101101000111101001001100111111101010110011100011111101000111101011100100101000100001011011101000111010011000001010110000000111010010111001001100011001011001110000111000001101111111111010011111000001100101110000100000100110100100111101000001111011011111111010110100000001010011101101111110111100101001110010010110100001 0100001100110111101101011100101010100101111000001111110000101101010111101110010100110101011011000010100100101110111111010010101011001101011110100001100011111111011101101101110111011011101011111111100001110000100010101101100101110101111110110011000101000001110010000110101101110011010000110101111110111101000000111011001110000001100110100000000100011001110110011101100011010100001110001000111011000101 0111111111101010111100110101100110011100110001011110010010010011001001011111110011010101001111000101011011000110110100100000111101001010011101110110010010100010011111001000001010010000111101110111000100101100000110001111010111101000010000100000000001100010001011010001000000000000010011001101111101001110111100011000000101110101111010111110101101010010000000010000111101100101011011011101100011101011 0110111100111001000011010110001000001100101011011010000001011111111001110000011001010101111001010010010000011011001101011111111000110101111110110100110000000110011101001100010000101011110100100000001010010011111111010001011101000000001010001001011101110010001110110101110100101001101000001101011101000101010111101100010101001010000010010100000000100000001000010001010101001011001111011111001010010101 1100111011100000010000001000100101100000000111001010010100000101011100011100000101000101100010101110011111111111000101101000101011100110100111010001111100000100001000101111101001001011011001110110001100010011001000010000101100011000001100001111101001001100111110011000010001000011001110111111111011101011001000010010010111110010011111000111010000000101100101011000100010010111101000011100010010010110 1001010001110111001001000100001101100111101001000011010110100111000011110010100111101000011110011101100101110111010101110101101011111110111001010100010101010100000110001111010010101000111101100111000100111101100011011010011110010110000010001110100100000110010111100000110011011111001011110010010001100110111110100100101110000010101011001111010001011000010001000111001111111110110100010110000010001001 0100001110110000011100011001010011011110110101001101000111110010011010010101100110101000111010010110001001100111001111100100101010011100011100000000001100001000001101101101000101110011011011000001001111010010011000001011111000100001100010011001000001110101000000100000011110111000001010110010001001101000100100000100101110100110111111001110101100111110010011101101110101001100111011110110000110111111 0001101100010010100100110111001100000001001001110010110010101001101011010000010101111001100100000010110011101001101001100110101101110101001101110100011110101011111110111011001100010000010101010110111010110001011100110111100011000100011100110001110100010101000010000111110010101111101111001000101010011011100101110110100001110111000001100101011000110100111001111010100010010011011111001011010010011011 0010110000000101010000011101001101000101011100101101011000101110111111010000101010111110010101001010011011000011010001111011001001101100100111011001100000110111100001101101100110100101001111010111101000101111001001001011111111000000000111001101110010010010001111011011100011010101101111110100101011000000011011001010100010010010010001000010101000101110000111010111110100010010000001001101001010111101 1001011100010100100111101110101101110011111111011101010100100110001000000010011101111011111000011111010110010011101100111101111110101111111001001101111011110010111010110110010001100011011101101000110001010111100010000001101101001001001011111110011000011111010011010001011101000101000000100011011010010110110110100011111100111101110000101010100100011110000011101010001100000001010101111000100100011011 1011001001010100101100010010111001010110101011110000010010111101001001111111111010110110100011010111100000010011010111010110111111010110110000011100101110000101000100011101000101001100111101010111011011101011000000111010011111011100011001110011001111101011001011101011100100001111001001100111011000111101011011110111000010100110101011011101101111111110010010110011001110001101101111000001011110100110 0000001111001100010001100100000011111001111001111000001101000100010110101010100010000001010010110110110011011000000001101000011110101101000010101011111000101001100101001000000101101111010101000101001110111101101101111011011101011011101001110000111000010011100111001010011000000011101011001100010100111111101010100111011001010001010100011001110110110000011111110001000110010101000010001011100101001000 0011110011011001100001111100000001111100000110111010010000110000111000011100101011100111000100100110001101101000101101100010001110111011101101100001011010010101100111001001001111011010000000010111000111110110111010110001111011000001010010110000100111001010001010101011100011011000111111010101000001001110011100101011100110010000010100001001101110110001001101110000111011100011100100010011111000100111 1111001101000000000111001001101100011100111001110011001001111101001000001011011110001101101111001100011100001101001110100111011111111011001111010011000101100001011000100000101100100110101000100100010110011000010111100101000001010000011111001101111110000100011000111110100001010101101011110001011010111010110100010000001001111110101101101011010001001000000100101001000000010001010100010100001001000111 0001000100011110010110001010000010111010011100001000010100101101010111000001001111111010101110000111000000101101000000110111001111100001000101111101111000101001000110000001111101000111000011010011101001111101101111100010101111111001110011110111000100010001011111011111111100111111011010111010111100110100101011011111010001101001001000000100000101010001010001111001100000000001110110111110100110001100 1011101100011110001010001111011110011001101101110110111000100000000011111101001010110001101100010100010001011110011101110100011110100110001110011000000111010100110110011111111111001100111101101000111001100111111001001000100010000110101110101101100101001011010101110001001010111001010011010010101000100110011111101101110111001111000110101010111001110101110000110111101011001011011000111111100100000010 1101011000110111010101100110111000110101101001000010100010111011011101111001110010011100001111000010010100101000010001000111011000000100010100110100001010100010010110110101110110000100111100000011101001110011110001111110101001000100000101001010011110011000011000110101011000110100001010100011001011101000011010011100110100011010011000111100001000010010010000101100110110100110010010110010101111110000 0100111100010001001101110010111011000110101100010010010010011100110100000010011010100111001100101110101011100011011010110111000011100110011010001000110110010101101111001110111000011010100111111001011101100100000110001110100000000101110011101100110111101111100101011001110110101001000001011010111010111100110000001001111000000010011001010101000001100111101011001000111111010100100100001101001101110111 1110111000100001100001111110000111111110100010010001001000001101001111100101111010110001101111100100011101111100011000011100001000001010011000101110000010001000010000100001001110000111100000101111011010001101001000111111111110111110100010000011110010110101111111001011001010000010110000101010101101100100011101000001100010111010100000001001011000111101110011010101001111110101110100111100010110101110 1100101011010100100101011001100001110111000101010011101011000101001100111001011110010110001001001101100010100001110110111100011001110010011110001100000111000001110011100000111101011000111101010110111110110111110101001110011110101010011000100001010010110110110101000010110101000101010111110010000100101011001010100010100111100101111110110100000001100011001010011001111110111010011111110111101111111101 1011000110010111110100110011100001111000111100001000100011011001001001100010110111011101010111000101001011001011110011001101000100010101101111011111111011000011001110011101011001011011101010010100100100110011101011001000011110110111100111011001110011110111000101111111001111110110001111000111001110001100110011111110100010011111010110110111100001111011101101010101100000111001110000011010000101100000 1010010111110000000000110100101000010110001101101111100101000000111110111010011000011101011011100101110110000000111110001100011001010000100110111001101111001111100100100011110010110111011010100101100110100001110011011101101000111011001101001001111011100001100100111100101100011010100011110100011001011000000100101001111011011010000101110111111110010000001011010011001111111100001000100001001100101011 1000110100100100111100011000000001101010001111100000100100001110011110011101000111000111101110111001110001011110100000010000000111001000001010001001001101010011010100000110001101010000000011100010101110011010000111110010010010100010000010011011000100111000011011010101100101001111101010110101101110100011100100011100100011111011001000110100111010001110000011001000011101110010001010010001010110111010 0000000111110010100110101111001100000111110101011000111111111111011000100100101001101111100011100100000101010011111001010010000011101001010111110110001010110100111001101110010110101001100100011110111111110110001110100101010100111100000011011001100100111111000110100101001100101001010010110110111111011101000110110011010000000110101011110110011000101001111111000001001111111000100100101100100110010001 1100000101110011111110100111101101001111110010100010011010000000011110011000101110011110100001011111011000111000111100111111100101101000111101001110010011101010110001101101011101100110000100101101100111111101000011011110001001000111010011100010111001001001111100000001111100101001010011001100000010110100101000000110101110111101000011110011110001110011101010011010001110111000011111100001010000101101 1010101010001101000011111010111000000010110011011001100101100011111100001001010101110100011000100001110000101011001010111001110001000001101100101011111010110011101001101100110000100011001101110110111011101011001010101001011011101001000100000100011110010000100001011110110011000011111000010100111000110001100110111000001100001101001000101010011000110100100011100111111100001010001110110100000110010010 0011110101011101100110101000111100001111001011111001011011110110001000100011000011000110101100110100100001100101110111010100000011001111010101010001110001110111000000000010001101110101011110000000000001011011101001100100100100100111100110111111111011110111111110111110100000111110000010011010010111100001010010100000101100011000101110101101010011000111101001010111011001100110000111000010011001011010 0111111000100111010011001001101100011001100111010010011100110001100011000110111100111000110111111010100000011000000001101001111010010101101001001110000111000011110111110001101010111110110101111001100001010011111010100000100001000000000000001111000011011101000001010111111111100101111100100000101111110110001111010100100100100010001001010100110011111001011000100111111111011000000111010100011110011001 0110111100001101011101010011110110100000010111001011000100100000101100011111011001001011011100111000101010000011011001111010011110110111010111000001111101111111010000111111011010111000101000100000000000110111111101100110110011100101110100011011111001010010000011111100001001110011000001011111010100010100011001111111011101110010010011010110010100111100110101010010011000000100100010001010011110010101 0001001110101111110010111101001010100101011111001101101101000011011001100011000111100010110111101001001011111010100100100101011110111000010000110100010101111101000100011001010001110101000010111101000100111000100010110101000001001100000011001011000100001100100100001100001111010000010110011111110001110000100011100000110111000001010101010110011010011011100101010111100110011000101111000100000110011100 0110001001100011110000000011011000010101001111100110110001100000000011101010011111010101100000101110001111110100011100010011010100010110111000000100000010111110101010010100111101111000011101101011000010010110000001110000110001011110110100011111111010000001111000101000011000010001101101000001110011100110010100100011101111111001110101111000010000010111011000111010101110101000101110000011010011001011
cTrader Algo

はじめてのインジケーター

11/8/2020 6/5/2022

5年以上前の記事です。内容が古くなっている可能性があります。

インジケーターも作ってみよう

cBotに続いてインジケーターも一つ作ってみたいと思います。はじめてのcBotは終わってる前提で進めます。

エンベロープ

エンベロープ(Envelope)というインジケーターをご存じでしょうか。移動平均線とその上下一定距離に平行に線を引いただけの単純なインジケーターです。説明が下手で申し訳ない。見た目としてはバンド幅が一定なボリンジャーバンドみたいなこんなやつです。知らなければ検索してください。

比較的メジャーなインジケーターだと思うのですが、cTraderには標準搭載されてません。なので自分で作ってみましょう。(フリーでダウンロードはできるみたいですが、それはまぁ置いといて。)

パラメータはシンプルに2つだけ。「移動平均線の期間」と「移動平均線から上下ラインの距離」にしときましょう。距離は%(価格の何%か)で指定します。

 

早速作り始めよう

今回はサクサクいきますよ。

cBotのとき同様にAoutomate画面のIndicatorsタブでNewを押してください。ちゃんとIndicatorsタブが選ばれてますか。cTraderのタブはどっちが選ばれてるかわかりにくいのでご注意ください。

新しいインジケーター作ったら名前を変えます。今回はちゃんと「Envelopes」と名付けましょうか。そして右クリックからVisualStudioで開いてください。

 

自動でできたソースコード


using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;

namespace cAlgo
{
    [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class Envelopes : Indicator
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }


        protected override void Initialize()
        {
            // Initialize and create nested indicators
        }

        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = ...
        }
    }
}

 

cBotのときと似てますね。

 

(2022/6/5 追記)

インジケーターの動作の仕方

実際に作り始める前にcTraderのインジケーターが動くとき上記コードのどこがどのように実行されるのか説明しておきます。

[Parameter(…)]はcBot同様、ユーザーが設定するパラメータを定義してます。

[Output(…)]はインジケーターとして表示する値の変数を定義してます。プログラム内で計算した値をこのResultに入れてあげればあとは勝手に画面上に表示してくれるということです。

最初にチャート上にインジケーターが設置されるとまずはInitialize()が呼び出されます。インジケーターの初期化処理ですね。

(ちなみにインジケーターは時間足が切り替わるたびに初期化されます。パラメータ以外の各変数の値も初期化されてしまうので注意してください。)

初期化が終わると次はCalculate(index)がローソク足の本数分だけ呼び出されます。引数のindexは0から順番に振られたローソク足の通し番号だと思ってください。

コードで説明するならこんな処理がされてる感じです。

for(int i=0; i<ローソク本数-1; i++){
    Calculate(i);
}

ここまでの動作が終わったら、その後は毎Tick、Calculate()が呼ばれるようになります。

ポイントとしてはCalculate内では渡されたindex番号時点での値だけ計算すればいいという部分です。MT4とは異なりますので注意してください。

例えば高値と安値の平均を算出して、上記OutputのResultに入れる場合はこうなります。

Calculate(int index){
    Result[index] = (Bars.HighPrices[index] + Bars.LowPrices[index])/2;
}

あくまで計算したいのは「その時点」での値なので[index]で値を参照、代入します。もちろん一つ前の値を使いたいなら[index-1]とすれば参照可能です。

この動作が理解できてればやることもわかりやすいと思います。では早速作っていきましょう。

 

パラメータ設定

パラメータはcBotのときと同じように準備します。

// 移動平均線の期間
[Parameter(DefaultValue = 25)]
public int Period { get; set; }

// 移動平均線と上下ラインの距離(価格%)
[Parameter(DefaultValue = 1)]
public double Distance { get; set; }

 

表示用データの準備

表示するデータの入れ物を設定します。

[Output("Main")]
public IndicatorDataSeries Result { get; set; }

この部分を変更します。

画面の表示するデータは[Output]属性をつけてIndicatorDataSeriesという型で用意する必要があります。”Main”は画面表示名、Resultの部分は変数名なので好きに変えてください。

// 移動平均部分
[Output("MA")]
public IndicatorDataSeries Ma { get; set; }

// 上の線
[Output("upper")]
public IndicatorDataSeries Upper { get; set; }

// 下の線
[Output("lower")]
public IndicatorDataSeries Lower { get; set; }

移動平均線と上下であわせて3本の線が必要ですのでデータの入れ物も3つ用意します。[Output]属性の付いたIndicatorDataSeriesは中身のオブジェクトも勝手に用意されるため、初期化は必要ありません

 

必要なデータ準備と計算処理

次に移動平均線のメンバを用意しInitialize()で初期化します。cBotのときと同じですね。

//移動平均
private SimpleMovingAverage _ma;

protected override void Initialize()
{
    _ma = Indicators.SimpleMovingAverage(Bars.ClosePrices, Period);
}

あとはCalculate()に計算処理を書くだけです。

public override void Calculate(int index)
{
    double maVal = _ma.Result[index];
    double distance = maVal * Distance / 100;
    Ma[index] = maVal;
    Upper[index] = maVal + distance;
    Lower[index] = maVal - distance;
}

ここはindex番目の値を計算する処理を書きます。MQLのように自分でループを回す必要はありません。

引数としてindexを受け取るため、さっき用意した3つの入れ物のindex番目に計算した値を入れるだけです。

 

一応計算内容も説明しておきます。Maには移動平均線の値そのまんま、UpperとLowerには移動平均値からDistance%離れた値を入れてます。

MAから(パラメータの)Distance%離れたところに線を引きたいため、現在のMA値(myVal)を元にどのくらい上下に距離を取るか計算してdistance変数に入れてます。

で,上の線の値(Upper[index])には現在のMA値(myVal)+distanceをセット、下の線の値(Lower[index])にはmyVal-distanceをセットしているというだけです。

 

表示してみる

さて、ではこれで表示させてみます。cBot同様、cTraderのAutomate画面、+ボタンでインスタンスを作成して選択してください。Indicatorはいきなり表示されます。

意図したとおりに・・・なってないですよね。実はインジケーターはデフォルトで別窓に表示される設定になってます。これはテンプレートの10行目

[Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]

ここのIsOverlayで設定可能です。ではここをtrueに変更してビルドしなおして再度見てみましょう。

できました。

コード全体

using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;

namespace cAlgo
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class Envelopes : Indicator
    {
        // 移動平均線の期間
        [Parameter(DefaultValue = 25)]
        public int Period { get; set; }

        // 移動平均線と上下ラインの距離(価格%)
        [Parameter(DefaultValue = 1)]
        public double Distance { get; set; }

        // 移動平均部分
        [Output("MA")]
        public IndicatorDataSeries Ma { get; set; }

        // 上の線
        [Output("upper")]
        public IndicatorDataSeries Upper { get; set; }

        // 下の線
        [Output("lower")]
        public IndicatorDataSeries Lower { get; set; }

        //移動平均
        private SimpleMovingAverage _ma;

        protected override void Initialize()
        {
            _ma = Indicators.SimpleMovingAverage(Bars.ClosePrices, Period);
        }

        public override void Calculate(int index)
        {
            double maVal = _ma.Result[index];
            double distance = maVal * Distance / 100;
            Ma[index] = maVal;
            Upper[index] = maVal + distance;
            Lower[index] = maVal - distance;
        }
    }
}

 

あとはそのまま使うも改良してみるも自由

自分で作ったときの最大のメリットは自由に中身を作り変えられることです。

単純移動平均線じゃなくてEMAを使ってみたりだとか、同時に2本も3本もエンベロープを表示させたりだとか、自由自在です。

自分で作ってみることの楽しさとメリットが伝わっていれば幸いです。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2026 ajinori