1000010000001100011001001110111111010001010100111101010001001111011001111100010000000110111001110010110110001100000110010111110101110101101110001101100011010111100000100000010111101001001110110001010110011010010010001111101000011110011000111100011111000010100100010010010001011111001100011001101110111100000101010111101110100101011010101100011010000000000101101001000001111101100000011111100000000011 1011010010100100110100001100111100110110100100001100010110110001110101100110011010110101111111101101100011110000110000001111000110110001111001110001110000001110001101100010110000101010001011100011010000111000100111100101010010000100001000111010000011010111100000111100111000010011110111001101100110100111100100010101100010110101101111111111001011100110100011111010001100010111011001101110001000010011 1100100011010001101000100011000100101011101110101110110101101100011110111010100011101101000100111110001001100000111001100101110100011111111100101100001001010101110100101101111001010100011101110111001111110101010011011101001011111011101110001101000001011000000011000110011000110101011111011011110010001111010010011100010101001010001000000100011000101001110110000111010110111101000110101000001101111110 1110100111110001001101100110000011110010111011010011001101111011111100111101001011101100101100100111111101101000000011101001111110011111101111001010010000010101010100111011110011110110111001110001111011110110010011000000010111011100001000001100100101010111011100101101110011000100100101101111100111101001000000001111100000100011101010110010011011000101000101101001001001110001011101100000111010010011 0110101001000010001001111111110011110001000100110111110000001010101011101101110011110101101101010111011111000110010010011111010000110110001111111000111101111110011101001000100101111100100011111000011011100001100011001110111101010001000000110101000111110000000111111011000000101111100000000010000111001001010010011101110100000110000011010101011101110001000001011110101011100100100101000011001000110101 1011010111010001001010010011101011000011011110000101001000101001111010111001010101011010010110111000000100011100110001000000110101011001010001010010100100110101110001010011111101100101111100011011001110101111101011101111101111001001111000010101110001010010101010101100000101001010011101001011010111010000011101001100011000110001011001001100100111000010110001001110110001111110100101110100100011001101 0001111001111010000100010001001011001110100111110001011011101010011111000111110011000110010010101010101011001010100111110111000010101010100110111001100110111111111010001111001001001010111001110010001110111000000101000100010111110110001111110110110001000011001001011100011101111010000111000000101110100000001110011010001000001010101111110111101101110010010110100101101001001000000101010010111110101001 0100111111100001001110011110100100101101110010001110110111111100011001000000111010000111100010001010100100001011110101110010000110110010011000000110111101110011011110001100100101000000110001101011101010011001010010101101011111101110101110110001100111110100100101000111010110010110101011100010001011110100100110010010110001001001110011111101110010100010010111100000110001111111000000110000110001111111 0000010011100100111100010110101100110110011100100110000001000000001010011100011100110100010001011111101101110000011001111001111000101111101010100001110110100000110110001101010111001010110111000101000010011010010010110111001111000010001000010011110001010101111001111010011111001101001100100011110010110111100000100001101101111100000001011101001001111101111001010111000101000010011000010010100010011101 0000110110111100101101111001111011110001011000011011000010010111000011000000001010111011100111101011101010010110010101011100100000101010101011100101100101111011001011110101110001110111001011101010111100100000010010111010010111000000011100011111111101100110100100101011100001011100011000010110001000101000011011000010101110011100010011010100100010101110100010010011011011000000111001000101010000111110 1011001011001010101110101111110111101011101100111010111001010001111111001101001000110001010110000010010011000001001000001010001011001010000010111111100011001100111001010110101011110011100100111101100010001110001111000110000011111001000101001011000010101110001101111100001001110010001111001001100110011101010000001011111000110001111100011010010101010010100100011101100100101110001101111101001100101110 0010010001011001111101011001001111100011111111101001111100110110111101011100101111010001111101100010101000010010111111110110010101100100110110100111100000111100001101110001110010011001010111000100000101011001111001100000111011110110111110011001001001001101111000111100110110101110100011001101000100111011101011111111000001011110100000110101100010100100110101110000100010010010101110011111100101111100 1010000010100100000110111011010010011000100100010100010011110000101100110000001000010100000001001101100010101000010110011100001001010111000111000011001110110010000111100101010010010100110001000001000101100111110111110011111000011110001101000001110011011011000100100101100100110101101000110011011101001000100110101010100010000010100100110100110000110001111010000000001110101011101111111011101101100111 0100111010100000110001010011011011010110000001000100101010111110110001111111111000111010000011111110010000011001110101000101101101111101000001011110100010000111011001000101010110000101011100100001011110010011101110010111001111111011110110000001100011110000101100000100111001101010000110011000100001110001001101100011000011010110110000011110011000100010111111101110100000111011000110011000100100000001 1010010010100011001111110100100011010111110000011111000001110001110011011101000010100110100001101110110000101011010000111000101110100101101000111011110010101100111100101111001010110100010110101111111101010111100000010010110001110000011100111001010100011111000110111011111011001111111100100010000001011010101111110101011010111111101011000100001000110100010111010001001000011111111001001010111101111010 1101011011111010000001111101111010010100000010101100010001101100110010010110101110111001111010110111101101110001001000101001100001111110011001100010100111001000100111000110001001000111111101011001001110100000010010011101110101111010100110010111001110001101010100010101110100111100000001110110101100001001010011000110100111001110110100010100110000010100000100000010110100111110010100000111001111101001 1010000001010100100010001011000001010001000001100011100101001010011001001010101001010000010011101010001001101011011111111111000110001010010010101100111100100110000000001110100101011101100011011011010100110101110010000000011011010011011100110010100100110001110110010011101110111010111011011100000111001100010000011111101000110110111011110001001101011000110010100011001011011011100100100010111100101011 1011010010010100011100001101000110110101001011000000000100100011001000100010101110100111100001010000010010010100100010101101010011001011001101101000000110011010101011010100001011000110000110010111100100101111101100011110010011010000111111101110001001000111010001010101101000011010010001110011110110000110000001101011111010110100100011110111111000001000111110101110000001110000100011111001101010101101 1011000110101000010111000001011111010110101011011110100111110110001001000010110011011111011010010110011011100110101010101011000100111110011011110101110100110010100000000100111001111111011001001110100001011110011000001111111000001100010100110001111001011101101101100001011110011010001001110001010010011111111111001001100101111100000000111001001110010000011000110110010110011001101100111100110010000011 0101011011001101100010110101101011101100101010000001001110010011000111000011001001001110101110001100000001100111101001010000110101001011110101110111001110111000011011011010001010010110001011100001101110011111011001011111111000111101100010111111010110001110001100011110110100011011001110010000000010101101101001001111011011100010100001111101011001011101011101000110101111000100111000111001001001000011 1111011010011101111110101101001000100110011011100111100111100000011111010100101101101100000011011011011001110010011001011011001111000010001111100000110101111000100000011000010010110100101100010010110111101010011101011001010010111101011100110111101101100100000010001010010110001000010100110101000100110001011011101001011011100001101000110011110011100000001010000101011010001111100100011111011101011100 1101110110000111101010110111100010001000010111100111110111010101101110111010110000001101011010100001101110100110110101101010010011011010110001001010001011101101101100111100010101001011111001110010110011110000001011001111100010000111010000000000111000010100011011100001000110000011001110101111110000011111000011111010001100100000011001011100110000100101010000011001010111011010110110001100110011100100 1101000000111111110000110010011010101000111011010111000010010101101111100000011000111011110001001100101110101110100100001010110101000010100111110000011101101001100110001010010111110111011100100010001110111101000101100011001001101010111110001001100001101111110101111000011011100100101011100011011000111010010010001010101001000001101011000011110000010011000011001100101111000001000011110100000100101101 0011100011011110001001110101010100111011110111000001101110010111110111101011101101110100101101101110011111101011000110101000111001110100000001000001111011001101110101100100100011100011001011001110011010111010100111100010101110111000101010011110010110110100001001010001000110011001101011110011111010010000011110010101011100000001000111110011100101101111001000001101000110110000101101101011000110101101 1001100001111010010111011100001011000101010100110000101110000101010110100100101000101001111100110101110101110010101111010111110110010101100001010001011001000110010100010110110011010001110101101111111110000011101101111110100101011110010111100010101110110111000111000111011001010100010000110111001110110100101010100010101001010110000110100001010011101011011110101001101000000010000101001001011101001011 1001100111011100111111001110011001000010001101100110110101110011110010111110011100001001110011010110000111000010110000110001111110011111100101111110001010101100001011100111111001111001101011100011011000001110000010000111111111010101001000010001011111010100000110001000010001011010010010111110100011111100001100011110011100000100101010000101001000011100001011011100011111111110110111111000100110001011 1000100110101101000011010110101111010101101000010010000010110011100000100011000110000010010000011101111110000101100001001010011110000011011101110010001111101100010111110011000101000001110011001101001010110111100010100010111011101010100101111001100101010111001010111100101100111101111101100111100000000000010010110100100011111100110101110111000101110111100110100111011111010100011101111011010010001101 1100011111010111010101101000011110100011110100111011010110111101000011000111010111100011010010011010101010010011110110001101101110001111000110010110011011010000101111101010011111110111101000000011110000110000111011111001111100001001101100100011000110111110010101010101101000011000110100101010001001011101111100010101010010101101010011010100110100001100110110110001010101001100101011000111101101010101 0011110000111111010011010010101001010000011111100011000110111010110001111111100101011010101110111100100001010110010000100010000110011100110100100100101111001001010000100010000100001000010110111100110101100101110010110001101101110100011011100001101100100101000010100000000111011100000111010110110100101010100000101001100100111100101101101110001101110110101010011000000000101010010111101000100010010110 0100011011011001111111000101101110111011100111011000101111010111100110001100101001001011101101001001010000111010001010100011001000110110110101011101111011111010001001101000000011101001110000001111001001101100111000011000010000110010110000101001000000000011010010101100001110001101110011100101101010101101000011010101111101010110010000100000100001111111110110011010101000100100010010111001001010111110 1011101011100110111001011100000100111111000110100001000001101011111110001100110000001101101010011010000100111000011001000001110011010011101101001100011101100110101101111011001111101101011010101111100010100010100011101011100011000001100000010011100010111000000011000100000011101010100100011111111111000011101001011001111010111100001010001110111001011001111110110001100001111101111111100010001110001100 0111100000110111101100110101101001101101011100000010111000110111111000110110011111010000001110110010001111111111001010100111111100100011001000111000010001001110011100111111111000000000100010101101111110001110110001000101110011111101011111010010001101000000110010010101101000001001001110010110100000110011101010100111111101101001100100010011100100011001111011011000010001111100011010100000001000111001 0110011110101010111110000111011000011001111001010110100111010000000001111110010001100000101010100100101010001110100100100110101100000010100101100100010010000011010101010110000111111100100001110110001001001110000011000101000101010000011010100010111011000110011100011011111000000110111111001001000110110101001011001101000010000001010011001100111101111000011011010100011001000000110011011100001111110111 0001010001111001110101100110010000010111101011010001001111101010100010000010100110001000001011111100100011110100010011101101000011000110000000011011011110101010111000000101001100110000101000001000010011100111110000010100001000100111101001110110111001100001011110000111110001110010001100001011010001001001011100000010101100110011000111001000110111001001010100110101011110001111101000100111101100110110 1000110000000101100100010110001101000110001101101101001111100011000111000010000001110001010100011101001101001100110101101100111000100000001110100011001110111101100010100011101001100001000110000110100000111100000000011110111101110010010000110110100101000010010001111100110101101101111110001100000111110000101011110110011101000111010111011000101000000011111000001101010101100010000111001100011001101001 1101000101110011000001010110011010110000111001010100011100110110111000100011111100101000000000110011111100010100100010011111001110101001111101110010011000010001011110101100011101011000011100110010001100101110110110010000100110011111010011110111010011101000101010110100010100110010111000000111101111110011000111000000000101111111110110011011100111001111001000000111110000110010000101100111001110001110 1111001010011011101100101100111011110101101011100100001010000101101001110110011101000000000100001010011101010001001101001101110001010010101100100001000011010010100001100001000101001001001111011000010101100010100101100011101101110110101101100100101101111100001100011000101011001110111111000100001110101110000011100010111111100111110000001001101101110101010010011100010010110010101010100000011000101010 0110000101000101101101011010101010111001001010011100110111101000011101100011110001110101100001111111111110011011110011110000110100001100010111011100110000101001111101010000010011100010011110000000111011100000111010001111101000010110000100011101000010100111111001111011010110000100011101110010101000000110100111001110000001111000000000011010011100001010101001000111000010000110110010100111110101001000 0110110010100110001110000100111101011011110110001011101101110000000011011011010111101101000000010100011110100010110110100011111111111011010110101010000011011101010110111111000110100101100011100011110011111101011010011101111001101100010010010110001011010001011101111000010000011001110001010000000011110010101101000101101010101000000100011000010010100010101100100010010100100011000000100000110111110110 1000110111011000011011011101001101111011100001000000000100100000001010001110111011111110011110011010111100101001001001111001001000001101111111010001000000001110000111100111000100010001110000011010001011000111100100000111011001001101110110011001101110000101001000111011010101100000111110110100111101101010001110111110111100100010011011110001011101011000000100101001000101011101001110110101011101011011 1110110101000111100100111101110000100010110011011101110011100110011110100001110001000101011001111100001011111101111100110100101001001101101011101011111101011001011100010100100100010100011101010100110111110010001110110011010100001100101101000101010100010100100011000100001111000100111100111000010111010011010000100000111100001101100100001011000111001110000001101001110110001100100011100000001110110101 0111111101001110110011010111000000111010001011100010100101100111101111111011101001010011111110001000110101011001100001111111111100011000000001001001001011011011111100101101101101101100011111100110100100011100010100001101100110010101001011110001101111101111110111000110110101000110011010001101101110110001011010101100101110101010111000011101001100101011011111010111101011111000001001100110100011111110 1011110000101101000110100001000001001001111010011110001101100010001111110000010111001100000000001110101010101110010011101111011110111110100110111001110111100011001010110110001110100010010001000100100100110001101110101110000111010001100101011101101001100110111101110111001000011010000001011011011110100101001001001001000000101000101001010010111101001000110101111110101011100111000100101011101010110101 0011101110000000110111010011001110100110101001101111100100110011100101010110100100101010110010110100110101111111101001011001111000101100001010100010111100100011111100110001100011001110111000010111010110001101011010000010010011011001000111011101101010001110011001011101011000101101010100110100001010101100101100000111101011011001011010111110100000100010010101110110001011100001100110101100011111010110 1110101101000110001111101111000110011100111100000111011001011111001101101010100001000001111000110110111111100110100100010101100110111111110001100011101100100111100101000110011101001111000010001001101010010101100101010110110000010110010010111000100000111101111010000011111010101001010001100001110110000100000100011101010011011001000101010110100001101011101111111000001000100011011010110000001000111110 0111111001101010001010101000110100111111101010001001111100111000010101110000001100101011011100101101010100101111110101111001010100110010101101011100010100000011100011101110000110000100000111000001010111010110100011010001000001000010100010101100101110111110101110111100000111010110000010001011010101000000000001001101000011100000110101111010010110010100111100110001100010001011101101101100110101100001 0111001111011100010001100010111100101111110110001010111001011101011011011111110110101101100111011111110100010101111110011100001010011000110011111100110001000000110111000101000011000011001111101000000110110000001111000110001000010110011010111111001000001110000111011101011111011001011101000000110011011101111000100000101101101100101101000010100011011111000100111010010011101101010100110100111001110111 0100100010101110001101101010001101010000000101110011101000110001111011100001000100010110110011100111100000110011001111000111000111101101110100100111011101001100010110010011111101001111110001000100111000110010111000001101110111010000000000011100001100100010101001011001000110100011100001011010110010000010001011100001101001010111000001101001101111110001111001011111001010110111101001101011101110111011 1000101000000101010000111010001111100100100101000000001010010110001000001100101010100000110011100100101011110101011010100010011000100001101110011110010110101001010000110001011111011000110011110100010010110000001111010001011001110011011110100110000000101111010011111100111000011000110110000110101111111100001001110001100000010100000101110110111110111000011001111110001101001010100111011011101100010000 0000010001010011001101101010001100010111101100110111101010100100000001110111000010000111110011010000100100100111100101111100101111100111001011001001100100100011000000100001110111001110111000000100000001111111110101111001000001001001001100011000000000110001110010010111100001100100000010010111011111011001000001011001110010111101101100010110010010010100100000011001111011010000000011011011010001111000 0000111101001011001010011100011111011000111010110100000101011010010101010011100001011100110001101100111011101011010011001010101010000000111101011110110011000010011000100001100001011010011011000111000000001010000011010010101000111001011011000000000000010001011000100011011011000111100011001010111100011001000110110001011001100001101010000111010111111100111101001100001000110000111010000011000011001001 0100001101001010000001001100010000101111001011000100110000101101100110100110110101010100101101100111101011101011000111011011110101010110000010001011001110001111111100011101110000011100000011110111011110011111101110011011010101010110000100000110111110101011110010010100101100000000101000000000101111010111011111110000000111100011011100011000110010001100100111110101100011001010111110110010101011101111 0001011110010011101000001111111001010111101001000001011101000000101110100100100000111101001100111110001011000101000001010000000000101111111110110011001100101101010000011001000011001000011010010111110101111000001011100000110001101011000111000110000011110010100100110101001001101001100010101011110101001110110100101100010110110001010011111001111010100100001111100100111011010100011111101010011001110001 0110000000000111001100001101011001111100000010000010001100010101110010000000000101000000100010001101010111010011010111100100100111010011101110000100011010101100000001000000000100010000001101100111000110011001110100011010100001001100101001001000001011011110100111100000011010101100110101001110100000110011111100111111111111011110001111000001000000110100010110011111011000101110000000001011011001010101 1011101001010000101101001011001001000111010001110010000111011001010110000101000110000010010111100100010111011110111110011101100101000101110010101111110001101000010100110000011001001101001010110101001001110001101011101110011011011100000001000110011000100000111101110001010000000101001110010110000101001001010011001010101101000011011001110001100110100100111001011110000000101011010001011000111010101000 0101011101100101101111001000010101000110000000111001111111001010000010011111111111001100000111111110110101100000111101110111011000101000000010101011101110010000101111000111110010101101000011011001111011111110101110110111100000000001011111110111000100110011110010101100111100100111111001011000101000100011001000101001111000100000101011011010110001110100100111100110101100100000011110001100110101010001 1001100111110011001011100000110000111110101011001011110111010011010000010110110101110000101101101111101000011011111001101010101011101011001011100001100101011001011111011000101010111110011001100111000001001100100110110111101011101100111001010011000111111100001000011101011011000101000110110101101001100011000011000011110001110010100110111100110010011000000010100100101101110100111101010011111011001010 0000111110111000001111111001001010111000100011001000000010000110001100111110110110000001000011110001001000011111101110011001101110100011010101000110100101100100101111100010111110010011110110110011010011010101001011101000110101011101110011001001110011100111101101011001101000110101011010011011001011111101001011111101000100010110100001101010100110000111000010110110011011011001101011010011111001111110 1011010000100101100111000001000110011110110101101101000101101101110000000011011101001010001100011011110101101100001111100100101110110010110111000000110011110010100011001100101111011110000011111110011111111110000101010100101111101010010101110011111001100001000110101001110011011001100011100101110100110001110110101110111100010101000001110001100001000111010110011011010111011011001000111111000011110111 0000101100111110011111011101101110110011101010100110111001101111110111011111011101111100011001111010010000110011110001100011011011110010100011010011110111011011101111101001000001100100010110101001001010101100010010000100101101111010101010001100111111110001100111101000001101000101011011011110101110111110001100001100010000001110110011101101101000011001101111010001001010110100110011010000001101110101 0101010110000100111101001110011010010000011001010001011001011100011101111110110111111111001100100111111011000100111001111100100111011011101111100001101010110110110100010100110011110001110110101110100000111011011100010110011110100010000001111001110110010000011111101010001011110010101000100101110000010010010000010010011001000001001101110010010001011011101100000010010110011001011001101011010110011100 0110111011101011111110000001110010010010111011100011010001000111010101100011100001110101010000000001101110011100001110010101110100111010011011100111011111001001010001010001000000101100110111101111011010101111001101100000110000111000110010011001011000100000000110101011000000101101010000010000001101010011100001100000011001101010100010111011101111001010011111010010111011001110110100100100100100001101 1010001101001100101010011001010111010111001111110010111001011100101010111101010111101000101110111010010010111111110101010011011100010101001011100000110001000111100000001110101011100010101010100011011000110000101100011101110010000110010011101100101000000001110110111011010000110000000010100000110001010110011010101011110011100011011000111111100011001100100010100000001110101010011101010101111010101101 0001110110011110101101110010000010000000101111010111010111100010001111011101101000010111000011111100010100111011011011000101010101010101110010110110101111101010001100101110000101101001001111010111111011101011100000100100011010110100101101110110101010011011100111000000111011001010000001100100110010010011101101101010100101100110111101001111110001011000001011011011011011101111011110000010001110101100 0000100110111000111110000001100000110000011111010100100011111010111111010100110010001111100101000101110100101101000011010001000001001110111100001001111111000101011101110011101110001001100010001000010100011011110111101110011101011111110000010111010111010111010010110011001010100011110110010111000000010100000001011110010101011110001110111011001001101100001011111111000111010011110101111111100101011010 0000000000000101000111100010101100100010100001100010001100001100000000000011000111011000110001000001101100000111101110110000011011101100110011011101101000100000110100110011110000101011110111010011100001110000000011110100101010100100111001011010111100101011111101011101000100010110110000110010111000000001110110111111110000001011111111110000101111001000111000011000001001111110000010110111011000101101 1100011001000100110100111011000010100110011011100111100011111111000011000000011110101000000100111101010010000001000010010101101101111011011111011101000001110010101001101001011001110110010000010001011111000001100000010110001110010101011010111011111100101111101100001110001000101011000010000000111100101001101010001100111001111101010001100110100011101111001110000110100100000110101100000111101111011100 1011010111100000101101110101110001101001111000011100101110110001000101000011110110111010110011101001011100010111011001111100100100011011111100100011010101101110011011110100110000111000010010100100100011000101001101111110010000011111100101000101000010001000001001101001111001110110111000101010110010101110011100000110010011010111100111111110111111010001110010011101010111101010110010101110000110111101 1001000111110110101010110101100011010111000101000000010001010001010101011100100000011101101101010000001101000101111011011110111110111100011000101010101010111001001001011000000100111010111001101011011111110101111000011010110010010101100110110101000010011111000011011000001000010010011000101001010100001010011010010000000010011101101001110101000100010101000011000000101110111011101100111100111000101011 0110101111010101000111011111011000110011100100000001001100010011101101100110000001111111111110000101001111011011101000001011010100010100110001111001101011001100010011000101100110000000000111110100110010111010000010011100100101010001101101010011100001100111001011111111111111110111100011010001101110111011111010000001010001101011011000110010001100101001101110000101010001011100010111010110001110010101 1101011100010001010011111000001100101001001101010001010111011111111010111000011000111011111100100101000000000000011000111000101110011110100011110111010111110111100011100111010011001111110001100010001101111010110110110100010000101000110101010110110000110000000010100011001010100010100110011110101111010110110100011101000011100000010000101110001100100110101010010100101101001001101000010100010101111100 1111101011000011010001010000110101011000010110100010011101011000100110000000110010101101111000111010001111011001100110110000111101110111000111100000010111100101110100110000111000111101001011101010001000001010001001011001010101001010001101101110101011101110000000011000000001101110000011000110010011100100011011100111001101111111101101111000101010110001000100110000010100010100001111101000010000110011 1110010011100101000000001001110000110000101110000011110111001000000100010010110100100111010011010000110011000110100100011111110010101010000100010001111100001000001110000100000111010001111011000000011100011100010000011100110111000010110010100001111111011011110011111010011101111100110111100111000111110100010001110101110010100101101000101111000011110010011100101000111110010101001101000111100111001011 0000111100000110110101110100000100000111010001011000001010010100010010001000011111011101110101101111000101111001100010001000101001100110011111001011011001100101000110001000100000100101100011101001111001011010011101010011011010011001011101000000000110000111011110010010101100001111101010011001010101000001101101011100111010100100000111011110001001010110110111110100111110000101010111010111110001110111 1110000010110100011101000100011110000010011011111000011000001010001110101100001010001010000010100100010111001011001001001110111011101101110000010100011000010010110110100011111100000000101010100001110011000011001111011011110111101011100010100001011001000100011100000011100100001110010010011110110101100110110000011111110101111001000010011110110001001111000000111010010110100001110001100110101111110100 1100000110111110110010011111000101001111010101001101001001110101110001010101101110110010100010001110101011100101000111110010101100010000001000100010111010011101001010111111100010111000101011100011110111110111101000110100111001111101000101001000010111100000100100100011111101101001011011100011011101001101111101111101110001110101110010101100000001111011100010110000011010011110010100010110101110001011 1010001000110001101011110001100001100110100100010000011000111010001010111111100111111100010010010110100000000110101011101100011101101011010111001010001001010101100001101101000001001011001100010011000101010111110010010110010110100001110101111111110100101000110001011101000110111100011001001101101010010000000110111000100010111011011110001010100100110001110000010001100010101100100010010011011101010011 1111011101101011011111011001011101101011110110011100011000100110000010111001010101000111100000100101000001001101100010000010011010001010100100110101011011010110111001100111111010000100101010000110010111000010101000011000101010100101010101011110100111110111111010100111010010100001011100100010101111101100000110000100101011100111111000111101001110100001001000100011111001111001000000001000110100111000 1100011110011001101000110100100000100011100100001111011101110101100011111110100010110010000010001111000111100001110101010100111010000010011101100000010101101001110111101100000011110010100101101111001100101001001010111111010110000110010000011000010101111000100111000110000110101000101100011101110010001001101110101110100100110011010010110001011001110111011110101000000111001111000100010110100100100011 0111110110010101010101110111111110101010110100011111101111011110111000010100111101100010100110110000001111100001101110101001100101010111000010101111000001101100001001010001110100110011011011100000011101011111000101110010001011100000011101110000111010101111100000010101110110011101110100110011010100001010110100100010011101010100001111101001010110001011101110010111011111011010111010011100000111101111 1110001111100001100010011000110010011010010010110101100011110000111011100010100010111011101111101010101010001010101011011011110000101001000010001110000001110001101001010100011010110000111001001110110110111111101010010110101010000000001010101010111110101011011001011011010111010111101101001001111001110111111111110011100111110101100011011011101001000101001101111100101101100110101100100111010111011010 1000100010101000110001100100010100110111111001100000101010010100000000111010111110111101111111000100001010100011111110101110100100110111111100101001100001100001011010100010110110110001000111010011011001000110001110011111010011100001000001100101101101000001111011000011110000110000101011111111000001101011111010011010010100101010101001001010100011111101011011001101011100000011101111111101110000000011 1111001011100011110111010001111111001111010100011011111111000111010100010100011001011011010101110111100001001100000111011110100110011111111101011100110010001110000101100011110001010110110011100111011011000011111010001101010011001111110110111001010100110101000001010001000001000000101001110010101000101110011011011000001101110101000111100100101101011110000001000100101011110111011011100110101100001000 0010010110101000110110100010110010110011011110000100110111100001111110010101111001000101011000000001001100000000100011111000011001111111010000111111000110111111111111001101001010000011000111110100100001111001100010101101110001100000100111010101001001011111010001101011100101101111101001011111110001000111001100100110000100110101000110110110001000111110110001010110110111111000101010100001100010100001 1110010000010101110101111000000011011011110001100111101111101111110010001101111000010101001001101100001100000100011010101001000110011111100000000111010010101100101010011001101101110110100111011101000010101100010000010000101000100100110000110111111000111110100001000000001011100100111110111011111101010110001111100110111000001110110000011001110101010110001100111101001011001000100000001101110101100001 0111000011010000100010110011111100001101010110011001110011101110101010101111010000011111000011011100011101000111110000100110101100011100001011100001110010000101001010011000000011101101010000011100101111110010111100001011010110001000000100110101000110001010111010100111110010100111010101101111100111111101100001100000101110100010010101000011110110111100011100101011101011100010000001001010000011011111 0011110110101011101111010000100110111011100011110011001111100000010111110101010010000111001110010111001011011001010000000011011010110001010011000011101001100011011111110111101011101010001111111100111111001110101000001011011110000111010100111101100001011000100001110101111011001010001110101111101010110000110100011111110010100001101011101101000111000010001011111100101111111111110010011011101011001111 1010100100100011111100010111110111111111011100111010000100001001001001011110100011011010111000001011111000001011101111100100111010110000100000011011100111100000100111001001010110100100000010110011001011001001000110100111100101001101001001111111011111010010101110111000111010110111110000100101100001110111110001111110000001100000110000010111010000101000101110001000100101001110000001110001111100100110 0001010110001110111101100011011110001010110100000001101101100100001110001110000001101111011010110110011111000010000001111011001010110011010001010000100010010000010110101110100001010100100000011110010101100010000101000101001000001111111111001110111010100110001000110100001011110111000101010001001111110010000101110001000101011010010111101011101000001110100010101111110001110000011001101001010101111001 1010000000000001101011011010011011111010001101111001100100000100110100110011010101110101000010001010010101111111000111111111101001111000010100100111000100101000101111111111101110101000000110110011010010011011100011101000011000000110101110110111111001010000101111011011110100001001111100111001011101010110011110111010000100001101110110010001110110100011010011000101011111111111110001101011100111001001 1101110011101011101111010110010101100110101011101010100100011010000111010111000111101010111100100011000100010111001101011110001001110101001010110101110111010110111010011111110010111101000000000111010000101001111100101010001111101111000101101001010000010101001100111000001011100110110010100110011000100101101101101101010011111001100011111010000111111101011110000000000000100110100111000100010011110110 1110001110000101010000111110000001110000001010100110100101000011101110000100000101000110110110000011110110011000001011010111010000000101110110010101111011110011010010100110010111010010011010011000000111000000001110101111101100100101111011011001111010110111011001000101110110110000100001111101100001000000000000111100011111000111100000101011000001011101111111011110100111100011000101100110010000111101 1110000011001001111010100100000110001011011101110000101101000001111000010010100010101011010001000111101100011000101101000010101011011110011011011110000110100001000010110111100100100111101100001111010100011110101101001100110011111011001000010110001110111001110111001001101101100110111010000111010000011100001000111001110010001111001101011101101110000011001010110001011000100001011101001110000011010101 0111011101001011101001010111111010011000011000011001011001100011101010110001111100001011000001100100100011001000111110100101110110011011100010111111001100111001100101001001100001000000111011100010110011010100011110000011010000010101110111100101001111001001011101011100001000000101110110001100110100111110011111101101100001101110001010101010100110001000110110011011010111000001110100100011000011100010 0001011010100000000111110111011011100110101010101101111010011001111000001110000100111010110100000010001100100101100010111100010101111010110010101010000010010001001100110101000100001010101111111101001010100011011111010101100001011110011010001011110100100101111001100110010010111110101000000000110010110100100001110001111010100111111111011101011111101101000101111111101111111011100111100111101110100001 0110110111011100010011111000011001010100101011110100011000011110010001100111001101100011000001010011001001000111101101110010110101011010001010011101010010110010101101010011101100010001010100100111110110011100101111010100010110100001011101110001011000001110010110010111111101100010101010001011011011001001011010010001000110011100001011111001111111010000101011001001100000111001001101111001100001000001 0100100111101100110001011110100101010000001111111011001100111011100011110110111100101110100001010101110110000111111001111101111001101111111111001001010111000000111000101001011100100111001100011110010101110010001100111011010110000000010000110100111101101110001010101010001011011011100000101101111010111001010011101011000100000010010000000100011011011101001000111001110000101110011100111011100011101000 1001001101011100110010001110110100001001110011000001011101011010111110010110101010001010000011110101100101000010111111010010001011111110011100011100100010100100001011011010100010111001110011010100011011001010011110011000010100111010011110010110101110100001000000000010111110101010100001111101000011101110011011001100011011001110101000010011000101111001000110110110101111110100111101000011010000010001 0100010000011101011010110110100111111100111101011001110111011111100110010101111101011101110110001111011011101011101101001011001110001110111011110111000110111000000100110111110101001010101111110011011011101001100000100000100100001001110100000000010001111110010100101000110101100111011001111100101101110001000000001110111001111100111000111010010001111111001001111110000110000010100011101100001110001011 1100111101001110011000100101011010001101010010010110100110110011010110000101110111100111100100000101011101100010111101101100000011001110011011010101011110000010100101100010110001101010110010101001100001001110010001001011110011100010110111110011110000000000110100010010110010110110100010000100100110100101100001101100101111011110110001100100100001010011011110000001001110101110011100101011010001111001
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