1000001110101111000010100100010000000001111011011110011001101101001110011100000110011111001000011101101100110001011000100001001111111011111101011011001101100110011110111001010010011000101101010011101000000110011000101100010110110011111111100101001000001011101110110111011001110001101001101001011110110101100001100000001011101010110011100110111111000011110001010111101110011100110000011100000010000001 1101011101001110010001100110111000111001000101001110101011010110010100111001000000011011100011000010011110001010010010000001100010100000000000010110010111010010000101000100101000100110000101110101111100101100011011000100011101011110000110110111101000100011101100110010100001010011010101011111000101010111111110011011110000001000001101111110001100101111000011110000110000111110111110110111111101101101 0101010100111111101110011101010100000011010110011000001100111101010111011000111000101111000011000110101000100101010001000100100001111011001110011100111110010111111011010000101001101010000010011101110010101000111010110001110011001011010011110000001100000111111011000101001100011111100000011111001110110100101000100110101110101111100101110110111101010110010000011000001100101101001001010011101110100011 0011111111000111001010110101001010001101010001000001111001011110001001101111010001111110100010000100101010110011010111110111010010101010010110110011011011101000011101011100011001001000000101010100010010010101100111100110110010011011011001011010100010100010000111101011010010100100101001001110101101000000000101011001000001001111101110010001101111000000111100100010100111100111101001111101011010110000 0101110110101110110011101000100101001000110010101101111110101100011100001010110010111111001001010010000001101000011010100111110000100000110000010111000101111100000011110110001110111110101110110011001101011100010101110000111000111001000001001111100011000100010100001001101001100101110110110000010110100111001001110011001100100101111000110011110010100000010000000000110011101001111010100111110110111110 0011111010101000000111011010101111111001010000111000000000001010100101000111101011001100000101011100010011111100101000010110000001000100100001100011000000100000000000010101010111001001010111101100110111110110000111001001111111000110010110100110000011111100001110010111111011110010100101010000011011100100010010000110010101010100110101000110101011100110001001000100100001010000000101100100011011101110 1110100011001101010000011010011011011111101100000011011110100101000111101110101101010100100100111101001111000100111111111011111101000001000101010100110011101101101010100000000011111111001110000111101001000100001000110110011001111110001010001111110110010011101001011010001100101101001110010110000111100101001011100001011000110001111101001100000111000111010001000001111101101101111010001100101110110010 0011001111111001110101100010100010101101101000100110010101110011010111110000110100111011001010111001001010111101010100001011011111000001010101100100000001000011110110010000000010101110000010001010011111111000100110100010101001000100000011001110100001100001101001100010110001011011100100100110011001000000110001110001100101110110010110101100001011110011010011001111111100101100011000100100011010001110 1011110110111101011111101110011010110100001110110101000111001100011110001010110011011010001111000011110101100111010101110101010011100110001101001101000000101011001111001100000110001101101110110010000110010101000010010100110010101001111010001100110010111100101111010101111111111111110100001010010110110101100000101101100000100101011100101000110110111001111110110001110101001100001101011010111111010100 1001101001001101101001000000000100011101101001111010010001010110101101111010100001001101110010111111011110010011100000111000101010111001100111011101110110010100110111010110101000100010011001010110000010101000110100011100010000011011111011110110101011100001010111011100010001110111001001000011001001101010001001100000100001101001011110010011011011111001100100100101001010001111001110000010010110000000 0101111111011001000011111000101100000010011010001011111010111110010010101100000110011110000011111011101001000101101001111101011101010111111110010100011011011011011010010111100111010101000111111001010111101010011011101001010011111110011101111011010101100111000000100011110011010111111111110110000110001001000101000101011000101100111110110010001100110011101000101100110000010111111101000000000010101011 0100100100000000000001111101000010000010000111011000110001111101101110011011000100001101100110111100110110000001010101100111000110011000110100001001010000110101101100100110111110010010011011111001100001101111101000001101001001000000100111111111010000110111111110100101011001011100111101111101011001010101100101111110000111011001100101000100011100101110110011000010011111110101011011001110111110000111 0111001101110100001100011101101001000101110011110111100111111100111110001111000110100110001011011110011001001110101010000101010101101000111111101011011110101110100011110001110010100010010111010100000011001010111000010011111110110001000001100110110000101110010010111111001011000000000010011100101000011100001100010001100111111010000011100000011011010001100100111101010011101000011000011100011111100101 0110011010010110110100000100001111001100000000101011101011100000001000100110110011000110100011010100000100100000111000110100110100010101010101100000100110001000001101110101111100010101011110100101011011001111011001011110101110100111110000011111110011111110111001100010010010110011001110011010011011101011101010000111101100110010001101010010100111010010111110000110001010100111110100100100011110100100 0010010011101000010000110000010110010100000101100000000111110000010011001101011010011010100010111000110001101011011011101010100011101010110100101010110001111101101111011110101011110001011010110111001111110101010101101000111101100011010001001000111000000100100100100011001001111101011111100011101001001100111000001110001000100011100001011101000110001010111100110101111001101110100001011101011000101011 0100110101000111010000111010100100100001001001101010010110100110100111010001101100110000110111000110101100101111100000110001110011001110000000101100000000010100000111001100011101111010100001101001001100100010001110000001101111100000111110101110000100111100011100000000101111100110111010100011010010110011001011000000111001000110001111010110110010001100010010010100010001111000000011101001100010011010 1101111100010000100011011101011101001001010000010101000000111000011000110001101100000100101111101101010011011100110001101000100001001010100001100100100011000010110100001100100110011000101000000111001000101111011001001110011011101001110101010111010110100111000000010010101001010001000110001010001011100100111111000000101001010100100011110010110010110111100011010110010010010000101000000111001111111111 0100101111110110110111100001111101111110111110000001100010000110001011101110011101110000101000001101110111100101011001111011001111000010110111110101000000010111101000010101010110001001111101101011110110110101110000101101100001111100001111000110100000010011111011011100111001111111110110001010111110011110000000010000010110110100100001010111101110110001000101001000101111110001101111101011010000010100 1110100110111101111001110011011001001101010000010100100111110000001011011000011000010011100101011111010011011111010010011001111100110101111111001100100000101100111010101000100000011110001001100001110010011100001010101001111011111101001000101100010110101111101011101101111110011001011010010111111101110000101000110000111001101110111101011000101010110010001110001010111110100010110000001110000011000000 1111000111101100100111011010110110101101101100100001100111100100010001110010001000101110111101001111001010010000010001111110001001000111111010101011111010101110111010101010111001011011001110000001101100110000000111011100001000000110110001100110000110100100110100100101011001101001110010100010111000110111000101101100100110001011101011101010101000000110011010101000010010011010110111000000110101101110 1101001110010001000000100101100111101011111111111100111110101110001111100001111001101111100001110010010001110011010100111011001000001110001100000001111010010111010100010110100010001100110100001110010010000011101101011000111100110111100100111110010100011100000001010010010011000010010011000101000101111100111010100101011101001111010011011111111000000100110010100010000110101100101110000011000011000110 1010011000100001100010001011100100110101110100110010110110001110111001110111000101011101001001000010011111110100011110111000001101011011010010101000100011000000000000011011111111101101110000010001111100000101101110000101010000000011110011101101011000111110010110011110101010011011110011101101101010111000011001010101100001001101110011001110111100010010111110101100011110001001000000110000111010111110 1111100111100000110000100000101101111101110101000101101011101010101000110101010011011011001111000110011101110001111000111110110010010010010111101110100010001000101101110100101111011001101100011110101110110110100100001000011011100011001101001001001100100101101000010111001100010001110101111001100001000011110010010111001000010110010010111101011110011110100000101001001011100010110010111000010100100111 1000000111000111010000101011000000001011011000100001101101001010101111100111101100000111100001101011101001100001001100001110100101011010100101010101101101010011111000001110101111101000100101001001001010101100011011010010100110111110111100101011011000011111111101101000001111101011110001011011111010011100101100101101100111011101011010010110111001100010000100100100011100011011001000111110001100101111 1001101111000001011011000110010010000111011010000110101000011000001100000110011001001110100101011010010011101111111110100100010111001001100110000101011001000110111001010101101011111010010110000000100110101100101110000101000000011000100101101111111101001011111000010111101011111111101111110010001101010111010000011100110101111110110010001111101100101000011110011110100010101111110111101011001000001000 1110101010001001011010010000111110111010001001011000011011011111110000010010011100100111110100000100111000110100100110100110010001010111011010111000110100010011001011001100100100011000100000101011111000100110111110100000111100111111101001010100011110100101010000011010000100011000101011110000111010100001101001000110010001101100000111000100010010000011000100100010001010100101000001111100010100001111 1000001101010101001110000001011110001011100001010011111010110011000010011100011110100111111101100000110000110001110110100011010001110000111101001010111001110110100001101101001100001001100010001001001100001010110111101100001011011101000101110111101100011100110110001011110011100011110010111100001101000101101000101111100011000101001101110110100100100011011101011011110101001111110010000011010101101000 0011101011100001010110101011010101111110000111100100100101011111100111010110011001110110110111110010111100101110101000000110001101011100010110010111100011011001111111101101110011001100100100001001110010110010100101001011100110100010110100101000111110101011101001111010001111011111101010110101000100100001001000001110100000001010001111001010011111001101011011101010110100001010001101001100111000011010 1111100101111110101111100101100110100100011111000011101111110100001010100111100111001010001001011101010001100000011101000000000110101100100001011111110101110110111111110011100011001011010110000100111010101111000000111000110010100010100101000111111010010011101010111010101101000011110000110010011111011000101111100110110111111111000111110110100110100111001001110000101110000101100110001011000001010001 1101100110010110011110011100100011000011110011000101010000000011100111011110101000001101101000101011100101111110110000110111111101010001110000111001110100101110101111111011111000011011001101111101101111010101000101011111000110011111001111100111101001011001010001010010101011011100101011010000010101101100100001000110111011100100011100100010100111010111010110111101000000010101100110101101100111110000 0110011101101111111011000100110101010010110001001011110110110110011010100000111001101010000111111001110101111001101010001110000100110011110110001010011000010000010000000111001000110110001011101100011011100110010010111101100000010010111100111001010101111010000110001000101001101011101101111001100001001011100111100101100001011010101101011101110011000011000001100101110100101011011010110111100101010010 0001001001110011110111101100101111010011000111100111010001011011111100011001100000010000100011100101001010001110101111100111001111100011001110100011010001111010011110010000110110011011110110100000111001110100000110100110101111101110100101101010010111010110110000011110110100010111000111001101111100001000100110101100110000010100011110000010111011111110111110010000001010111001101011010000011101001001 0100010011101101100011010010000011101001100010000000101011110110111111110100111000001101100001010011100110110000000010010100111110100110000100000101001100011110010111111010101100110100101001100111110100100101000011011001011110111001011000001111100001000111001001011110111010010111111101001011000100101000001101011001000011110011000110111010011010001011110000101001001000011111101010011011000100110100 0100001000101101111000001011110110101011110110001101101110100101001011001000110110010000010011111001100011100110010011010101101110000110010110101000001110100001011111101001101111000101101101000011001011110110101111001100100101111111000000111011111110001011001000000000001010100111101101111010100101101001100101000001001111010010110101111101101110110100101110101001000111100101111100100100110101000110 1001000100001100001001000101000011101001110111011000101001001101011010111110011111001011001111010011000111010001110000111100110010010001001001001100110001001000110100100110010000101111110100111011001101010000011110000111000000111100001001100100100000010000011100100101010011110100011100100000011001100100111011110010101100101110100001001010111011000101010010010110011110011101000010110101011101000101 0101100111011001011101011100001001001001110111100111110110110111111000000110010110000010101010011001101111111100011110000110001100010101011001111001011101100111011101000100011101111000110010111100111110011111110011001111101000110100111011111001110111101001110000001110100110010100000001111111001010011110111000101111101001011000010000100110001010000100011010001011100110010110000010000000101001101100 1000011001101011010010100001111000011010110011100001010001001010010001010011101110111101100111001011111101101011011110011100010011100010111001011100010000101110101011100111100001101011101010000000111001001000001110001010001101100010010101110111010100000110101101000011011010101001010100010100010110010101111101000010000100011110000000010101000101100101101001001001010000110111100101110010101111110000 0110101101001010011100010010001010110111110111100001110011011011010001100001001101100000100010011010100011110100101001110100101010000010001110001001010101110011011100001001101101010010111011110100110111011001010010110111001010001000010000011001100000000010100011000001001100010110100010111110101000101000100001110101011001010111010011000100111110111001010111111000000001001101001000011010101110111010 1000011101000111110110010101110000011111100101001011100001000110110000001101011111111111000011000101110001010011000111110101000111011101010000001101000111001101101111111100111111101111100110011111001011011001010000010010010100110100111001111110010101100001110011100011101000111010100110100111101000111001001111001001000110010100110110000000100111000100100110001001001111101110011001011100000011100000 0010001100001110001011110100000001101011100110001101010111110000101000001111001010011110110011001111001000111100011011011101100101101000000000100100011110001000000010010111100000110011010100011010100000110010010111100110001110111011000100000001011011111110110100100010011000111100101000011101100000001110110111010001000111010001011000010001001101110001000010011110101111100101011110001010011010010110 1011111110101010101011111110111000100101011110011100001100000100000110100010000100110110110110011111011001111011100110110010010011011101000110010010100001101100011000000011101000101111110001101100101101001001001000001100101011010100101101011100111110001000110001011000111010111110110101101010000110010101000110010010101101111101100110100011000000011101000001000101010000010000011001011101011011100100 1111001110011011010000001001101111000010000101000110010100010010001101011000000001001110110100001011011101100110011001001100011010000000100101001011000101011011001010001101011101000001101011111011101111011111111011011010011011000101111110101111001110011001110110001110111100011100110101100000101000001011000100011011000110111001101111010110110011011000101011011011011111101101001111001100000100110010 1010110110001000101000100000111000011010111000101110001101100001110010100101110001111000110110011011110000100000001101100110000111011101110111010110110111001000100000011110000101010100010110000011000011000000010011100011101100101101001110100011010010110111101001110101110101101001110111101001101011011000010101100011110010001010100101101011000001111001011111011001001110011111110101100101010111011010 1100011110101110111100100000101100111110011001111001100000110101111100011100011101011100001011100011110100111011110111001110010010010010000110010110011011100100111101001100110011001001100101100001001000000000101001110000010010001110010101100100000011111011111100001101100110100010001100110111010011101010100101001000010011001100001000111010000000100111010000100011110000000111100110001011100111110000 0101101000111011011101001101011100111101001111100001000011010000110111000110010000111111110001101001100001110011000010001100001111101000010011100001011001000111110111100101000100100001100010011000010001010110101010110111011011001110101000111101100111001011100010011111111011010001010101111101111001000000011100111110001101111010001010011001100010101001100010001101011111010101011010101110010011010111 1100010011111101100110110011110111001001101011111010101100000001100010111000101101010111110010111110101111101010110111011000100011101010101010111001010001010111011011100001001101100111010010100110001110000010011111100110101110111011101111101011000000010110000101001111001011001001100011100011100011111010110110101000010110111101010001111101110101110001011110010100101111100100011111100000111111111110 0001000011010110111110110110000000111110001101100100001010101000110001101110000110110001001000111111010000101010010100010011100011111010110110000001110100011111101011011101100100001000100010000001101111000110010011011011100101010000000011001100101100001010111001101011011011101110110001001001000111001101011001001101110101111101000001000001011001101011001111111101100000011100001001100110110000111011 0000110111010101110000011010010001000010101001010111100100111100100011101001101000000000110001000001101111010001001010110000001000101000101000001111001011111110110101110000111100010101011110001001011100010110010110101101101110111000000101111000100111101010010111001101011111100001011011110010111111110000110001111110100110011001110110110011100011001110001111101001000000111010000101111010001011011110 0100100100110100100001010000110001000110000000011101001001110100000011011011001010001011000001111101111110110101001001101001110100010000001101001101111111100100110000101011011101001010001101110100100110001101010100101101100100111000110111001011000100100001100111000100000001100111110010000111000010101110110111100011110001011011011110101011001111000111011110100010111101001100000000010011001000000001 1010110001100010001010101010001010100000110101011101100011001100010011000111110001101001111101001011000010100101111010111101111110000101001111011011011110111000001011110110010101000001101000000100000011111100101000011100000101011011000100000111000101110001010100110001101100011011100010101101000010111110111001001110011100010110100101101110101000101001100010111011001101110001101100100000010100010110 0111101010111110000101101110000011000111000011000111110110101111110100011100111111011010000011000110101110000000001000101000001010000111000000101100011011111110101110011011000000101000101111111101011001001110000100001101101001100100110111011001000101100110111101011110101111000101110101010111100111000010100110001100110001111000111101001001001101100110010110001111100010101100101100001001110111000110 1111110110001111011100010101111110000110000001111001101001011101001111011000000011110110000000110011110101011011000101001000100011010011101001101100011001010000101111111011010100110011100010011111001010100011001000010110001010011000001101010001011110010100011100010001000000010011110111010100110010100001001111101110010000110000001010011001110011110010000111111010100010111011100101100101010101011100 1000111000111000111011110001001000011001101111000100111001101101000000001100000011110000110011101000011111110001001001010100101000001010010111000100100111110010111111001111011011111100000100000011101110111110101001101010101011011010010100001001010011110000001010000111000100111011101001100101111111001110011011111110100111111110111011111100000101010001001101101000101011111000100111010100110010000000 0111100010110010010110111001110111111101000101010110011010000010110000100000100101101001100100000110101110010011111001011001000111001010001011110001111101010111100111100001101000101111010011010010011000000001001010110111110011101100011001010101001110000110001011100110011111000100101100000110101111011101101111010000110011111110110000110011110011010011110101001000001110001110101011001111111100000110 0010011001011011101101101101010011000100111100100000000100000001010111010100101011011100001011101011011100000010011101101100010101000110011000010010101111000111100100101001010000100100100101010110000101011000100011001110011001111111100110000111111100110110001001001010111100000000100111100001101110010101111101010011101010001101011101000100101100111111011001100011010101111011100010100110010011100110 0000110111110011000000100000011110001110001010010010000000011011101110111011000110001011000111101010000010011010000001001101011110111111111010100111001000010111010010000100110100001111011001100110100110001010111100111001100100000001101001010011000001101000110011110101111000101001011100001001011100000101001101111001000000101100101110101010100010110111101010100011000101100000011001101100111000101100 1001000010001111100110001000001011110010001110011110001110110111111101010000011111011100001000000010000000000000011011111110110111100010110111011000100001010001101101011111001110101100111010010101010000000101011000100000010010010001111011100101101111100101001111001000111101011010111100111100011100010010010010011111001001101010011101101101100101110101110110001101000111110110101111001001111110011010 1000101110010110111011011101100110111110110011111000110111101011110100100101000110100010100110011100111010001001011010101100111011100001100010111110001000111010001010101111000001000110101111110001110011110100100011010001010101101000110111001111100111110011111010101010101100011111110011001000000000001011100001010001001010111101110110000110110100110001001100110100100010111010001001011000010101011100 1111011111100100011110111011010010101100010101010111100011001011110011000001000111111000111001011101000110001101011000111111011100001111010110001101011110101000011010010110110101110001010000000011100100011000100100001001001011101101110010001100011100000000110000110101011110011100110101111010100100000010011111101100111100001011011011000110011010101111000000010011001000010000111010101010100100100101 0111111001000101110101010101100100101001101001110011110100000101101110001100011100110001001000001001010110110000001110100011000111111011000000010001001110011011010000001011001100001110111010010101011001001100000110101010110101011110011010110010001101111001110111101111100010101001100111001011110111011011100110001100001100100110111100011011111101001111010001000100000010111010101000100000110000111110 0000010110000110010111100000111010011101110110110001010000010011010000010011010011011110101011100101110010011011011001110011000011110010011010111110100111000100000100111110100001001110001100010010110100011000000110001101001110011011110110001001001101000110101101101010110001101010101010010110100010000000100010101001010011110110010101100000010001000001111110111000111010010001010010100110000001011111 1101001011100100000011101101110110101011111110001100010001000000110000101001111101000100110000111001010101100010011110010110110011000101110101100111001010010001010110010101010101010011100001010101001010010111111110100000110010110100100000110101010111110110011011110000000011100111111010000111001000010110010011011101010001111110100111110010100111010111100111001101001110010100000100000101100110001100 1011010110111001010110000010001010101100001100100001111010111110100100110110101100000010011010010110000000010110010110110010011111011010100100101010011011001010010000111111111110101110000101010111010110001110010100110100001111011010001011010000110011100011000100100000110110011110100011000001110011000100011100011001101001101001100111001010101110001010010101111101101000101101001011110101101001111000 0101011000010010101001110001111101101101010010100101111111010000110001100111001000001110001100101001001100011101001110111101001001111000101101100011100101110101011010111000111110101011100100000000010001010101111010110110100101000001111011000011000000100010011011011101001001011100001001011111111001001001111111110111011001001110001010111001000101010100010010011000000010010011000011011101000010011110 1101101001100111001101001100010000110100101011100001111110100001100001011100001111111001100011001110101010011101010100000010011110100010000101001011111111000111001001001100110100001001011100001011111011000100010111010010010000100000011110001111011111100101000011101100011110110011000101110100010101000111001010011111101011110010110101011100101101011000010001001011010001101011101101000101001101011011 0000011010110111011101100111000100001011111000101100000010010000111100001100110010010001111000010111010110101111000010001001001100100111001110101110111001011101110101100101011111000101111010100001011000001010111000001001110101000010011000010010000001110000111000000010111011100101101010100111111111111011000100110010001010101110110101010010000110011010000101101111110100011011010001000010001001011110 1100111101010110001101101110001011111101101011011011011001010001110100011111110011111011010001110101100000100000001011010011011100010101001001000010110100011111010100001010110101111010100110010111100001100101110011000100011001001110000101100110101010100110010010010001100010110100001100101111110101011011100010001000100110001010111101010000110010001001011011001000010011101001110010001001110000111111 1011001000110101010110111110101000011010001110110100111110110100111101001110000001110100010100010010110100111000110010100001111110011100101100100000010011111010100010101000011000101000010111110011000000010001111000000101100010100001011001011110000001000111101110010111110011000110110100000101111000011000010110111111010111101100100101101011000101101000000101100000100100010011101010001011011000010111 0111000011111101011101000110010010000111001001100011000011010000111010101011100111000110010111001001111111010101001010110010000000100100011100101001110111000111010000111101001110001111001111010110001000101100100001110111001001100101110110111011011110001001100001001000110110001111000010011001001011100010110100000110011110010000011010100101010000110000001110011100011100011100010001000011100100011001 1010000100100111011011001101000011010100010111110000101101010010010000111010010000111010010111001110101000011110010011111101010110101000011011101111111000001110001100110010010101111010100001010000101011011000011010100000111001110100010001011111001111010001100001101110101101001000111001101101101101001010111101101000010111000111111000110010111010000100011001111111010100101111010110111010111001010111 0111011101011000010101101101011110101110101110100010010010001001011100000111111111000000110011110000110010100101110110101001001011110011001010011110000100110100110010111011001100111100100100110011010110101001011011111110000111000010010001011100100111101110111111000111100011001011100000111111100011110110100101110011010111101100110000011001001111010001101010000000000010010011101001101101111111001010 0010000111111001110000010111001000000111100100010110001101100100000110000110010001000100101111011111010101110010011011100011011010000011000011010000110001101110010111101110011110101010101011101001101110110000001011100010111001011100001010101111110100101111101101010001000101100111111001110010110101100000000000001110001101010011101111010000110111111010011010111110000101111011000001101101111110001111 0110111001011101100110001111000110010001110001101000000100001011101011101101000111110111000011111010001101100001001000010001010110000101110011001110111110011000001011101101010110000110111001001010101101101001101101100000101011101001100011100010010000100010001110111111001001100000001001000011100010110000111100001101011000110111011001000100101111011111100110101110011111000011111001101110100000010001 1110011100010011001101100101110100000101011011000110011110001000111100101000110001010100010010100101101110111000011111101011110110001011001100001110010111110000100010001001101101011000101011100011100010010010110111011001100000000111011010011101111111111111110100100111001000101011110110011100010111011101110111000110111101110100010100110111000101101000110111110010110000101100000000100001111111010111 1011010100010000100101110110101101001100111010001000100100100011100000001100100011101010101001111001100100001000110110100010111110011010100001001111010100101111111110010110011010011011101000110100001011011100010001111011100100110001100000010100111111100100000111001111111111100001100001011010101001001011110001110011001100100111001110001010100000011000000101111010000010110101111100111111101110000101 0110000010100000111001001101011001101010101101011110110000010111011001101010100010011111101100000110101101100110000110111010101011110011010101011001100010010100101001111011010001010011001000011011001101100000000011110100011100101100100101001101001011101111110111101100100101100000111011101100000001001100100110110011110001110011000101000110111011000010101010101001010111010101111010011001010110100001 1101100100101111100111010000000110010111110101111000000110001010010010100011110000100100001100001011000010001010101011100110101001001000110101010011001111101011101010000000011001101101011111010100000111010001100010001011011001000010110010111011110100101101110111111110010100111110011111000001101101001011110010111010111000010100100001100110101010011000101000101011111101001011000010000110010010010111 0110100101000011100010000000001000001001100110000011001001100111011100111111000000111110001001011101111100110101101010001110010111000001101010010011001001110100110110110000001000111111100011111001111010111001000111010010000111101100001101100011101010100100111110111111010100010000011010001110000100111001101110000010101101100110110100101000001110001111110001000100101001111010011110110101001001100100 1000011010000100010010001010110111001110010001010001100111010110111001110110101011010011010010100001111000011001010111111110011000000011000000110011100101111101011100011011011010110111001110000010010001000110111000010011101000011100111100000111100011101010011000010110010100001011011110100111110010110011111101001000100111100001100111101001011010010000000000000100111101000110110010111010001010011110 1110110000101010101001001111010110110101111100100111111110110110001001010010101111101111101101000000010111001111110100100111111100100010111010111100111011111010101011010011111110110000100000010000100001100101111110100001111110011111000101100101111100001110001101000110101010011011000100100000111111100111001000010110011101111011010100100110010100010101010101100100000000100000110000000010001000000100 0011001000100000010010110000000111010001100000101111110111010011100101111010111111010110111100000010010000001010000010110000111101011011100110001010101111101011000100010100110011110010001101001000100111110010000001011101100100101101011110110111101000110010010100001010101100011011011000110100010011101000011010101101111111110011000110011011101011111001001100000001001011110110111011001000110100011111 0001011110110011011011100010111101100000111010010110100010111101010010101001101011001101111000110001101111001001111011000101010110010100011110110100111100001101110101110110111100000110000101001100111010010110101011000101100000110000001000110110101101000000101011011100000100100000011110110010111100101010011010100100001001001001001111010111111011000011111101001111100100101110101001110000100111100000 0101100110010011011100101010111011001101101000011000000100001011000000011111010110001001011010000011111011101001110010001100001011110010100010101010110010100110011000011000011100001100101101010011101110100110010001010101101001001101001101011110111110101000100001010001011001011001101111000100010101000001001001001001010100110001011101000111011001100001010000010111101110100101000100001111100010000000 0101101001101000110010111111101000101010010011000110011001111101110100001110100101000001110110000100000000000000111111001010001011001011100110101001111010000010111001111011100110110100100000011000001000111010011110011010001111010000001110000010010000111111100111010110000101111111110111100001010111010011011001010011111001001011001010100001000101100101001110010011101111001000010011110011010010100000 0111010010101001011110110010000110010001011110011000000010001011011000100100100101110000000101000110000110001110110010010000011010110101011100000100001010111000001011110111000110110110010010111011011101111010011101100101111000110011101111110011111111111110111111001010100011001010001000010101101100111001001101111010001000000010110101011111101111001011101101001100010100001011001001001001110101111110 0011000011101000001111001101001001111111110001111001100101101111011000000101000111010100100101110011011100000011001100101111001011100101111000011110010101100101101110111101011011101000101100011010101111100011111001100100010011101100011111101000111000000001111011000101011110001110011100010010001001110111110011001011110001010001110000100010011100001101000000111011101000010011001010100110110011110100 0010100110011011100110010100111111101110100011111101010010000100000110100011010101001101110010011110010001110111101100111010000011110000101010000000000111111000011111001110010000110011111001110100110010001110000101001010001010011001000100101010110101110000101100110100001110100100100000001100111101000110101100011100100001100101011111001011110100111110111101110001011001110101001011001010010111111111 0001010101001100011011101000111110011011000110101010001001010100100110111111001000011001000001110100100100010001011100100110001101100001111110110111111011000111011001101110110000010000101001111001100100000100111101011000000001101100100010010101000101101010010010000001100111001110100000000100111111010000010001010000001001001100101100101000000111000011110011111110010111011100111001010110010010110001 0100001111011101001111100010110111101010010110111111011111000011111001111111100011100101011111100010101011100101011100110010011100101010001111110100010111100100010010101001111100100101011010011011110110010001110010110010101110011101110010100001001100010000011101110110010010001001001011011100100001100101101000101100101110101111001000101001101001110001111111101010010110011001010011110010001100000001 1000000011110010110100111011111001111010000111101101111101000010111011010110101000001001111000011110111100001100000100100001110101100010111111100001001110111110010110001101010001001111100011101011010000110001010011110111000011100111111001010000001000110110010110000101000000101111001011000000110001110001110010110100100111100010010110011001101111011011001101101111111111001000001011100110111000110011 1010111011010111101001101010010000010010110111010110100100010010010010101111111100100011110100101111110000010001000111011101001100011111101001000001100011111011101000111011101010011111010000111111101101011101101001010000100110010011110011000101001001000000101100101010010011100101110101101001011010101111100111111010000000100011100000101011101111111111000111100011100000010000111101111111000101000010 0011010000101010101100110101111100010000000111110000110111011100000011111001100000100111111100011010101111000001001010001001011001010000001010110011011111100011110101001001000101010100100010111100100001001111111110001111110001000110011111101000000100111000011001100010011011101110111000000110111011000101110101100111111000101101010010010110000011001011010010001110010000100000100001001011100001100011 0100101101000110101010110011000010000101001110100000100100001000000001001001100011001101101100111001100000111111110001000001111000101111110010101000000011000000100110011101100110000000110010101001011100110000001100111011001010110100111010010110101100010001001100001011011100000001111010001010101001111111110011110000010000110010110110011100101100101011111101101000100110001000001110101010101000111001 1100000111001101001011110000000101100101111000101101111001011110000110110111110000100111100010001001000110001000110101110100000111000001111000011100011110111100110101010111111101100101100101101110011111000101010100000100000100011001010101000110101101000111110110101110111010000110000010101011100000101010001100010010111010010011110111111000001011111000000100111000110110001010110110000111001100001001 0011010100111011110110111111011010110001100001000110001101010111011100101110110101001000001000100101111110000000100001010000110011000011101000001010101001001001100001000000000000111011001011000010001011110110011101010011000010101101100010001100100000111000111000001110000000011001111111010100000000000110010011110110010011000110000001100100100100011000111000111010011101001000011101001010000100110001 0001000101000010000001101100001010111010011111011010110100110110011010000111010100000000101111011011010110001101110110101011100110010010001111010010000110011110110000111111010000000110010011000100000000101001010010111011100100100111010011101111110111101111011101100100011011011110110100101100000111110011010001000101001000110100110000111110001011100110011100010100111100101001110010110110100001000111 1101101111110110100010010011101000100100000100110010100111100011101011100101111100001011001001010111101101101001101101100100011111111001011101000010101100000011101001000111001111000000111011100000001111001100101001000001101100101101011111001110001110011110001011000001111101101001011101111001101000111000010110001001011010000101011001111111011110001100001100110101010000000100001111110110010111100101 1100001000001100110000010110101001001000100011010001110011010000001101110110101001011110111111101001100001100000111111000101101110010101111111010000000100101110111110000100110101100110100000010101101010110100011100111111011000011010010001000001101010010110000101000000011110001001100000010000110011110010010101001110111100110101111010011011001000101011110101100001100111110101001000101011110101110000 1111101101011001001010001000101011100110100010110110110010110101001011101110000000110110101101111100110010010001011100011010010101000100010111001000101111010010111000000001100101110100010101011101101110100010101111101001010001111101010000100010100111010100000100110011101010010110001100000100111100010011010000001001110011101101101001000010110001000111010111001001000001010011111101000001001000000010 1001111110110001110110111010111110111010100001100100100010101111111101001011100111010111011011010110101001011101111001111110110100100010001100011000111100011000111000111100101011001110011011010011000011000000110101111100011000001100110100010011010010100011001000010001010101000001010110000000101110010111010111111100001001001011100111011110011100101111110101011100111101100110001001000101111010100000
cTrader AlgocTrader

cTraderでスクリプトを作る【サンプル:AutoFibonacci】

12/24/2020 3/24/2021

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

cTraderでもスクリプトは作れる

MT4ではインジケーター、EAの他にスクリプトというプログラムを作成することができます。スクリプトは実行したら特定の処理を行い、すぐに停止するというタイプのプログラムです。

cTraderではインジケーターとcBotしか作ることができず、一見スクリプトは作れないかのように見えますが、同じ機能のものはcTraderでも簡単に作成できます。

 

cBotとして作成すればいい

cBotを新規作成して、処理内容をOnStart()内に書き込んで、最後にStop()を呼び出してあげればもうできあがりです。(実際はStop()を呼ばなくても、OnBar()やOnTick()が空っぽであれば自動で止まるようですが、一応Stop()で止めておいた方が安心でしょう。)

cBotとして作るため、外部パラメータを持たせることも可能です。MT4でも同じようにEAとして作ることでパラメータを持たせることはできますが、MT4の場合は実行の度にパラメータ画面が表示されてしまうため、ちょっとしたスクリプトでは使い勝手が悪いのです。

 

使い方

普通のcBotと同じです。チャート左側ツールバーのアイコンから選んであらかじめパラメータを設定して、チャート上に配置します。実行したいときは右下スクリプト(cBot)名の▶ボタンを押すだけです。

cTraderの場合は、あらかじめパラメータ設定までしたcBotをいくつもチャート上に配置しておき、必要に応じて起動させることができるため、スクリプト実行とも相性がいいです。

特にパラメータ付きスクリプトの使い勝手なら、MT4よりもcTraderの方が優れていると言えるのではないでしょうか。

 

 

実際に作ってみよう

サンプル:AutoFibonacci

せっかくなので、ある程度使えそうなスクリプトを一つ作ってみましょう。

実行するとチャート上に自動的にフィボナッチリトレースメントを作成してくれるスクリプトです。

フィボナッチリトレースメントには基準点となる最高値、最安値が必要なので、どの期間で最高値最安値を探すかはパラメータで設定できるようにしておきます。

[Parameter(DefaultValue = 25)]
public int Period { get; set; }

最初からあるParameter部分を上記のように変更するだけです。Defaultは好きな値を入れてください。

次にOnStart()内に処理部分を書いていきます。

// --- 対象期間のbarsを抽出して最高値、最安値のインデックスを求める
var bars = Bars.Skip(Bars.Count - Period).ToArray();
var highestIndex = bars.Select((bar, index) => Tuple.Create(index, bar.High)).OrderByDescending(t => t.Item2).First().Item1;
var lowestIndex = bars.Select((bar, index) => Tuple.Create(index, bar.Low)).OrderBy(t => t.Item2).First().Item1;

LINQという機能を使ってるため、知らないとわかりにくいかもしれません。

まず2行目では全部のBarから最初の部分をスキップさせてPeriod本だけのBarを取り出して、bars名前をつけた配列にしました。
3行目では最高値のbars内のインデックスを求めてます。barsからインデックスと高値の組み合わせを、高値の大きい順に並び替えて、一番最初の要素のインデックスを取り出してます。4行目も最安値のインデックスも同様に取り出しています。
LINQを知らず、よくわからなければ、ここはとりあえずそーゆーもんだと思っておいてください。

続いて、フィボナッチリトレースメントを描くための始点と終点を設定します。

// --- フィボナッチリトレースメントの始点と終点を決める
double y1, y2;
DateTime t1, t2;
if(highestIndex < lowestIndex) {
    y1 = bars[highestIndex].High;
    t1 = bars[highestIndex].OpenTime;
    y2 = bars[lowestIndex].Low;
    t2 = bars[lowestIndex].OpenTime;
} else {
    y1 = bars[lowestIndex].Low;
    t1 = bars[lowestIndex].OpenTime;
    y2 = bars[highestIndex].High;
    t2 = bars[highestIndex].OpenTime;
}

ここはわかりやすいですよね。最高値と最安値のどちらが先に来るかにより、始点と終点が入れ替わるため、場合分けして始点(t1,y1)と終点(t2,y2)を設定してます。

あとは描くだけ。

// --- フィボナッチリトレースメント描いて、表示レベルを調整し、編集可能にして終了
var ff = Chart.DrawFibonacciRetracement(Guid.NewGuid().ToString(), t1, y1, t2, y2, Color.Yellow);
var visibleLevels = new double[] { 0, 38.2, 50.0, 61.8, 100 };
foreach (var level in ff.FibonacciLevels) level.IsVisible = visibleLevels.Contains(level.PercentLevel);
ff.IsInteractive = true;
Stop();

2行目のDrawFibonacciRetracementで描く際の名前は他とかぶらないようにGuidを取得して文字列化して使ってます。とりあえずかぶらない文字列が欲しいときはGuid.NewGuid().ToString()と覚えてしまっていいです。色は適当に黄色にしてますが好きに変えてください。

描いた後は、3,4行目でレベル表示の調整をしてあります。デフォルトだとやたらと線が表示されてみにくいので。
ちょっとわかりにくいかもしれませんが、ChartFibonacciRetracementの持つFibonacciLevelsのうち、上記visibleLevels配列に値が含まれてるものだけ、IsVisibleをtrueにする、という処理をしています。(→参考:FibonacciLevel
見える線を変更したい場合はvisibleLevels内の数値を編集してください。(ここに指定できるのはあらかじめ設定してある数値に限ります。チャート上のフィボナッチリトレースメントを右クリックで確認できます。)

5行目は今描いたフィボナッチリトレースメントをマウスで編集可能にしています。この1行がないと、cBot停止と同時に描いたものが消えるため、見かけ上なにも起きません。

6行目でcBotを止めて終了です。

 

コード全体

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

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class AutoFibonacci : Robot
    {
        [Parameter(DefaultValue = 25)]
        public int Period { get; set; }

        protected override void OnStart()
        {
            // --- 対象期間のbarsを抽出して最高値、最安値のインデックスを求める
            var bars = Bars.Skip(Bars.Count - Period).ToArray();
            var highestIndex = bars.Select((bar, index) => Tuple.Create(index, bar.High)).OrderByDescending(t => t.Item2).First().Item1;
            var lowestIndex = bars.Select((bar, index) => Tuple.Create(index, bar.Low)).OrderBy(t => t.Item2).First().Item1;

            // --- フィボナッチリトレースメントの始点と終点を決める
            double y1, y2;
            DateTime t1, t2;
            if(highestIndex < lowestIndex) {
                y1 = bars[highestIndex].High;
                t1 = bars[highestIndex].OpenTime;
                y2 = bars[lowestIndex].Low;
                t2 = bars[lowestIndex].OpenTime;
            } else {
                y1 = bars[lowestIndex].Low;
                t1 = bars[lowestIndex].OpenTime;
                y2 = bars[highestIndex].High;
                t2 = bars[highestIndex].OpenTime;
            }

            // --- フィボナッチリトレースメント描いて、表示レベルを調整し、編集可能にして終了
            var ff = Chart.DrawFibonacciRetracement(Guid.NewGuid().ToString(), t1, y1, t2, y2, Color.Yellow);
            var visibleLevels = new double[] { 0, 38.2, 50.0, 61.8, 100 };
            foreach (var level in ff.FibonacciLevels) level.IsVisible = visibleLevels.Contains(level.PercentLevel);
            ff.IsInteractive = true;
            Stop();
        }

        protected override void OnTick()
        {
            // Put your core logic here
        }

        protected override void OnStop()
        {
            // Put your deinitialization logic here
        }
    }
}

テンプレートで出力されてるOnTick()など余計な部分は消してもかまわないのですが、今後機能拡張することも考えて残しておきます。

一応algoファイルもあげておきます。

 

 

あとはご自由に

自分で作っておけば、思い立ったときに好きなように機能を変えることもできます。

例えばチャート上に見えてる期間で自動的にPeriodを設定するとか、フィボナッチエクスパンジョンも同時に書くとか、Stop()で止めずに、起動しっぱなしで自動的にリトレースメントを更新していくようにするとか。

自由に編集して、自分仕様のプログラムを作ってみてください。


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

新しいコメント

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

cTrader's Life

© 2025 ajinori