1100010000010010011011100101010011101011000001001001111010011011110101110101001100011010011000001110110000011011110110110000001000000101011011101101010011101110111011111000110100101010010011001011100110111011001111010110111011000011011110111100010111101100000011110010010101101100111010100110111111010010110000110111001111110011010000010111101011010100010100000110011100000110011101101011010111111010 0001011101101000010110010110000010010101001100011000011101100111101000000001010011100011011100100100111000011111101111100001110110001110111010010000011110110100011101111100111011101010000010010100001000101101001110011101000001001101011001111111011010101111011110111000100011010010001011010011011101011001110010000001101000110101001011110110100011101101000110000100010010110011111000011111000100110011 0111000010000111100110001111001111011000110110101011001100110101001011100000111001100100100110110000100101011111010111011011010001001100001000011101111111011110011101001111010101110111111100101110010010011101101110000011010010010110010110010101111101011011111111100001000011011001000110100101110000011110011010101011110111010010111011100010111010011000110000011111010110101011100011100100011101101101 1110010101011100100100100000100000111011000101000110001000101011110101111100101111111101101111011000100100000111011000001001011101101100011111111110010000001001100111110101011111011000011000101010101011011000000100000100001101000101111001011101010011010010111110011101100001001100100011100101001111111011110101111000100011101101000010010100000101111110000001001011100110001011010101101000001110010011 0000000110100111110111000001110100100101001110000101111010001000101011010101001110111101100101000111000101101111001011001111010001000000110010011100111010110010110100101011110001101110100001000010110111111010110101001100111010011001111110111011100000111011000000010010100110100011000001011111111100100010111000101101101011011101000010101010110111010111010100111111100010101101100111101011011111011010 1111000010110001001110100101001011111111001001000010010111000011110101110000101000111000000101010000000011000100010010100001111110001100010011110110111011101000011011110101111011010111100111101110010000011001110010011001001111010001101111110010000111011101111111010001010010001111101100110110111011011100000001110001100110101111111101100000101100100010000011000000010001101111110010000000110000100011 1001001011010000101101000010010100011011000100011100101100000000011100010000001011011110011110111001011100000010110010111110001110011000010001001111101111000100011011010110011010100100011100011001011110000111101111100001100010010011111000001111110001001010110110111000011000011000011101100111111100000101101111111000100110111011001001101011100111110111000100000110010111100000101100001110100100000110 0111011101100101011101100100100000001010101001001110000110101010100100101011101100011110011100000011001001011000011001001010010101110110101001101000010100110110011001010000000110111110011101101101100111010101100001111000100011101111110001101110000110011000011011111011010010001101110010000010101101001111011100110001111111111010010111110001101001111110100111101010111111000110111110001011111011000110 0000001111000100110100110010111110010010001010111101110100010111110110111011000100111100000100000000011101111000111001110011011101001110101110011010101110111101101011011000100111001010011101100110111111010111001011011110101100001011111101010001101000101011010101010110100111100010010000111111111001011100101010100001111111010101011101111100010001011011100011001100000010110101001110000000101110111101 0011111010110110001000001011100011110111001111101100110010101101010010001101101010111100100011100001010001100101110010110000010101111011001011110110111001011011111101000010011001101101011100101110011101101000011001011010010111011001101101100010100111110000111100001100111110001110010000001001100100011110001100010010000111100100011100000100001100010101010110001110111010001010011011010101000101110010 1000011110011101111001101111100011111010111111010000010001000010110100100000111011011011100011000101100001111001111001101110101010011011011110010000110001100011110011100011100000101011001001010101011001110101000111000101110010000011101101101101101010000011101101010011110110111101110011001111111011100001010000000110010000111100010011000110111011001111100111000111001001000101001000011010101101011100 0100011101001111110100100110000001010011001110011110010100010110001101110111111001110011111011010100000101110110110010010100000110011111110110000111010001101110101001001110110101000010111001011101110110000010011001011111110110100011100110001011000001001001110010001111001011001101000000000000110001111110110011011101110011010001110100011111100101010010110101111101100111111000100001110010011010110011 0011100001100010100100101100010000110010101110100110001100000001100000001110101010110001111110001010111100010001001110100101110111111101101000011101011100101110001001111001001001100101101000000011111011100111010000010011011100110011000011011001010000101001011010001011000011000110100001110011100111010011100110101110100111001100111011000101011001000100011001011100101001100111111010011000011001000111 1011000010011111110011101110001011110111100000110010000111111001010110000010101010010000001110001110000000010001000110111010001111001100011101000100111110100101011111011011000011100001010111111100101111111001011010011111111111111100100111000001101111010000001011111011111011101110011100000110000000101011000101100101110110011000110101001100000111101001110011010001111100001111110010011101111101101110 1101011001011001110010110010000011111001111101100000001100010000100110010000100001001111101111000100001011010011110011110010010010010000101001101110001111001010011000101001011100101111001011010110110001011001001111110111010011101111000101011011000000111011010010111110011111000111110101111101111011110011000110000111111000111010100001101010001011101110111010111111001010011000000011110110111110111110 0110100001110101100011100011100101001110001001000010000011000110010001001010110001000000100111101101001101110111001110100110110110010101110111111011100110010100101111101100101001111110001010001101111101101001111101100000000111100111110010111001001100100111000010101011010011011000011110101011100101001111010110010011001100111111000000000001110000000111000000110100100000011010000110010001010000001111 1110001111010101011111000000010101100101010011000110011110000010110011111100101101011110101010100001011001010111111110010000111110111101100101000110010001011110110101011001011011100101000100010100001000110100001000000011101111000110101000110010011010010000111011101111111100010010100001011110010010011101000010111001010101101100110111000110010000011101100110111110100010011011011010110010011101010100 0101111111001001000110010010010011000001011101001001010100000000110111000000000001100100100001000100000010110010111001010001101110011100100011011011110001011000101010010010100101101110010011011000101010100111001010101010000111101101111000001110001001000001100110101101110101100011110100011101110001000000110001011001111010101010010000101010000000010110111011111010101001000001111011000100100000011111 1001101011011101011110000110100111010011010101111011100110000100101101011001110101011000001010011010111011011110110111101100111000101110100100010110111010110001000100111100000000000111111110111111010000101100000110000000101100101000010000000000101010001001010110011110110111000110111111100111100010001101001100110111110001011000100011000000111100111000001111000010101101001101000010101100010001011100 0011011001011111110110110111100001000110100100010011110110010010011010110100110101010110010101101001001100001111111111001110001111000000110001010100001100100101010000110101011010100000001100111000100001000011110111101010100011011011001011100000010011011101010001011011010110100011001001000000111111010001001111010010101110011100101101110110011011000001110111001111110001011011111011111000010111101110 0011010111010100100111100100101000110001110001110110100100101010001001100001010000000011000000001010111011011100001100110110001101001101110000010000111101001101001100011100011001111100011010010101110110101000101001000110011100010111011000101100111101001011100101010001101000000100111000111101110010110111111001011110001101000010001011000010101101010011000100000001100101010101100100101000101011101101 0111111001001010011001100011010011010001100010100101011001110010001010111000000110010001010100111001010000011111000010011110100101010111011011101110110110111101011000010000001101010011000000001110101011111100100000000110110011001010010000111100100011100011011100001101110111011000111010010111000001100001011110101110010011110110001101001101010011101001001100010100110011111111001111101110000010100110 1110001001000010100101100111010101001011100000001110101000100100011100110100010001011101001111110100011000011111111111110110011011111100100010101011001100011110000100111011000111111110011111111000001111101000000001100001110011000110111011001011111111010010100100011001100111011110111010000100011111111001100011001001111011011111011011001100010110110100110001010010100000000110101111110100110110100111 1110110011001010010110100101111000010111101110011101010111101111000110001110011000001100101100101010001100101011001011101000110101111110000001001101010111001010001001010000011000001011001101000001001011000100111111100110011101100111101110000001100101101110001110110010010001001101110100110000110011100111110011011110101100011101000111000000010011111001110111001110101011011000001000010011010110110110 0011000100011101111001011000110111011000010011111011100111100011110100000100100111011001001110011100011000101000001101001011110100010101010100100000111110100011110010000101110010100010110000101100101110000110100001000011010000010101111101110010000011110001101010010100010011001101010110010000111101000100000011100010000111110101101010010100111011011111101001011010111000111101000000100010100000001111 1101101010010100100010110000100010011100100011000110010010111111101101110001010010110001111111010111001101000110000110101001000001010000000011101000101010100100110100111010101001000111101110010100011110101001010111111010001000010101100110010110000100101110000000101010010100010010001010011011111010101101101100110001101000111011010001110110010101010100001010110001011111001111000001001100010001010001 0110000101000011111101010010000100011100100110010100111001110111010100000110010000111011111000111110011010100000101100011111011110100111011101110011001100011100001000010011110010011000001010001111000011101101011100011101101011010101100011110110010011001001110110011101111000010110110101011101010001111001001010001010100010101000001011100010011000111000111101010100100101101111001010011101110110111101 1001101011100011111100111001100110110101111010001110100011111111100001111100011000101000000000010111101110110011001001101010010101110000101001001111110110100100000111001000011100011100110000110001010111101011001011011101011101100011111100001101011011110000111100101011001110110001001011000111010100110000000100111111010010010100001001010101010000010110110000110101011110110100101101011011011101011010 0001000001100001110000000000010110010000001011010110110100011001010100000101001110101010001000001011101110001010000101000100110001001100011111011111101011001100111110010110000101100010100011001001011010110100010111100110011110110111001100011100010101110111101111101101110110001011011001001010101000110101100101000010111100111000100110100001101101100100010000000111101110001101110010010010111000000110 1110011001010110111000101111000110001110100010101011100011110001100011101011100001100011010011010011010110011111110110111100000110010101111111010010110110010110010000111011110111111011101100000101010111000000111111010110010010111010110000111110100100101111110111001010011101111110111001001011011001010010011001000111011010001001011100100010101110000110100010111000000111001100100001101001101110011101 1010100010101111001001100100110111111111010101100001111010111111100001001101111111010111011111000111011011100001001000010100110101000001111110001111110100101100101010000011011001011110001001001110000100000100101111010100111000001001001101110100010100011011110100101110001111010111011001011101011110110011010100111001011100111011111010010110011011001001111010010001100101001010001100011110111111001110 0110110101111111011000011011010010100010001001111000101100001000101100000000000011110010000011111001101010010101001010101100010010100101100101000111001100110001110011001010010011001101110001010010111110100000001111110011111110010011110011011100001001111100010100110001110011110011110010001001101001110101010100000100010001101011100001101000010000001011011100101100011011000011011011100100111110011011 1001101000100001100011010010101011001100010101111001110100000100010110011111101101110000110110000000110000110011010100000111110010011111001111101001101110111011100000010100111010011101101011101100011010010010110100100101111000111111000101011001010100010100000100011001010110101111011001110001001101101111010111001111101110101100000110101100110010111110011000101000000011011001001000001010101010001110 0011110011100100001110110111001100011010001011010101100101101111111011110000010001100000111100011111101110011110000011010011100001101001100001001011111110101001110001000110110001100111111001001101001111101000101101010111110100111011110111111111010101100011000010101110101011011000010010001011011101101111110010111111011110111000001111111000111010101000101001110101011100010110110000111110101011011000 1100000000011110000000001111101100011001100000111010000011000101000111101110111110011101110011101111101001111101110101101101100001001110110111011111000001101000011000011101111110011010000110000101110011000101001001000010111101011011111001111101110111110000001111011001000100001101001100010001000110100011010111010001111010001100010110001001010001111111010010000001111110010001110001011101101001100001 1110000101001001000001011110001110000010100100000001100010110110110011000100101110011001010101101101111010111000100000110001100010000000011100110101011001110100010101101111111110010011000111101011011110100100011011010000011110101110001100101010111000110001001111000010111101111100011101101100001010010101110101101100001001110110100100101000101001011001011000001010001110001000000110100110101011110100 0010011110011011001011011110000000010011110000111100010010000111000101001001010111010111010101111101110110100110101001110110001010010010001001100011001110000111001001100010101010000100100110100101000001001111001001100011001110111101011010100110100101011000000011100110110101001010000101011110011011001101101101010010010001000000000011001010001111001000011000000101111110110001001000000111000011100001 1101010100001010011100010001110111010011111000101100110000001000110111111111111110000110000111110010101110101111100001101010100110110101110111001111010110111010101101101010100000100001001010000011101110101000110010110011011101011011000000010111010000010100100111100000011001111010110101111010110011001001111011011110111101001100110010011010000100001000001011011011011001011001000100101100000001000100 0011011011011000011011111001011110001001010100110011000011010010100111111010101110110011000001100000101001011001111101000110111000111001001010101100111100011011010010101000000001101111101100100101010001100111001010100001100111110011010111110111111101000110101010100101101001101010100100001100101111100011011111010011000000101011110101111100010011110101111011110010101101100001010101101111110000011010 1111101111011111011110111010001000100111010000111011101101000001110101010100101111010110100000001010111101000010110100100011111010110010001111011011101001111110001010100011111111011101000000011010001101000011010101000100110110111111001100001100001001011110000111000100010001000001101111010110101010010110010110010101101111000110100111110110011001010101001100100110010000100011110111111000000101010001 0110010001101110000100100010110010000010100100001001101100101011001110010110110110010001000000001101001110000000100010010100111000001001100001011100111111110011101011001101001101010111111101111000010101100011010010010101100010011000011001100111110011101100000101100010101111010110110100110100011100010100110000011010010111011000010010010001011101101010010011110100001101001101110100110001001110111001 0111010110010111000001110111010010101100000111111010000110100101010101000100111110111100101000010011111011100000101001110100100100001000000101000111111011010001111011110110101000001011111101111101101010001100111011100011101000100110101010111001000110101101000110010000010001001101000101101110101001101100000010001010011111110010000001100010010000010111001101101011110001000010111011100100011000000101 0000001010000100111010011000111010000011011001110011011100011000110101111111000100101000100011110011101010100011111011010110101010000011101001100101001001101000101101111000010000010110111101011100111100100101000011110111101001100101100001010111101111001101000010111000100110000010011111010011001010000110110000011101111011100100111010101101100010011011011001101001101100000100101110001011101001000100 1010110100001111110011100010000010110000011011010001000110001101010001001011010110010111001011010010101110011100011101111100110110001110101011000110000100101001010111010010010111110101111011001111000010011001110000101111101110100111010000101001011011001011101110010111101010110101100111001100001111000110111010000010011001010001101010100001111001001110001100000010011111100111010111101111001001000001 0001011111110100110100110011101001100111110110011110111010000010011111011001010101110101001111011010111110111101011101111111001110110001001100011000000010111001111110101001001110100011111011011010101010001000011110000010010101101100100001101000010100110100100100010010010001001101111111111101110001001110110000011010011001000001100111111110101101111100001100111011111000110100011111010110111001001110 1100001110100000111010011111001100001100110011110100001100111011100101101101110101010011010100001101100100111101111010111010010100111000100110001001100101001101000011001010000100111110011001111111111010101100000110000101000011000100001111001111101001111100111010010011110100000001101110001100010101010111101100001111001010111101011110000101011101100001111101101010011111110000100000111011111010001111 0001110011001111010110101100001001011100111011111101001101110100110100011100010010000010001010110100101011000010111111110001011110100011000101110010011110011110010000111010111100111111100101110010100001110111010101100000110101111001001001011001010001011001100110001111001111010101010000110010000111110001001100110110000100101110100100010110110100000000011011010010101001101001010000001010000110000110 1101011011010011111111000000110001101001110001110110011011101010100011101111101101001101001110100101100010011001101010001111000110010101110100010111111010010101000110011101001101100010001100101111111010110000111110101001100001000000100000111001101001111110110011010101100111101111000100101001001011010111011011110110010100101001110100011101110001011010000000010110000101000010000110011100101100101010 0101110101101100100100111101101001011011101100111101000101100001000101000100101001001011011110010010011000000001010001101111001101101110100000010110011110001110010100110011100000100000100010010110011000010000110110100000110010111101001000111001101101111001100000111110011001000011001000111100010111110111110110010111110100001100011000110101010100111010010001100110101100100000011101010011001001110001 0011011001100011011001011001100001101111111110010001100111100011001001000100110010111100011100100100001011010111000101000011011010001101101100011000001111010101001000100011010001111000101000001010101100101110100011111111100000001110111100100110101011111001001111010111001111001011000100000100110001001011010111101110000010000110011111111110001010110100000001001101000110101010100001100110000011111001 1000001011001110100001111000110001100001110110010010001100110001110010111011100101001010111011011011010100100110100010001000100110111111110000101000101101010111010000101111001100001100111011100011101001100011011000110001100001110101101111011111001001011001100100001111111111010000010110110010011000100011110100111010010100111100100000110010010011010111110011000111101111000000000011101011011111001110 1011010001001000101011000101111101110110100000100011011010101001001000000011110001001001001011100100100000011001110010010101001010001000000111001101100010001001111111010010000010111011001100011001110011101000000111110101000010111001000111110101010001110001110100110110100011111011001011000100101000000110010010000110100011010100100110011000011101010011100100010101011011110101101100110110010000000001 0110000100010000101010110010110111110100111000000000010001111100010010101110100000101111100100110000100000010100110011010110110000100011011001111011001000101110100101011110000011000110100111010000011010101011001001111001011001011010110101010011000101011011010000111010011000100011001011010010011010101001000011010111110111000010011010101010000100010010100001011001111111101110010010110101111000010000 1100101000100100100000111100011010101000111010010011110000001111010100111101001111000001010110101110100101111001001100111000000010100101111101100000010000001011111110100110101100111011010110011110110011000000011110110110011010110000010000001011010100001001110100110110100001111011010000011100100111101011001100011000000110101011000011011111000110101001010101000010010110111111111111100000100111010110 1011011110111101110100100100111111010010011111001110010010001000101111111110101000101110001101101101000100111100111100001010000010000100011010001110110111001100111000010110111100011000011111100011010010001000110000010000101111111010101100011000100100101100101011100001010011101010101010111001101111001110001110110110110000011101101111110111111011010111001110101111001110000100011100011011100001110000 0001100000001011101010000101011011000111101000001111011100010110011001101011111100001001001011010111000110110110111101110110111101000110101000011011100110100100010111111001000011100101010101100111011001110000001101110001110010000111101001001011111001110101000110110001000111011110110100110010110010111111101110011010110111011100000100000001011110010111011011011111100101010001100010010101010010101101 0101111100011001100001011001000011100011101000000010101101100101110000011010101110100000101111100110101010111101100010100010010101101110101110110100000000100001010011101101101100101011001011100000000001000110110101000101010011101000110110110010000101111111010111110010101011010000010101010000001110101100010110111010000101011100010011110111110100101000101111010011001101110000111100001110010001100001 1101111111000111101100001100011110111011100001001010111100010000011111110010100010011010011101001000010110110000000001111011010000010101111101111001011011101101011001011101101101001011111001000001110111001100010010001010111100101110011000011111100101100000011010101101101101001100110010110010010011100011010111011001101111010011001011001110000110001001101100110011101100001001010001011010001100101010 1000010100100000000110110110110011001001101111110011101101101100010100001111010111101101000000010111000100101101001100110001011011010000100001111110111111011111111101011111110001010100111101011110000100100101011100011010100011010010101101100000001101000101010010001111011010101011101001011110100001111011010101000101101111001000000010101110110011010111100110000001011010101010010100100010010110000100 1000000101000111011110011101110100011011100111110111000111101010110110101011111000100010101000000111011110000111101010011001111011110010011010000011110101100101111000111000110100101011101000110001000010011110001010100011010110111101011010111001111010101110111101000000011111001001100101110000000111000010010000110100100011110011011010000000110011010100101000001100011000000000110010010001010001111000 1101101010101000001110011000000001010011000001011101100100000111001110001001100110110100100111001100111000100010101100010111011100001110110101101110110001000101111001010011011101011111001011111100110100001010000010101010111110100001001111011001101001010000010011111010100010001101101100001000000111000001110111110101001001101010001010011111100100011100100010011011101110000111110011011100100110111110 1110110110001100010001010110101001110001000111110101111000010001000110000000111010001100101101111000101101101110011010100101000000101001101010001000111010101110000110111111101011000111110110011000110111100101010011101001111100011011100101001110011000000111110100100001100111001010011000010110010101100000010110110011001101111001010111000101100010000001001100100010100100010000001000000101110010011010 1001110111001110010111000010011001011110110111011101011001010101100011011110001110010110000010101111011010111001111100100010100111111101010110000010000110100100100000111010100010101010000010011110011111110011001110110010010110001010110110000100110110001011101011111001111110111111001111110000011110000011011011101110100011111110101111111001101011100000111111110111011111011111110111001011010010101000 0110010110011110100110001010010100001000001000100011000011100110001001101101101100111000101001101100010111111010111101100000010100011110001001000010111010011011100110100110111110110010011001001100101010110010000010101011001110100000010000000011111110011010100100101000011111000100000001111110010100011010010100110001010000111011011010011000111000111011101100001101000000011010111010000010101001100110 1110101010000110000010101100011000111010011111001111011101111011110010011111110011010000110110011011101011100000101000011111111011000001111100011001110011010000101101100010101100100010111110010001000010110111110111000000110000100000100010100101000111000101101010110001010011111001100001100110010011100101111111111011110111100000001000000000001100001110010110110000111100000011111000100100100001000100 0100100101010000111111100011001110010011001100111100111001100000001100010000010111010011001001000011011110111000111000001011110000110110101011001101100011101101110100111111001011100000001001000111100001100000101011111000101100011101000111011100111001111011011111011000111011001100111100001001011010000110111110011001110101101001100001011110111001101010000100001111010000111110111000001111111101000011 0101010101001011010000111111101110001111010000110001101001101111000100010100101100000101001001101110011011000001100010010000101100110000110111000010110011110111111100100101000100001101101111111011010010100010110101101100111011010111000101011100011101101111010101110100011111111001110101001101001011010011000001011111111101010011111110000011100001011111001100110010111001001010110100010111110100110001 1000101101111010111111100001000001111010001111111010000110010000101100110010110100000110101011101111111010011100000111001011011110100100000011000001001111001001111110001110000100011101000110111111101010011100101011000100110010000010111110010011100110111001001000010011010011100100101011010010001111001010011110101010000000100000111000010100101000000100010000111001000110011110010010100001011110010011 0010111010110011011111100010110011011000111000100101010101010010101011010001011001010000100011110100011111101111111111001000000010000011111000001000101100100111011000000001001100000100000100001110111101001010000000111101110010000110011000110110000010100010010110000111000010000111000111101111000101101100010011110011101100110100011000011110000101111110010110110001000010011010111111010001000010001000 0111000011011100101001100011100110100010111011101011000001101011011110111111011100011100100011111111000001101001111001100010111110110000010011001100011010100010100110000100011101101000110101011000100100110110000111110100101101111110001110010001000100001111110011111101111001011010101100100101011101010110110111000000011111100111000010111000111001100000010110111100111011011010111111000110001100111001 0000011001100011010101101101110110110110111010011011001110101001100000010101100111101111111001011101001000111011100000101011001101110010111111001011011111111010000010011001100111101111101100000111011111001111010101111011101011011000000101001010100011110001001101101111110111110010010001011011011110101010101010001110000000101101110010010001000110010110101011011110111110010100110100101000101110001001 1110001010100001100111011010010000100000111000101101000011000111110110110001010101000110100111011010000101011010111011000010000010101001111000001001111000001111110000000111110110110100001110101011111010001101100001001111111011011111001011101110010110110101011110000101111011100010110110000110001001011001101010000111110000011101001011011111001100100011000111111110111110000000100010000001000111010101 1101001110100100101010010101100110110011100100011111110100000000000001111001010010100011000100101010110011001101101101010101000011100010011110100011111001111111100001011101000110101010111111000110101101010000011110011101001100100001000011111110100100110100000010110110011101111001110001011000001011100110001111000011001111111111011100111110000101100110001001000110110110010101001110001010010111101101 1110000100100001010011101011010101010101001010011111001010001101010000110101011000010111011110010110101010110101111100110100111110111101010111011010111000000001010010001110101001111001101010000100011010110100010000110010010100111100100011110100111110110100000010000110110010100000111111100101011100110101100011011011000011001111010111110100111001011001100000100101110001111110000111000011100011011001 0001110111000000001101101010101110101000111101101101001001110001110110010000101011011110010011110000101000100011010111011010111011000101011000110010010011111001110111111011001100010100011010110011010100111001110010100000110101011101011011010001111010001111100000001110100001011101000010110101000101110110001110000101000110101001011011100000100000000010101010110000110110001101110100100100111000111011 1001110001100100111001010000011011111010000011110010011110110001000010110110100111101100000001010010011100011100101001111001000001110110011100000110010001111100110100111011001001000101111111001001000100000110011000111100011101110110111110111001111011111110010011001100001101111001111111000111111101101110010001111001001001110111110111101011000111011110110101010011111011110111001111011110011011101001 0111010110100000001010111110010000101001111110000101110111100010101111000110011011100011000011100100100100110000001011101000001001110010000110100111100111110110011011111001110101100111011000100101101000001000001111010100011100010100001010011111001000101010111010000110011010011101010101000001010111111110010100101100110100010100001011100011000010100100010000010000000001101111101111000111110101010100 0010000001110011101011101110001001110011101000000111110000101001011110001011100101111111000010000011100111100100110110100010000110101010100100011111010110110010010010101010011111101011110010010110000000111100011001010010101101011111000011011101110101100011010110111010010011100101001111100101110000101100101000001110101101101000110100100000011011101111000100100100011111001010010101000001100000100011 1100101001010111111110001111110101110111101110100011100010110010101100000111010110111000000000111100110100111010001110110100100111001101010101000100101101011100111100110001000001010011110000101111100111100110101011100010000111110101010000001001011111101110101010100000100011101011000100011111110000111100011000101011010000000101011000011100001100111110101110011111100010010010010111111110100100111100 1010011011010101110101011000000110111101000011000010011111111001100011000001100011111010011101101101101111011110000001100001011000011011101111100011111101101110010101100000011011101101000000010000101101001000100011100100001001011101101001111110011010111111001111101110000010001100100000100011100100101110010110100111010111111010010011111010001010110010010100100100010110110101110110100111110010001001 0001101110000010111101001001100001101101000011100100010101101000011100101000011010010001110110011001101000100000111110100111110011111010101001001101100011111101100000110111001101111001100000001000100100001000000001111110110010111001111101100000001011100011000110111100001010100001010101000111111111011111110100100110111101101000100011011001100010111100000010010100111010011100100000010110001110011011 1001110001110101110000000101001010111101111110000000100100100010101111101110100001000010001110011111110110011000010010111101010010110100001011111100011011111011110100110111110011111101100111100101010100011100101010110100010011001111101011001110100101000001000001110111001111100011100101000011001001101001110110100110101001111010111101110000010010011001110010101100001011011010111001111000001111110000 0010011000000111111001001101110110110100000110110111110100011101001001000010011000001100110111010111101001010110110011101100101101101111100001010010011111101101010110011101000011100000010110001101001001011111111001101001001010001011110001110001110110011100011011101010100101100001111011001100100101010011100001010000001001001100110011010010010111101100111011101111100000001011110011101011000001111100 0011011000110010110010000001111111010100100100111000000011011000110000011001011010101000011000111001011001111110010001110001011011101001010100100000011011110001010001111110000110010111101111101100001111011011001010101110011110011000001000101011001010001010011010010010011100011101011111011000101101111101010100011111000011111001010000100111100000010001001010111010010111100111000010110111011100111110 0011110100001000110011100010000001001101101111010110011010001001001000111100001001111011110011010011110011110110011001111011110000001001101110011010101100010011011010100101101011001111100000100011111100101111001010011011001101110000101010101101110110001101011110111110101001001010100011000011110111100111011000010011011001110001010111100010001011110110110010100011011101101000000100010011111111100100 1011111010111110011011100011111111101011111111010101001111101001010001011010101110110100001100111000110101001001000101101010010100101100000001111100110000011110001100000111000111010011000010101000011101101101010111110101011011001000111000010111110000011110011011001101011000110100000001101111011100111000011100110111111011011011101111011000010101110000111011100010011100001100011001011111010100000110 1101111000101111101001000111011001011111000101100100000000100111100100011101100010010101000100001111001010011011100101100110100000011000101101101001100001011011110100000110110011100100001001010110100100001001111101110001110010001100110110001101001111101101001001010000111010111010001101010001111101010001011001000111010100101010010110100111101001111100101111011010110111100100111101110001011000000101 1000110101101001001110001000010010111101001011011110100001100011000100001101111111010100110010010100100101101111001000010111000000010001000001100010101001010011101111001010111010000101111010101000100010011100000100011001111011011000011101010100101000100110001000010110101000111011001011100101110010000011001000011111001101101100010101101011101010000110110011000101011001100010101111000110010011001110 1101001001010111100001011101001010100011110010111010010010110111000111101011010110001101110001001110001010111111010111111110101011001110110001111011110010001010110101100010000001010010111010010111010110110110010101100111101011010000100110010010001100000001010101110010111110111100101110110000010101111110100000100011000100011110010011110001101101100101001001101111110000101011101000011010001111111110 0001110000111001101111010111110001110001101100011100111001000110001010101100111011111100001010010110001010001010000110011101111011111011101000110011110110101010000100001100111100111111100010001101111111011010111100010001100101010110110110010101101011001000110111010111101001100111111001000000000011111100100010100101011011111101111100001100110101111010000010011100001111000010010100111110010001110111 0010111100100111001110101100111110110010100110110111000000101000010011001110010000110000100101100100111000010000101010001100101011000110010101011010001100101101110111111111001001001110010100010100100000110000010000101010001001001100001110110100111110110011001001010110110011011110001111010010110001001100000110110110001001111011111010101000101000001101011111101011101001001001000000000101100000100111 0101011000110011010010110011000001010100100011000001110001000101110011100110001111100010011000011111010011000100100011101110110000111111011001010100000011111001000101001101001111001000001111011101000100001111100100000100011101111111011110000011011101101110110111100111000100001011001000010101001011001110011000100100101110111010111010110100000110110011100001110110010001110011010011001110111101011100 0110101101001010111110100111011001111001100101000010110100001100001111100111011001100100001101110111111101111110101101100110100110011011100101100110111010110111111001010001001100011000000001101101000111101111100001000111110101001111111101110011100001100010111110100110100010101100101101100110010000100100101111110000111001010010101000010110101011010000100000100110100010101000000010100101011000010100 1101110000011010001111011111001011101001010100100111100010110101100100110100001101110011101011110001011110011111101011001100111011111111011100000101001011100001101110011011111011111010010110000001101111101110001000000010001010000111111111101101010000110110000011000001000111101111011001101010100000100000110001110101100010001011000010101010111011001100110011101100011101111101001100011101000110001001 1011011111111001000010111111110000100001110100000000101110000111101100010011001111000011110100000011010100110101110011001111100111011000111010110000011010001001000111010000011100100100101001000111111100101011111100001011101110101110001011001111001010100101111001111111110101010011001101101110100001101100100110110011001100001110010010000000001011111111100010000000011100111000110101110110111110001000 0001000101001110011011101011101101010110111100101010011001101000111111001011000110100110000111101110000110011111001111001011101001101100110001101111110111010001101101110100010101010000101100100100101100100100111110001111110001001011011001011101011000101110000111000001100010001010100011001111101011100010001010000000100111101010110100011010100110100011100101000100111100110010110001000001100011111110 1010110111010001110110100100000011011001100001000111110010101011111001001101011011110111001110000010110001101010010100001000000100011111111111101101000000011101000011001001111010011110100000100000110100110101101100011000010001100101000111010011111111000110011101101111110111010000110100000111100111001000100011110010010011110101100011001100111000011001010100011010100011110110011010110101011111011000 1100100000010011010101111010010111010111010001000000100100011011101111101101001100000100010000110111110110001001110011110100110000011000000010100000110101101101110000011000110101110011010101101100011100100000110100100110100000010000000010010101101010110000101000110001101100000001010111100011111001100001110011011000010001110111111011100111111101100001010100010010000110110100101011000111101001010011 1100000100111110000011101101010111100110101101110111110110100110010001000011111000000011001111101100010100101001110100100110001000100000111010110000011011101110000110110011011111011111100011001011010001110011110110000111010000011101100001111110110011000011110011001111010101010010000111111011000001111100110011111101000011001111111111000010011000000010000110000110101001000101010100110110001111000010 1100110001111100100011010110001000111110011011101110010010101100011110100101000010100100011000001001011111100110011010011011100000100100000110011011011001110110011101011010110110110111000111110110001101101110101100100011010111001010111111111110110011000110101100111110111111001111110110100010110011111100100000011000000000100010110110110101111110000011011011110000000001110001110101101001011010010110
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