0001110101101110001001010011011110000111101000011100111101001111111110110010000000000000110001110011110001001010100011011011011011111010000000111010011111110111011101000000000001010101001000100001100010110010001010000010110100011010110010101000110101100111000000011100000000101000100101100010001010111011111101101010001111110000000011000011001000111000001010110001011100001000001010000100011111010101 1001101111111000000110010001111011100001011000100100011000110011000100110001001011100100000110011100101001100100100110011110111010000110110010110100010100100000101100101110110100110101101010001001010010111101000000011111100001001010010000101100100010110100110010001011010100100000011011001100100101100111101111001111011010111010010101100101010011000111000110001100110111100100010010010011010111010001 0110000010011101011000111100101101000110110010001011010000001000110010010000110000110110100100111001101000111100100011100101101110011111000110100101010101011000101111001110111101101100101001111110000001011011101100101111111000100010000011111010001101101000011010101110110110011010110100010110011111001001001010011101100001110010010111001100010111100100101010010110110001011111111011111110111000110011 0000011101111110000110000111111000111000011110010101001100000000000000001001001111010001101110100111001100110000000110011010100011111001101011011101010111000010001111110110110111010000110111101101011001000111000110110100001001100010100110000111000100111101011000111010111111111010011001001101011100010010000110110001101100111010010100000100110001111100000110111111000011110010001011000011110101001011 1100000110000001001010100100100110110111011001011010101001110111010101000010011111100101110110010100011010110110010100111101001111011001011001010011111101110110011111011000000001001111010111111111010001101110011101101010010000111011011000101110000011010000111011010101110000111101100001111100011011001100011001100000010001110000001001101111000010110100111100011110011000011100111010011000110001001001 1000111000110011001110111100111111000011100100111000000111001100001011110101111111011011010111001110101010101000110101001100000100011010010010111111000001100011111100100100000011110011011110000000010001101001111010110111111001110000010110001000001010100010011000001110010000110001000011111010011110010000101110010111010010110101101110011111011011001000110000111101011011010110111001101100001111000101 0110001000101000101010001011100101111001111111000011011010101101010110010000101001001111001001010001010111000000101101111000010100111101100000000111101010011001100010110101010011010011100011111101110001011000110011010001100000000000001101101000000100111001101111001100111111011000011100000011001110110001000100110110000100110110000100101100101011100001100011101110100011001001101100110111101000001010 0111111001010110111011001001110100111010010101100011010010010000101010001000100010000001000010010101111100111110001010001001100100011111101011110111110111110010000000001010010110110010101000110011101100100000100011111010110101110001110111100001101111110001100100110110110001101001100000110001100001010011000101001101000001100001100101000001110101000111110011010110111100101001011111010101110010011111 1010000111000111011110010001110110010000100100100001110010101110001001011110011101011000000100101001001011001011110011101001000000001100010111010111110000011100111000001100000011101011100001101000100000000010110000100011010000011010101000000011101111000010111000001000110000011011100111001111011101101000100111001001000100111110100010101111101000100111001111101110110101000101011101011100001111001010 0010001111111011101010101100001010110110111001111111000100111100101010001011010001100100110110000111100100101011011010001100011010111101010011101010110000110001111110011011111010000000001011101001001100111010100100111100111001100000010101110100010011100111000100100110100111001001000011001000000100100101011001101110000001011111000010111110011101101001010100101100001100010111000001000011001111101111 1111100110010111011110101111111100001101001100011111101100001110010110001111000001110001110111010110110010011111110101011010111010100101110000111110111100010110110110000011111001100011011011101010010100010000100110000011001101111100000100011000100010001001111000001100010010001010100101110100011011011000110011001011011101110110111011100100111011111001110111011100001011111101000011000010001111011010 1011110011101100111111110110001000000111001100000101011000001011100101101111010100001101000110111000011000001100100011100101010011000010111100000011001000010100000011101001000011010010111011100111010011001110100111101011001001100111101000111110111011101010011111110011010000010100110110000100100111001111010111010011110111111000000010010101101011011100111010101100000100110100010011001110100011001100 1001001111001101010110001011001100001110010010110010011011011110010011111010001011110110000001111100100111011001001010110001010101001011000011001111101011101010001001010100011101101010001000000110110000000111010111100101111101111110011010100001100001010011001100010100010111010000011110010000001011110110111001110101010110110101110000110110100111011111111001110111111101011011101111101011100110001010 1001001010111001000111011101111110100111010110101100010111000001100000100001101010100111111110000111000100001011111111000110110110011011000110001011011101111101010101110010101001110010111111011001011111010000010010000011001001010010110100011101101101111011100000001101000001000010000100011001111001001101010101111100000010000101010101010000010011011110101001101001111001101001000110110111110111011100 0111110100110110001111011010101100100110000110101011010011111001010000001101001001010001000001100000010100000010111100111101011001110110110010010001001000001111010100110011001101000011011111001000111010101111010011001010100111101111000100000001011110101010011111011111011001010110001110010011001110111100101100001110110000111110111110110010010010011010000001001110101111011001000010010101100110010111 0000100000111110100010100001110010101011000110101011101000100010101111111101110111110100100111101110011011100000101010111100010110010001010000001001001111010110011010011101001110000110101011110000101001100101010110010101110001111011111100111010011100001000011010000011000011010000110000111101001101111100011000111000001110100110100110011011011011110001000010011111111101000000001111100000111011100011 1110001101001111001110100101011101110101110101111000111100001010101010101100001101111110101000101101101001100101110000011011000001000001010100010101111100110011001110110101010000111110110101101001001010000110001000111100011001110110101001101100010001010101000001100011101101011001011101111101000111010000111000100111101011111101101111110001011001011111011010111010100001010100011011010101011011100010 0110000100000110001010010101111011000111100011111000111001000000100001100110001101111101100110110001010000011000111000010101111010100100101100010000100100110110100100011010000110000110000001111110100010100010000010100011100101000011101111100001100100000100111001000101010010110111100110000111110001010100010101001010011101001010110101001100101110111011001011111010011001011111010010101001011001100111 1110111010010100000100100001001110000100011110100101100110000100000010100110111100010000001000110011101100001100000001110011010110110011101100011110010001011111011010110010111110100100111111101010010001001011101011011001000100110100111101010100010011101101110110011000101101101000011101001000101101011111110001110100010010110110011001010100110111101101110010100101100001001110010010011111101101001100 0010000110001110010110101100000010000000111001101100011101110010010011101100101000000110000111111100110100111011010011001110101010011110000100011011100010110111111110111110110000100010110000101001101011001010101101101010111110011001101111100110111100010111100101010111100111101100001010111111010111010011011001111000000000101001100000111011000011011110001000001110011001011010100001011100001010111110 0111000100000000001111100010000111011001110000010000001111110111001100011000111000011011111011001101111110000000000110001010101101001100010001111010011001010000000100000001100111001101010000100000101101001011110101111110110111110111010011000110001111110111001100110101110101111100000011100000111010001011110011111011010000111011001100110110101110101011100100111110001100010000100001111101001001110100 1110000110011111001110010011001000000111110100101001110101111001100100101011000011000101110111111010010011001001010110110001011011100100111010011110111110110000111111011101000010011010100110101001100011101001001011111010101101111111110101001101010010011110100110100100001001100000110000001111011001110000011100001111011101110101101000111001111101010000011011100010111101101110111011111111101010010101 0110111000100010100100110001111101101111101101000010100110111100000100001011011000010110100110000100110101010000101001111111010100000001101111111010110100100111101110000011001001001110010100110101100001010111000010110000011110010101011011010000110101111111010001000110000101111000110001110010010101011011001101000001111010100101101110101111010110010110001101100010111111000110101010000011000101100001 0010000010100101111101101111001011101100001011010111100101101111001011110001100000111110010011001010101100100010010100110100010000001011010001101111100001110010000111101110111011111010001111101101100101111000110111101111101011011100101110100000010101110110110101110111111010001111010100110000001111110000110000001000001101100111110010101100010110111111110010100010001111110010110011001101101000100011 1111010110001010100000001100101101111000110001110111011100000011100011000011110000000111111001001001010000100111100100000000100011001101011001011011010100011111001001101000010001100101011110010111111010101010100110111101000000000011110101011110101101010010110000110101000011110100101010111010011010101010110011100110000111000110110101011100000001011110111101011100000100100110011001011011100111110011 1011100100100110111010000110111000000000101101101010101110010011010100000000110000011001110101100000111101111011001101011010000111000010101011010100100111101010101100011110110010100100011011000111110100110111010010000100110101100101100101001011100110000001011010000001001011001010011001000111011000011001001010001110000101101101001010110100001100010110111100111001110100101110000000010011110000110010 0100011001000111111010111111000011011011001111000111011001100011101010110001100011110111100010100101000110000111101000010011011110110011010010011101100100101000110011011001101101010101011000110110101011011101100001010001111110101001000001101010000001101100011110101101110101110101001001001000101110011011011111011000001011111111010011000000111110011011100111110010111010111110111001111111000111000011 1110110011111110000011111111010010001010101110001010010101111100110010011010111100111100101001111010011000011011011011010111110001000101101011010000011001111100100101100001110001010010110100100001000010001110111011110001100000000101101100111101010010001000011110110001111011010100001001110010110011000010110100010110110100100110010110010000101010111110011001101110101100000001101001001010000100001110 1110011100011110010100000101100011101000000000111111101111110010001101010000001010011100001111101001100000000101101110110101001100101101111010110100000010110000010111001001111011001110011110100000100100101000011001010011110101110101011100011000010100010100010110010001000110000100001000110001101110100011011000101000110100110110100000011001001101101101101010111100110011011110010000101111011011010111 0011101011111000001101111100101010010000011010010101111100111011101011110111110110100001111111110001100001101010011100100101100110000100011101100111000011001111100011010000011111011110100000110100110001001011111000000100011110101110011011000010001100111111011111010001101000101101100001010000011000101111011000100011110000101010011111100011011101110111001110001111111111101001110111000101100111100110 1100001010010110011111100010000101001001011011010101001110110101110010010011100110011001010110110011110101100111110011010110100010110100111100001111110110101111110110100101110100010101000101011100000111010101011011110010000000110010000111001110111101101001101110000111001110111000011001110011100011110010010110010011110101011011011101000110011001110110000101000010100000001101001110110111000001100000 0011010111010000111010001100001011111010010011111101001000001111101101010101011100011110001110101101100101111010111011101101101111111011100000011010000010000010001100000011011000101000111001010111000000111011011010100111100100110101001111001011001001000011100101110100010011111001110111100110000111100100011100001111101000110100001111001110110011000000110110100111001011000110111110100011100100110010 0111001001001000011111000010111100111101001001100110010001001110100011010111110000111100010100010011001101101100011001000000010111101011001010110000011010100000001001011100101110011111111100010001101011010011000010001010001001001100111001110111100000001110010011011000001000011111111000011011000000101010001010000011001000000111100001010111001010011000101101100001101010010001110011001101010011111100 0100011010110010111010110010010010011111100010010110101001001101110111000011010011010101001111101111001100110100010111101110011000011110011111111100111110011000000001100000000011110000111111011011011010110011000001000001001101110101011101101111000000111111000000110011110011110001110100000001011101011111101010111000011100110001110000001110010001011010111100101011110010001100001010001101111100100111 0111000010000110001100110101101010110000001111000011000010001010001010010111110010111011101100110011000111010011101110001110010101111011100111110100000000001001001010101100010111010010000010111001110010001110101001011010010100110111011011110010101010100111110110110001111010010111010010110001001010110111100011110001010010000000110111010011101101110101100000010001101000011110010100010011110000100001 0100100101111000000001101010101110111111100101100000101101101101101110000111001011101001110011001100001010000001101010101011010110100111000001100100011101010100110111010101111110110100000000100100010100001000101010010001110011111111001001101100011100100111110101100011001111111010011111001011110000001011000100111111011001111000100001100101110111100111001100001010011110111110110011101010010000100111 0011000101111111010001111110101111011011011010100110101011100000111100100110110011100011110001000000000010110011000000100100110110010001111010000000101000110100111000110100000000101110111100011111101110101110010110100011010011000101010111010111011010001011111000111100010110000001010111101111001111101001000001100101110010100100010101000110101000011101010110010111001010011110101011111110110101000010 1100100000000011011001101100111100011001010111110111110000101101001011101010111011000010101101001101000110011010111010100010000001011000011100101000110001111011000011110011011100100011101001110010101111110110100010010100100000110000001110011001001011100001011101001110101011111101011110111111010001100100010101011101100010010101111110010111101001011100100111001110011100001000100100000110001101110110 0011011100000001010111011000111111110000101101001110111011111111101100100001000011111010101100010110100001010000011101101101001100101110011010111111000001011100011111001000100001110110011010011011101001100111110000000100011000110010101101010100011011001010000000001011010100001011001010001001110011000001001011010110011101010100111110110101100111110001110010101001000001110010111110001101100000001000 0100000010000100010001001110011011111011000110010110100011111000010000001000011110011110110000000011000010100101000011100001001111111010010010011110000101001110100010011111001001100011101111101001110100001001001111011111100100110010100101100101001010000110100111000001101101111111111000000100000000100101011111101101111100010001001100110000000111010001011110111100111011001000100010110100111100110100 1001111001111011010000000101111010000100111001101101000001100110110111111011000100000011010110100111010001011010010001000110101010110000101000111000100011000001010000111010010000001001110001001000111011110011011101000000101111110001100110000101000000110010000101010111100101010110001110000101110101100011011011010010101101010011010101000110101011110111100111000010010001100001100001101011010011010011 0100011000001110110100000100001110001001110110101001101100101011000000010011111011111011100110110001101001000110100110011110011001011111011110001010110001100011011011110000010101110001100101011110101111001010010111111011010001111010011000101100010111111111101000110010001010001100011010000001101011111111111100001010011101001010011011001101000111000001000011011110000110110101100100110011011010010110 0011100011011010000011110011101001100111000110101110111111010011111101100101001011011001001001010010101000101110110001111100001110001101000111101011110000001011100110100111001111001011100011011110000111100000101011001000011011011000110001111100111011011110111000110111110001100010001010001110100000100110001010000000110111110101011010000000010100100100100100110010010111010001101101111011001101010000 1010100001101111000111100011001011110100000001000100101100001000011111101011110110010001000001111111010110010000011010000110011111010010111000011100110011000000100001010101011110010011001100001010000100001110101011101111000010011011111110000011001011101101010100001111001110101110001001011111000001011111100011110001100011111110101000001111101100101011011111111110011110110011001010000100010011001100 0110000001110100101101110000111000110011001011111101110110101110011000110110101111100100110001011010010011000101000101100000011110110100011011011101110110001101101010111100110011010100110000001011111000111010011001110100000001110010010101010010101010101011111110101000000011110111010011111100000100000101011010101000011001010011011010000000111010111110101011110101010010011000000100111010110001001010 0100110010010000011010011101111001011110111110101111001000011011010101110001011000011110111100100011110111001101111011100010011101111101000000110010000111011110010010110010100001011101110011100000101000001010101010010001010011000100010001110110011110110010000010110111011000011100001001111001010001111011110000011111100010111001001000000011000011010100101100101111010110110000010111010110011001100111 1011111110001000011011101010100001101011010100010010000110001011101000001101000011100111101110110010101100010100001011100100111010111011100011011000011100011000001111110100111111111100010100111101110110001011010001001001110110100001001001011111001110101100001001001010100101101000111011111001101010010001100001010001010111111000111010100111111110111011011101100011101110111010000011101111001110110011 1100000111100001011100111101011101100010011111010110000101101000111110110001101011101001100010100000111101010001100001110011011110111011111100101011101100110011001000011110000101110011111110100011001011010101000001000100010111111111111110101101010011011011100100010010001001110000100011001100001111011111101001010111100011010101001110101011100100010101111110011110010111001100111010000001110101101101 1111101110011000001000100101001011110000000101010001010110100111100110110111111011001101100101111001110001011001101000000111101110100000011010011110101100011001101010011100000001011000010111101101010001110111001110000100011111011111000000111001111111110111111001100001110011010011100110011011111110010001010011101101011000011011111100010000101000100101110011001000101101110001010111000000001101111111 0010011010110100001001011011110011000001100000001100001110111001001001000011011001001000111101111101100111111111000101011100000110101011010001111000011001110101111000111111000010001001011000011111110101000101110011101101100110000101101001011011010011110111111000101010011100100110000101000011000011010000110110000001010111011010100111010001100110100100001101010110000001011110101111111111110111110001 0001010101100101101100111101010111100101101010001110000010010010001010101011110111010000110100101100101011111010001101000101001000000000001000011001100001110000001111100010010000100111100000100001000010100000000000111100010001111000101011110101011101110111010110000000110000010011100100100001010101111100001101010110001000001111000110111000100100001011101001110111100001010110100000101100101111011011 1011111111111100000011110111100110001101100011000001000011001000010101101101101110101000111011000011010100001000111111000111101011001010000010000000100011000011100100000010111001010010100101010000001011010101101101001101100010010110110000011100000010111100001010011011110101111011011110001111110011011001100000111010110110110110010101000000101101100100010111011110011000101001001111111111010011011011 0010000111100111010100110010100000001001101000110001010110001010100011110000010001100100010010110001000101111000011000011111010110010010110110110010100010010011110111101010010010001001001011011001001111110000010111111110110111010011001100001011010011100001011000001000110110111101111010011001011001010000010101000110110111101000011010111111100000110011011100101100111011001011111110010110010010111010 0100000101000110100000100011011010010100111110011000000111001011000000011010110000000001000010111000110010111010110101101001110111111011111100100111100001010010000010101100100100101011001110111111001111100010011001011000000110011110100001010001101100010100001101110001010010110100011101011000010010010010111110010101010111100100010110000000101000000110111010011110000010111110100100111101111001100101 1111110010111001010010000110110111011010000000100100010100011100010110001001011010000011111010010101111000111010100101001011101001001011110110010011001010000101111100000110100101010011111101010111010001100001010001011011111011101000001010000111000000111001100111110010001011010010000111101000101100110000100100111010100010110010011001011111100010101101010001111101100101010010110010010110001111011001 1000010100000011011000000001011111100101000110110110111000011000001001010010111110010111111010100001010110100011101110001101110011111000001101101001110011001101011111100011111110100010011000001100011011101000100110001110010000110110011111000000111010110100011110101010100111011011001110110010001000110110011000110111010001001110111010000110111000111011100000101001000000100100010101101001010110011111 0001011011001100010100110010111010110110001101001100001111001110111100110110110011000011100101001110111101110101001101001110011000100110011110111000101110000001010000000010011001110011011111010011011000001111001110000111000111100010000011010000001010010001001000100111111011010000011101001101000001000010111101011011110001101001000100101100001011000001110010111010001010010010111100110001111010111000 1000010100100100101001001011110011100010011001111011100011001011101001001111000110110011001110111001100011101110000110101000011111101010100100011100001001010111100100010110011000010001010101110100111101101010110111111110010100110100000001001011110111011101000101010011101000001000110010111110110110001010101111001001100101101000111001010000110110101010001000010111111010101100110100011001010111001011 1110010001100000010110101000001100110001101100111100000111101110011000000011100110000011101110010101011011101100111011001011010001101110001100001100000100011010110100001101101010001001010001100110000100111001000010011110100100101110000100101110010010001100111101000010100000101000100110110100001000111000110011001011010001000100111001110110101100000011110111110011101111001110010010000010100101000100 0001000110101101111100111100001001101001111100011110011011101100100011000100100110000101111010001011010100111011011100100000001101010001000011101110011100000100010010110110000110001000001001101110000101011011111110101101100110001100111111111110100100101110000000000000100001111001000000101101000111011011111011011010000011100000001001110000100010010000111011101000011111000110101001011100010011100110 1111000001000100000001111001000111010001110101010000111000111100100010100000100111000011111101000001000000011101010110011011110010000110100000111000101100000000100100001100011101000100100101001100010110101101001101100111001111010111001110110110011001000100001111111101101111010001100111001000101100100100001011010101000010110011011001010000000010011110000101100101011101100010001000000101010011001101 0001010010011011000110000110101011011001101100101000110100101101000011111010101111010000100101010100110000110000011000101111100101010111011011011011010110100111001111001010001000011011110000001111100011000000010001010111001100010000100101101100001111110100111101000111010110011101011101010110100011110101000111010100100010000011100011010110100010001110001100101010010110100010101001101001110011101100 1100110100111001001111101010011000000111100000000000001001010100001111000010000011001101111100111110111011101100000101011001001010010000110101000010001010100100110000100000100101100101111011100001001000001100000010010010010111011010110010000001000100110111011011101010110110111111011101101100111011101010110000010001100010010010000110110011111001000001000101001001111000010111001111100010101100001101 1111110000000101000010100010010000000101101001111111111000000010110101010010011010010110111111010111100111011001011000110011101101110110101001111011101010101001000110001100001001011010000001101011111000111101110010110111000100110100000110000011001110000110100011101110010010100111010101011010110001100110000001110110000111011100001001000011111010011111110100111101000100011001010101101101001101101110 1100001001010111011001110011000101001001110110100001110111010100100100001011001100111101101011110110010000011100111001000011110110000000000101101001001111001000000001010000001000110110101100001110001111111011110110001100010011010010000100010010000011000100000001010101100011011011111011110010000110111111011000101000010101000101011011111111100010100001011110001101101101001101110100000110001001001011 1111101100010100110001101110111010011011000101110111101111101001000100010101001101001101100001010101111001000111101110011011110011101110100111110110000001010011011001110100101001100010101001110110101010000011001000000110001101000111111000001111101011010100000011011110000000111111100000100100010011010111110101110110010110011100101001000101110000011001011011011000001001101101000000010100110010111110 0111001010101110110101000101101111010000100011101001001001000110110001110001111010001110100111111111000001110110010110011010011001111011011010011101110010000101111001111110001000001001011011000001001100010000100111110111000011101001110100100001110001000011010010101111000111011011101111011110100001011101000101111011011101000010010011010001000010001001000010011001010001100001100110110110010000110000 0000110111111100111111000011100111100001101010101010011101110010100110111110010111011110001011000101110101010100111011111001101001100000100011111000011110101001110101001100011111011111101001011011010100010000111111011110110011000100110110110001001100000010100011010101101100110101010101001101100111100010111111011100100101111001110010111010100010101110011110110110100010111111101110110101101111011111 1010001111010110010101001111100001010101100011111011110101111111000111101011101000011101111001100000110010011111001101011000000110111110011110001110001111001000010111100111100000010100101100001010110000001011001111010011100010000000001011001101011101001000001000000100010100111001100001100000001010111011110011100111000101011101000110110001110011101001100100010101101111100000011111010010000100100101 1001110010110011111000111111011111111011011000011110000010110001010110011110000011001011110010110110100011011000100010011111110010011101101110010011111100000110101110011011100100001101010011000111111001011111101000110001111111101100000011111011001111111001011110010011001110111101011111010010001000001110000101001110010110110001111011110100101100100101110100111111011000110000100101010000111111001110 0011101001111100011100000000111111111011110001110001101111110101100000011111010100000001010001101100000110110000001110001000100010111011101101111000111011000010000110001011111010010110100101100101100101100000001101100011101111011001001001101011000110001101001111110000101000100000110001100101100000100100001000010100101101111010001001000001111111011000100110100100100011111110010100101100111010101101 1101000110000010111101011100101001100100110010101111110100110101111010110000000101110010100001010000000101111001010101000100011111011100011100010000100111111000000110110011010000000111010110010110000100101101101000000010010111000100100101101000011100001010000101011110010100110100101001100111001110101100111011100001011011100101101000110011011101010110111111010011111100001011001011100101000010010011 1101101110101100100100000110001110000000001110001010111100101011001110011011101101001111010101110101000110010000001111000010010000100000111001110111000100111110001011010101111010011100001010101110010001101100000000001110111110000110101101111100011001100001100001001001010000000101000101110111100011110001010010101100110001101110100001000100101000100100000110001010111101010100110110111101000111100011 0110110000111110100001110011111110110000111100110010110110111001101000001110011011001001110110100010011101100010101101111101101100110110111110110100010101111111110100110001010001001000101101110010001001000101111010100011111100010011000100100110010011110001000000001101111000001100101001111010110100011100110010110111011110001000001000011000010011011100110000100011100110011111110100001001011111010001 0000000001010010111111010101010101011110111111110010110001101001011100011001101010110010100000011101100101000100111100001001100111001001101010110101111101011100101001011111001011010011110001001011101010000010000011001100001000001100101110101111010111100010011110011001000000110100110111101000100101011110110010101101110110010011000100110010001111000011101011101000011101100100111001000000111011111001 0011001010000100100101011101110111101111010011011111010011000011001100111101100110101111010001100101101011100111100110001011101101101110011100100011110001110011100110011011101001100101110011100101001000001100000000100100111001100011111100010010110101000011100111010001111000110000101101010001010110011010100110010100001111011011011111101111000111000111111011110000001010101111100011100100011010010011 1111000111111101011011100101111001010000101111010101100000011001110011011000101001000000001001110001010011011011000101100010010001010010001001010110101110001100010010110101000111101101000011110111100011111000011101101101111101000101111100000101001011000010111010110000011101010100001111111000010000001001111100011001010111000001011011101000101000011110100010111011111101110111101100101100000111110100 1100010101010111100000101100101101001000000001000011101101010110001000110110010000111011011011101001001001100010101001111000110100111010111000100011111000010011011101001011000010110001100001000101010101100010001001111011000101000110010101110111010101011010001000100101001000001000100101011001011110110110110100000100100011000111100110001001000010000101101100001101101111111001110011011000001010110100 0111100010011110001101101000011000001000011111111011111101011000100000000111001111110000010100110001001110101110001001101010110110111001110010001010101001000011110000101110110101110000101110010010100010001011001110100001011101100100101100010000000001100000010101011100100101110000010000101000011101110100000000110000111110110001000001111100010111011100000101101010011101001101110000110111011101100110 0000110010100010100001000000101111111010010111000010010000110000100000100101111011010001011001111111100001000100110010101101000100000011000100111101110111101111010101110111111000001111100110100011100001011110101011000100010001011011111001000000001001000110100111110101111011011000110100001001100000000000001111001100011110000100100101111101010000011101110110111000111011111000001101001010100101000100 1111100110110100101011100101000111000110010000010110001011011101111110111001101011100010010001111011001111111000010000110001100101101000001001001001110111110101010110000111111111110110101100101111101011010101000110100111111111101100110101111010010010110110100101010101010101100101010111101011000010111101001110001000010100000000100000110100111000000011111100010001111011011110000101001110100100010000 1101010100100111110110101011100001011101100110000010011000101101111110010100011000001011101010110000010111010011110001110101111101011001001010000001111101000110001011110111010010111011000001001011111100011010100000111011000111100110001100100100110001100110000110111100111001110100110101011111110100010100111110001000110000110111001001111100100110001110101111011011010010111010100010101001011101101010 0100011010001010111011101111111011101110110101000001110101101001011100101110000100101000010101001111111001101000111001001111000100011011101010111100001101011111100110000111011000001010011001110001010110001110101011010110110001010111101010001011110100100010010000101000101010110001000001011101001000001101001010111011101011011100100110000100101110001110110111101100101010011110011011101001101100011110 1010110100010010110101101100101111010101001001111100100100000111110111100011100000001101110100101010011011001001000110000110110110100100011001000011000011111100011000110110000001000011010000001110000000101100100000000101110011011100011011110110000110100001111010101011101101011001110010001111100000011011101000100010101001101001011100100111010100101010011000100001000011011011111011110010110000101010 1010011010011111101100101001101010110011011101010010101000011000111011011000111000000111010100000011111010100111101101000000000001000010000001000000111001000111001010000110101111100111101110011110100100011000101010111011010000100010101100100110101010110001010010100001110110010101000100000010001010101000101000010011001010010001101011011001011101011110001010011000000010001100110001110111011001010111 1111101011100000110100001001111001010101110000111000110100101110010000001111101011001100100111111101101101101111011001010010101000011101101001111001001111011000101010011110111000000010010100001011110000110000000110101011001111010000001100000100101011101111110110000111000001010100111011010001110001110000111011110110110011100001011010110010010100011100001010110101101001110000001011001110100100111110 0001001011110010001001010110100111100010011000001101111010101011000111001101011111000100111111110000001110101101100110101110001011001000001100011000101000111011000100011111100110000101111101110110101100110000000001110100110010101111111110100110000111110100110011001000111110111100011111001110000010011101101111101101111111000000100100011111110011111010101110000100001101101011101001011101000001011101 0010001001011010010010000011010101111101001100010011101100010000111000111100101110100110111010111101000011001011011001011010010101110011000101111100110111101101101100101110011111101011101111011101000111100111101001011011111100111010100010100000101100000000110011010110000011010101101110111110010110101100110010110111111011110111111100100001101101111110110110010010010010000011001001000011010010110101 1111001110001001111110000010000001100010001111100011000101111001100100111010110010000111110001011000101011011010000110110110000111010100101000111011011001101010111101001100110001010101011010010001011001011111010011110100101001111000101111111000000100011101101100101010001101011010111110010000000000111001000110000011011111110110011100110110101100001100000101000110000110101000101101010010100001010010 0110100011110011000001100001000100111010010011001100010110110101000100001010101010000100100000101001000110001110000100001000100110100101110100110100001111000001100000001000000100110011001101100010100111110101110100100011100100101001011110001001111001011101000101000000110011000101110110101100111110101100000101110100111000011111000000100100110000110100011101100000110101011001101111001110011000011110 0000110110110110100111110010110001100100100001110101100101010111001100110000101010000111011011001001011111010101100111110100100010010100111011101101101100111011100010011110101001011001011100101111110000100011111010000000111011111010011111011000100100000111111011010100110101010001110010001111110111000011100101100101100111111110111000110100000001100110001111100001101101101100011000011110110011000001 1111110011101010100111111101011100010101111110011100100101000011100110101101011101011001000001011110100000010011110110011001100110110101101100111101011001011110100001100000011011011111110001111111100011110011111101000010100100101110100010110110101010101101110010001110110000010101010010101001101001000010110101010000000110111010000000001000101110111011000111010101010010100101111110110010001010110100 0010110001101110000000000000010101100111110101101110000011010000110011110010100001101101001010000101110101011000000100001000111111110001000101100000000101100010100101000111011000111010010111010101100010011100101010011100100100101010111110111001100001100000110110101100110101010101110111000100011000110111110101110011101111100111000011000010111110110111110001110001011010101001000111100011001011011011 1000101101100101110011000110110011110010100100100010101111101011011100011100101000001010100111101000100000001111111110011000110001000010111000101010000101111100000001101001010010100111110011110001011100101010000111101100101100011011011111001100101001011010000010000011010010000110000010001010110101010110101001110001101000101100100010001001011010011011100110111000011000000000101111001010001011000100 0101000011111010001110100100101010010111001101101011010001111010011101101100111011010100010101101111000011000100111100010010100110011010011100110000011010001111000001101001110100101000000100001010100101000011100100001101101000001111111101000000110010100000101010101010111111101001001110101100011111010110000100111000000100101100011011110110001011111101001000010000111001010011111000000101001110100100 0010111001100111011011010100101100010000000111101010001011011110001001011001010111010001010000100000111010100111001011011000110111110110011010001000000011000100010111010001111110011011010101011111101101110001101000010001010101101010101100110001001011100000101100110000011001111001010001000110111111110110011000101010111011011110000011111011010010001000111010010100010110000111001110001110110110001010 1000000110101110001000110101101000011101101100010100001110000110000101001101110010111101111001100111001010011110000000100011011000111101111010011011100110101001011101111010110010001000001110011000000001001000100100001010111001000001111110110110001111111111010110000001011010101010110011000011010101010110100101110001001110101001010110011100111000001000110110101000001101000000000111100010001010101000 0100000011111000110100001101110100101001000001100001100000000011101110111110101100100101000001100000110011100111001110001110100110011000011000101000011011001000100000101110111101101110110111110101001010001100111110010110010110000001011001101010010000000111101101011010000101010101011000001010100010001011100101101010001111101000010101011100111101110100111001010010100001010010100001101101111101111011 0010000100000010010000001001111100000010100100110111010011101111010110010011110100111000001101011101001100000101011010011110100110110011110010101101100011001001100111110110110001000000100000011111101001100111110010011011000111100001110111001110111011110010011110110110010011010111000001111100000100110110111010100101001101100001001101011000100001110011001110011001000001001111000111101011101110000101 0101011010100100110001011000111111011011101110100100110101101110001111101110010011110100100010010000000101110111001001001100100101111101110001011010110010001110011010010010001111110001001001101101110011001110110101110101100101110001000000011000101000111111111100011000111111000011110011111000001000101100111110000101110101111001111101100001100000100111011100110100101000100010110110010001100000110011
cTrader Algo

【cAlgo】サインツールを作る【SampleCode】

5/1/2021

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

サインツールを手軽に作りたい

サインツールってあるじゃないですか。こんな感じで売買タイミングを示してくれるインジケーター

もちろんサイン通りに機械的にエントリーするなんてもってのほかですが、決められたルールでサインが出たときだけエントリーするかどうか検討する、みたいな使い方をしている人は多いと思います。

今回はcTraderでこんなのを作ってみましょうというお話です。

 

単純なサインの出し方

例えば、終値が20期間MAを超えたら矢印でサイン出したいとしましょう。こんな感じかな、と。

SimpleMovingAverage _sma;
protected override void Initialize() {
    _sma = Indicators.SimpleMovingAverage(Bars.ClosePrices, 20);
}
public override void Calculate(int index) {
    if (Bars.ClosePrices[index] > _sma.Result[index]) {
        Chart.DrawIcon("buy_sign", ChartIconType.UpArrow, Bars.OpenTimes[index], Bars.ClosePrices[index], Color.White);
    }
}

ただ条件判定して価格部分にChart.DrawIconでアイコン描いただけです。

でもこれだと少し問題があります。このあと、値が戻ってMAを下回ってもサインが残ってしまうのです。

おそらくこの類のサインであれば本当に知りたいのは「バー更新時に前の足の終値がMAを上回ったか」だと思います。

であれば、バー更新時だけ条件判定しましょうか。

SimpleMovingAverage _sma;
DateTime _lastTime;
protected override void Initialize() {
    _sma = Indicators.SimpleMovingAverage(Bars.ClosePrices, 20);
    Bars.Tick += _=> {
        if(_lastTime != Bars.LastBar.OpenTime) {
            OnBar();
            _lastTime = Bars.LastBar.OpenTime;
        }
    };
}
private void OnBar() {
    var index = Bars.Count - 2;
    if (Bars.ClosePrices[index] > _sma.Result[index]) {
        Chart.DrawIcon("buy_sign", ChartIconType.UpArrow, Bars.OpenTimes[index], Bars.ClosePrices[index], Color.White);
    }
}

IndicatorにOnBarメソッドはないので、自分で用意してあげる必要があります。(BarOpendイベントやIsBarOpenみたいなプロパティはあてにならないので非推奨)

とりあえずこれで更新時だけサイン判定ができるようになりました。

しかし、これだとリアルタイムでの判定はできません。実際はリアルタイムで条件満たしたら未確定でも一旦表示してほしい、ということも多いでしょう。

ついでにいうと、これだけだと過去のサインは表示されません。表示させたければ、Calculateに別にロジック書くか、過去分判定用処理をどこかで別にする必要があります。

 

いろいろ考えると結構面倒

ただサイン出すだけのツールとは言え、作ってるといろいろ出てきて結構大変そうですよね。毎回サインツール作るたびにこんな共通ロジック部分に時間かけるのもばからしいです。

というわけで、これらの要望を簡単に満たすべく、サインインジケーターのテンプレートとなるIndicatorを作成しました。

これを使えば面倒なことを考えずとも条件判定ロジックのコードを書くだけで、サインインジケーターが作成できるようになります。

 

SignToolsTemplete

主な機能

・サインはリアルタイムで表示されます。未確定のバーでは出たり消えたり繰り返します。

・サインが出たら音声とチャートに色付けてアラートを出すことができます。(アラートの色はチャートがアクティブな状態で何かキー押せば消えます。)

アラートを出すタイミングも指定できます。「その足で最初に条件満たした時点」か「毎回条件満たす度」か「サイン確定時 (足更新時) 」かのいずれかで指定します。

・検証用に過去チャートでサインが出てる場所にボタン一つでジャンプできます。(冒頭画像の右下のボタン)

 

ダウンロード

こちらからどうぞ。サンプルとして2本のMAのゴールデンクロス、デッドクロスでサインを出すツールになってます。

Indicatorクラスの中身を自由に書き換えて、お好きなサインツールを作成してください。

 

使い方

ダウンロードしたサンプルを見ればなんとなくわかるかもしれませんが、一応解説します。

仕組みとしてはSignIndicatorクラスにサイン表示やアラートを丸投げしてるだけです。作成者がやることは判定用のメソッドを作って、SignIndicatorオブジェクトに登録するだけ

 

①判定用メソッドを作成

まずはどんなときにサインを出すかの判定メソッドを作成します。このメソッドで受け取るindexはCalculateのindexと同様のバーインデックスです。

ダウンロードしたサンプルをそのまま使うのであればBuyOrSellメソッドの中身を消して、ここに判定ロジックを書いてください。

//-------------------------------------------------------------------
//  サイン判定メソッドはこんな感じで用意
//     必ずindexを受け取ってTradeTypeかnullを返す形にする
public TradeType? BuyOrSell(int index) {

    // --- ここで条件判定を行い、買いサイン出すならTradeType.Buy、売りサイン出すならTradeType.Sell、サインなしならnullを返す。
    if (index < 1) return null;
    if (LongMA[index - 1] < ShortMA[index - 1] && LongMA[index] > ShortMA[index]) {
        return TradeType.Sell;
    } else if (LongMA[index - 1] > ShortMA[index - 1] && LongMA[index] < ShortMA[index]) {
        return TradeType.Buy;
    } else {
        return null;
    }
}

自分で作る場合は返り値と引数の型さえ同じメソッドであれば名前は何でも構いません。

買いサインを出したいとこで、TradeType.Buyを、売りサインを出したいところでTradetype.Sellを、条件合わないとこではnullを返すようにします。

 

②Initialize内でオブジェクトを作成し、各種設定

Initialize内でSignIndicatorオブジェクトを作成します。コンストラクタにはthis(Indicator本体)と、①で作成した判定用メソッド名を渡します。これだけでサインツール完成です。メソッド名を渡すときは末尾に( )を付けないようご注意ください。

以下はすべてInitializeメソッド内に記述します。

// --- サインインジオブジェクト設定
var sign = new SignIndicator(this, BuyOrSell);

設定は特になにもしなくても動きますが、色やアイコンを変えたい場合はプロパティで変更可能です。

// --- 色やアイコン変えたければ変える
sign.BuyColor = Color.Blue;
sign.SellColor = Color.Pink;
sign.BuyIcon = ChartIconType.UpTriangle;
sign.SellIcon = ChartIconType.DownTriangle;

また、デフォルトではアラートは作動しませんので、サイン出た時に音声ならしたいならSoundFileにファイル名を、チャート色変えるならAlertColorに色を設定してください。音声はNotificationsプロパティのPlaySoundでここで指定されたファイルをそのまま呼び出します。

// --- 画面色替えアラート。色を設定すると有効化
sign.AlertColor = Color.Yellow;

// --- 音声アラート。ファイル名を設定すると有効化。フルパス指定の方が確実。
sign.SoundFile = "C:\\Windows\\Media\\Alarm01.wav";

// --- アラートタイミングを変更。デフォルトはUpdate(バー更新後のサイン確定時のみアラート)
sign.WhenAlert = WhenAlert.FirstAndUpdate;

アラートタイミングはデフォルトは「確定時 (足更新時) 」です。タイミングを変えたい場合はWhenAlertプロパティを変更してください。

 

その他

サイン表示だけであればCalculateメソッドは使用しませんが、サンプルではサインのタイミング確認のため、サイン判定に使用するMAを表示させています。この辺りはツールに応じて自由にしてください。

また、サインをトレード検証に使うなら、右下に出現する次のサイン、前のサインにチャートをスクロールするボタンが便利ですので是非ご活用ください。(不要の場合はコンストラクタの3つ目の引数にfalseを指定すれば消えます。)

 

SignIndicatorクラス詳細

細かい設定したい人用に。

プロパティ
(ChartIconType) BuyIcon { get; set; }

買いサインのアイコンを設定します。

(ChartIconType) SellIcon { get; set; }

売りサインのアイコンを設定します。

(Color) BuyColor { get; set; }

買いサインの色を設定します。

(Color) SellColor { get; set; }

売りサインの色を設定します。

(double) DrawMargin { get; set; }

サインの描画Y位置のマージンを設定します。買いサインはローソク足の最安値の下、売りサインはローソク足の最高値の上に表示されますが、その時価格からどのくらい空けて表示するか設定します。

(int) JumpMargin { get; set; }

◀▶ボタン押したときにサインの右側に何本分のローソク足を表示させるか設定します。

(WhenAlert) WhenAlert { get; set; }

アラートを出すタイミングを設定します。デフォルトはUpdate(バー更新後確定時のみ)。設定できるのはFirstTime(最初に条件満たしたとき)、FirstAndUpdate(最初に条件満たしたとき+確定時)、EveryTime(条件満たす度毎回)のいずれかです。

(string) SoundFile {get; set;}

アラートに音声を使用する場合、音声ファイル名を指定します。フルパス指定推奨ファイル名のみの場合、C:¥Windows¥Mediaフォルダ内のwavファイルを探します

(Color) AlertColor {get; set;}

アラート時にチャート色を変える場合の色を設定します。

(WrapPanel) ButtonPanel

ボタンを表示しているパネルを取得します。ボタン位置を変更したいときなどに。

 

メソッド

パブリックメソッドはありません。コンストラクタが一つあるのみです。

SignIndicator(Algo algo, Func<int , TradeType?> judgeMethod, [bool showButton])

1つ目の引数はIndicator本体を渡します。Algo型を取るため、cBotのRobotクラスでも使えます

2つ目の引数はサイン条件判定用メソッドです。indexを受け取ってTradeTypeかnullを返すメソッドなら何でも構いません。

3つ目の引数はジャンプボタンを使用するかどうかのオプションです。省略するとtrueになります。使用しない場合はfalseを渡してください。


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

新しいコメント

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

cTrader's Life

© 2025 ajinori