0111100101111110110110100010110010100111000110011000100010110010001001100010111101001111110110011001101100001101100010000100111001111101110010010000101101100001010011000001100001010101000111001000101100101011100010010010001000011111000100111111111110010011001100010011110001000011011110111111111010101011100110010010100000000000110000101000011011101000110111100001001100111111000001001011001010111101 1111001100011000100100011000111101000110100111101111011111111111010111101111000101101100010000001000011011101011011011011010001010001000110110000111010100111110101011101110100101010010000000101000010100000001011011000100010010101100001100010000011010000111001101100101111110110100011011110110101010000000100111111001000110111001111010000111110110110000110110111100101110001011110101100001100011011001 1000000111011101001011010110101110000110100011110100000001011011101101111001111001100111110001110111000001111111000010101010010001110110010111100011100000101111001011011110011110001001010100001001001100100111100011010101011001011110100101011100100011010100101100000001100101100101001001100100110010010010010001011111100011000111100110100001110101001110110110011011010010000011000011010010000011100011 1110011111101111011000011001000111101011001101011011010010111010010101010100011110110101110010101111010010100100011110110111001011001001110100000000010100111100001010001000101100100000111110000010001111011000011001110010101100101110011100011000011100010001110100111100010100011100110010101111001101110100101011000101010010010111000111010010111110011000111100101100011001001101000101100111111010100100 1111110001011000000101010101000000100101011111000001101100111100111110110010111110111001101100100100011001101100101100100001001011101100000110100010000011100001111011110110011011100101010111111000101000111010110100011101100011101010000000011111010111000110111110010001101010001010110000110011101101011001011000101001110001110001001001001000100110110111101100100101111101100101100010111010110111101100 0010000110010010011110010110011001001011101001001111111111110000001000110100101000011111010101000000110101010101000100101100010111010111100110110100101110110000010010100111011101110111011010011101001001011000001010101010101111011100001001111111001010010101000000111101010101001011011100011110011010101010110101011101001010001111010111011001010111011111101100100101100010101001010100011001001010000101 0100010001001001001010100110010001000100010011111111111011001111101101010100111001011110111000000000011100100011111111100111100000100011001101001101101100011011100000011101000110010010110100101110011001111100001010010001111111000100000101100010010001111110001001001011111011110000000111010001100100110110000011111100110001101000101100110001000101001011110010010001110011011001101110110111010010000001 1011111011100010100101110100011001001000101110101101001000110101011011001100010000101100110101100001010111110000001011001010001010100101110001111010110110010000001111000111101100010100011011100000111111001101010011111101110111001110011001011010110111011001101101101000101001101010101101001111010010100011111001111101011000001110010111000110000100010110000100010100101011100110100101101011111100001110 0011111001111100011100000010101001111110011100101110101010011010101011100101100111011100000001111001111100010001011111011011001101010110101111101000000100100011000100101101100011000000010111011010010110111100001001000000001100101111000110110110011101100101000110100001000001111110110111010111101011100011110111001000111111101000001100001001100010010111001001010010001100010101111100010001100001110100 0100011010010001011110100011101110001101100011001000100010101100010001101011001100001011110101111110011010101000110011010000001001011101010100000001000111001111100001101010101111011001011011000001010110011100111100010100000111101010011100001101000110011111001000001010101100011001001000011101111110101101001010010100010000010000000001100000100011111001010101111110001010000101110010100110101001001101 1010111111010011110101100001111110001111100101000011101000010011111001101000100111110001101000110100101010011110000010010001011000111110001011111010011100001011101001100110001000001001011001010010000000111000010100101000101000101101000101011000111010011010010101001101000110001011010001110101100001000100011001100100011010010000001110001110100000100010011110001011000101101100010000111100000001101000 0101010110010001110110011011000111010011001100010001011100111010100101001010000110101101110110100000111010100100010100111111101001010011101111001101110110101000011011010110101000110111110011111000010011001111000111010111011000101110110000011110001110001011000101001010011100011101101000100000010100111100101011101110111110010010110110101110111100101100001010010101111000011010110000100111001001110010 1100000111101010001101100110000010000111100101011101010010001111001001101110101101110010110010000011001110011100011100101111000011111001101011001011011000100101110001110001110011101001101001100111001110101010010111111011110101011001101000001111010001000010000110100111010110011101110100011001010001010000011101111000011010000010000001110110011001111111111100001001000011110110111100100010001101110101 1110101101101001111010011110101011010010011010111110110110000000010001100011101110000000111110001001100001000100001001100010001000000001100110001011011110111010110010111000010010111110100000110101100101000010101010000010011010011101101101010010011100111111000100111100111100110000011001010110111111010010100110011011110011110000100000010010010000010111110010111100010000101110010101111111001011110010 1001111101001000110010100101100011110001111000100000101101101100110100111100001100001011110001100000011100001011111001100011110011000011010101100100101100110000111000011001000010100010011110100110011011001000010010001100001000000111110100010001011000110101001001111101010000110101101100110110101010011101111100110010110011111010001101110101010101110001111001101101010011101100110010110110000011111111 1001000100000010111110011010111101001010110011111110110100001110100010001011010010110111010110001001001100110111001011000111100010011110111001100010011011100010111111101000010111011110011001001000000000010000101011100110011001110101001001010010001100011011110110000110011100100101000000101101000001101010100101110101011110111001001001011110101011111110010100110001001011101101100101010011011000100111 0010100101111011100010010100001010010011010100000001100010110110011001101111101010111010011110101011110100000100011111000111001001001000101011111000001000111110010001101011110010000000101000101100011010011110111001100011111101010100011110100110001000011001010001000000000100010010111011101000110111011100001101011011110101110101101001011111011101111111011111111110001000001011010111010011010100101110 1100111011100110001111000101111010111010111101100000001100010100111000001101101010110000001010101101101110010010110000011110010010000111011111001100010110111111000100000101100100110101110100010101100100010000111011100000000111010011011010100000101001111001000000100001001001101101011101011001010001100001001010110100101101101010100100101001111010110100110111001101011110000101001000001100101111010110 1110001101011000010100000001011101111000111110111011010101111010101110011101001110101000001011010011010101000011111100000111110110011000010000000101010101000000000111100111111001010010000111011100000000011111000110110011100010000001100001000101111101011001110000010000110001010001010111011000010000010011110010101101111101001101111011001000110000010100110100011100000001011010100000111100001011001001 1101010101110000010111101110000010001100100100110101110101000010110100011001011101100100001001010010001111110110000111111001011011001010110111010100000011111000100000000001011101011110101100011000111100100010010010110101011100100101010100110000010110110011010010011001010010100001110100110000110110111100101100101111110101011111100110011000010101001110001111001000000010111000011000011110011000111100 0100010010110111111000011100011110001000010001100111001000101110100110111011011111110111001011111000110000010000000001101010011100101111111111101101011000101101001110000111000111100100110111000101010110110110111111101001100111001101110001111110110101011011010001001011000100011111101100111010111111010000101100001100011001101111111011001100100100011001100001010111100011111011000011101101011111010110 0100010100111001101011110001111111011001010001001111100101001111010011011101010010101011001011010000010100010010001100000101100100101001000000010011011000100001110110101110000010011011110100000010100101110010111111101001110010001010010000011100100111110011011011001000011000011010001100010010100001100001000111110001010100111110100010101100101001110011111010000100011101111010110100011000100111010110 1010110101101001000101111001000011100000000010111010101010001010111000000000000011100000011011100011101000110110000010001100000111001101110110010010101001010011110011111010010011001010010110000110111001011101101100110010100000011110100010000100000011011011001111110000010110011111010001010001010101011110110010001000011001000011010011000111110100000101101010001001101101001001010011101111101011000101 1011101011111000001100110011011010111010111010001110110101010100110100011001010110111001101010110010001100101000001111100001101001111001011110100010001000110011000100011011110011111000101011110001100010110111011011110010101011010111010110100111001101100011010011010011111101000001111001110000100111111111101011010001011010011011100011010100000100100001000101010011101010000000111111101110010100010100 1010101001101010110010000010011011000100110000101000010100011111000101100100010010011011111010111100101001001111000010101000101011110110001100010110001110100000101011001011111101011111101001100010011110100011110011111111010001100011000100111000111011001100010011010011011110100000001000010101001010110011110100011111110000101111001010101100111110100000001001110101110000111111101001010000001001010010 1101110001110110001011010011110011100010001000101011101101101001100111010100110000101001110110100101110000000001001011110010101111101111000100001111111010010010111110011010110110011001101001110101111011001010001000001101000011000010011000101000101000000000110101001111011100100011001110010011110010011011010000001101010101000111101111001010110010101000010111111011111110001000010000111111001101010110 1110100000101100010001011110110010111100001010011101111101100101001001100100000100101110111100011000010110111000100101111011010000110010000101010110010111011000110110111111011001111111001111001001100011001111101110000011000110100101011010010010100000000101101100000010000000110001000100000111001111001011100010111111001010001100111000001110010001000100001100010010011101000100011110010001001001100110 0100100101011100001101111010011111010110000000000101011101000001111100011110100110000011111011101011100101101000001000010111000111010001110011001101001001010110010001011110100001100101100100100010001001100111000011000111110100111011101010101100101011110110100110011100111000000111011101111001110001011110100011001110110010001011100101010111111010000011111110010110110111010000101101111001101010110101 1000110110110100110101110011101000011010110011010011000110010001010000001111101000100100011011110101001110101011010001111100101001011101100011011011001111101101110001111011011100110111100100000001011000011100110010100000010000011011110001100101011110110001100100011000011110000000111000101111011010111000110101000011001000000011101110001011001010100010000100101010100100101011011111011100000100100111 1000110000010111011000100111110100100001111100010101110011101101011000100110011101101110111011001111010001101001011111001010011111010011011011110010101100001001010111110110010110101101010011110011011011111110011110011111111011001101010110100101100101000000010100011000000010001000110010000100111100100011010000100010000100000001010101010011110111101111101100101001011000000000110110011001011111001000 1100111101011010111001000101110001010011100000100111000111110010011011000110100000110001110110001010111011110100111010011001010010101010110000100001101110100100101110000110010011010010000101101001110000011111011011110011000110110010010001001011101001110010111100101011001110111010010111101001000110010001001011001110110100110001010001001110110100000101000001001100011000101000101100101110000100001001 1100000100001000101011001010010000101100000010111010111011100011111010111111000111110101011100000101011101001001111110111111110101001001101001101010101111101000000011101101110110101011010010111110110100100111010111110011110111110101111011101011011110101000101000000101010101101010011111010010100110001010101001001110001001010011100101111110110001101001010011001111111110001001010000001100000011011111 1100010111100111100011000100111001010011111000111110101100001101000111010101100000111011000101000001011011011000000111110010110100000100111111010010111000010101011111110011010111001110011000100111010000011000000010110010110000111001100101101011010111111010111101011011110000110111111001011001110000000101110100011011100100111110100011111011101110110010011000100100110010111000001010001000101011111010 1110101011101101001111101110111011001111110000011000001110101011011000101100111111111100100010011110110010010110101010111110000001101000001101110000010000001111111011000000111111011011011011101000000011110011010111010110111001111111111010110001101010000101001111111000001010010101110001111010101110010101011100111100001001011111101001001010010100000101000110101100000000011001101110001111100110000011 1110000110111001010010010100001111100000010001100001101101110110100111010000111011100101001011111111011000101001001000100110011000111111100010110101000010011111111111000011101110110100110100001011110100101101001001111111110110010101000000100101100101110110011001001100010000000010000110101101010110110111001011011100101101001110010010001111110001010001110110000000010001111101010101001110111001110100 1000100001100011010000000001001000010011001001011001001100111111100101101101100011110011011000010100000100011100001101011110010011000101011000010001000110100100001111100001101001111110010100101111111000111110001001011001000110100011011110000011111001001111110000111001110000100110010011101011111111000101000110011010101000101011001011100111001111001011100110111011011111100010101110111001011100001100 1010101000110010111001001100100111100000110010011011100010100011110011010010111101111111111011101011100100110111001011010101100001000000100001000110101111010000010111000000001100110001110001011000000011111001001011101111111010111001001110101110001101110001100010111010011000100000101100100000010001011100001010011011010110100111101011011100011011010100111110101010001011010110101011100001100010010011 1100011110111100000000110100000000000000100000010111011010011100100000001000100101010000101001111110000001111101101100011111001000001000101100111011010011101100011000011100001101011011001010111110000100001011111000011100101101110011100111000110100111100001110110011001011011110011110001100110100010011011110111110010101100111101101010100000010101110010011010100000010011101010000000001110001010010010 0100101100010000110000011101011110010110010100110000001110011100011001101010100111100110100001001001010111100010101001000101000001011000000011000100010000011111011001001011011011001101101000011011100111010001001101111100111010101100110011011010001111010111001011000100101011101011000001100000101100101101110011111010011010110110111111010001000001100110000101000110101111011010000111001100011010000101 1011101110101001111001000111110101111110110101110001000010000111100000111010000100111001110100001001100001001110010100010001101100000101000111110100010110100011100100100000010001010011101100100001101111101100111000011010000001000010110101100100001001001101001110111000111110011100000111010001001011010001101001100010111000101110001011001111110111010010001101001001010001101000101010000011110001011101 0100111101000101100011100111000011000111100101101100111001011000010111111010100100001111101100000001001110110000001001110010100010000011100101000101000111100110001000001111111001111011000000110111001001110011001101000100000110011111001000010010110011110001100110100111010001010001110110111000111010011001110010100000100101001110000100000111101001111110110010110010111011100100110111110100011001111100 0001010101010010001101011000000111001111111110000001000010001000010001000101111011110111001100100000010111110110101100101000010000100000010011101000010001010001100110101110010101110000011010011001011110100011001000011000101111111111001110101111000001111101001000101010000111001111111110101101001010010110010011110001011000111000010101101101011100111010110000001110100010100011110100111111100000110000 0101011000010100111010001100000011101101101011111011110100000110010110101100101001001110010110000011110000001010100010101001001110001011111001001001110001101010110100101001011011111110010000001001010011000110101111111111011101010101000000001100011100110110101100101100100000101011101110001110101010000010000101111100001001001100000101011111111011110010100100100110001001110011001010101001001110001011 0001101101000101100010100011001001000100010000000001101101101111011110111011000100000111010111011000110111001111011010000001111010000011101100101011001000011011100101110001010010100110001111100011101100101000110111100000111111101111001000101101110001100001101111010001010011101001001011001010100011110001100101110011001001001111001011011011011110101000001100101110111110011110100010010100111001000100 0100110101101101001001110100001110111001011111010110111010011111100101011001011101111111010111001000100100001000100111111100011110101001001010111101011100000100101100110110101100111010100111101001011000111000000001100110100001010000001110000111010101001111101011010011011110001110101001000101000101011110010111001110101100111010101000000111011110001011001011011000000000101100011011110010010010000011 1110000000110001111000001111100001010101000100001011011111110011010001010101111000100100011010011011000111100111000100110111010011111110110110110001101110000110001110010100010101101110100110001010100100110000101010101100010111010001001101000010011011010001111110001001001000010111010111100001111101010110010011111110110101011110111101001011001001100011011101010000001100001001011100101100001100000101 1110001111111010010011010100011000001000001000101110011011011001110011000001010111101110011001100000000100000000110100101011101010000000011000001100111010010101001011110100010111100010010110011011100100011001101101001101110110111100100000011010101111100001111011001100011000011001111010111101001111101100000000111110100010111010000001101111010101011111011001101010110011111001010011010100000001001110 1110101000011101001001001010011100110110100101001011000011110000111010110000000100000110111011110110110110011001001000011101000110000111111110101100000000000111111110110011110111110101101010101001010110110010100100011000110101100000111001010110011111100000101010001010101100010011011111101001010111101010010111100001011101010000100010101001111010111101111111110100110000010011000110100100011001110011 0111011111101100110000010000100000101000100001101100110111011110000000110011010110110001110001111111000100010000100011001111001110110110010001011111010111101001011011001111011110101100111011000001100100101100001100011001110111100111110101111110010000101010010010011011001111110101001111110011101101101001101010000111000001100001110101111100001101001001001111100000010010010010000000100000011001101111 0110111000010101011000100011001011001000000010000110000011101100000001001010001000110101011001000010001001100001110111101101101100101110101111000011110111010000100111101100111000100101000110011010001110000101110110100000100101011111100011001110011011001000100000000101110110101100000000101101110101110100100010110101100100101101010000100101001100011000010101111010111101011001110101101010101101001100 0011110001011101001000101001001011110100110010101000100110001111010111110101001001110101100111010011100011010101000000101010100101011100111101000111111010001011011101010000010111001111010000000110100101000110111110011110101110001000111111111001100000111100111111000110111100110110001100001000000110100101000100011100000100111001000011101101011011001111100111011001101000011011100111101011011010111001 1010010100011100111110110101101101111111000101010001100101100101100100111101101101101111010000000110001011010001001010101011101011010110001000001011000010100101010100011001100110111010001000010011100011100011010011111100101001000001110100110001100101100001011100100001001101101011110111010101010101001101000111100001001100011100010101110000000011010110010000000011110100110001011101111000011100011111 1010101111101101101000011000110000111000000010011001001110111010011001011011110110000010010011111101111000001111101010101001001100011000111111001111010110110110101100010000111111001001100011111101110101000110111110000101110110110000001101101010010011111010100011000100100000001011010111101101010110000100101111000111101100000000111001010111000001001011100010101101000110110101000001100110110001111010 0100111000001001100000110000001010111010001111100000001110011010000101001011101011110001000001101000100001010111100011101001101001100101000011010000001101010110100010001111001010001001100101000001000100110000011100011111010100111101101001010100011011111000110010011001110110010110001001111101001011100000111100000100110000001100111101100110110000010100100110101001010111000111010100101101000011111101 0011001000001110000010110100001100111101010111110101110110000001010100000001110111000001100010000001010101010110111011011000111100011011001100000011001110111100010100111010010001001110001101010100000111001011011111110110110111000001000110000100111001101110101100001010000010110000110101100001010111000001011000011001100111011010001010010001100101010110000101111011000010101010111001110101010000000010 0001011110010111001011111011101001100101011001010011110010011011000110000001001011001010100001000001111000110000110101001001101110011001011101110010100100101001101111010010110100100011110111001000111111101101000001101011110110111000011000001110101011100001101001001000111011111001000001011110001101010000010110000000000100011011010111010000100111100000110001000010101011100011011111110000100110010011 0011111000010111000100010001101011011101111100000100111000001000100100101100100101111111011010110000001010100100000100001011011101001101001011011100000100010111010100001001000101011101001001111101000100101101101111010011101111111000010101010001001011011010000110001001101111100101001110011010001111111001010111000111100000110010101001110011011000110011011010011100010001011101111101000010100101100110 0110100010011111110110100101001101110011010010001111001010110011110101100010001010000110100010101001011010111011010110010101001110110001000000110001011000101111111100101111100000010110100100010010100110111111111000001110000110000111110010101011101110011011100001101001101111000101010011110100110110000110101000000110110010100011010100101000010001110001011100010101110110101010001010001111110101011000 1101110100100111000100101000000110001101001010101100110100000111011010011000000100110001100001100100011111111111001000111000111101101100100010010101110110010100100101001110101000110010010010011000010010101111010011101101111100101111101001100110100011101001000100100111000010010011010010100101111010011110000011010011101001110110100101101011011000001000011011101011010010111111100000011010101110100010 0001100100100110100001111101011010110101011010010101110100101110110000000101000101000001111111111111110010000010110011110000001001000000000111001111110000111101100101010100100111000000000001111001010110000111101100000110011001100000110111100010100011111111010110101000110110000001111000011100001101111011101001100100110110010111100100001001100010011110111011111000111111011110010000001110001001011110 1000000000100011010110110000011111001000100000111000000000111111100110100111100100011100010011111000101011001111001010100000000010010110010011101110001100100101101111111111001001110111101011010000001001110010101100000011011100010000110110000000110100011011110000111011101111010110011101101100010010111010100011000000101011100000101101110110110001011011110100100001001111100010111001101110011111101000 0000000101010101100001011100011011101011110100100100101001101010000100101100101011100011011000110001110101011100110100001000001111011001110101000110101011100010110000000011011011010011010100111100110000001001111010010100011101100000001000010111100101001001010001100011110011010001000010100001010001110001010001010111000110000111110011110001101100111110010100001110010010001001110110011011110010010110 1010001101010100110111111111100001111011001010010000111001000010110110101110101001111110001110000010000011000110110111011011001011001010000110101101110100011111111100110110001001110101010000100001110010101010100101001010011001000001101110101011001011101111111011010011110101100100110111000110110110111110011111110110100010000010001000111000001001100011101011001100000101000011100010000001100001110111 0011111111111110110110011110010111111010001101010010111010001011010100011010010100101110011111000000001111011001111110000101001010000011000010011110111110011011100111011011111111010010000011100100110110000101100011000110110111010111011010111101000110110101000000100101111101001001000110000000110110100001010000010011011001011010011010011000000100111111011000110100001100111001101101111111101101101001 0010111011110101000010111011000110111100111110111111111101101001011001101100110001011001000101110011100000101001110110101111100100011001011111001000110101011011111111110111011100100111111000000101110111110000001111101101110000011100000110110001101001000000101101110001000111111011001001001001111111101010001000111110110010101100111010010111000111110010001111001010101110011010010000110011011100101010 0111110001011010010010010100001111001001001101100001011100001000000111000000110101000111000001100010100100001101111110000011101100001110111001101110111100000100010100110010001101010101001010110001010011011010101101001100011000010011010010100011111110101101000100011110111000011011111000000111101101110101001010010110010100011110100100010011011110110111000100011101101010100001101010110010101001001101 1110101100101100010111000101010110101011001011010100011001011001101111010100100011011111110001000110010111010111111101110100010111000110111100010001011000010001011011111101000100110010100101111010101110011110101000110110100101111100101000100100100100111001100100000111100000001100111110110001010001001000000011111001100010110000110000101111100100101101000011101101100100000000011001110101010110001101 0101011111000010010010110000111101100111001011000011101110010001010110011010010011011100011000010111001010010101101010110111011000001010001110101010001011111110101000110001101100110010110001010011110110101011000011001110111010011010100110011100110110110111110010001011000011110011100110100011111001110000000101111101101100110100111100101010011111111100011000001100011010000110101011011101110010010111 0000101000100111000011110111001110011110010100000001110010010001001000001001100010101000101101011001011111110001011101010111100101001000010110111001100100000001010001110100101101010111001000101011001010100111100001000110110001010000010011010101001100011011100010011000111100011100010010001111111101110001111101100000001110000011111111110000011101000011111001100100110111010110100010111011101000101110 0001101100101100111100001111111001101110010000010000101011001000111101100000001000110000110001011000110000011110000001001001101111110100010111011011000100001011101010100000111011000011010011001110101111110010110101010010111101001101111011110001110100101101001111110001000111001011000000101100001111010101010000100111000110100001110110011110100101011011011100001110100001010101011011001000010000100000 1001111111101111011101101100011101101100000111100111110010110101010100010111010100111001000000101001101011111101001111101110111011111101101101111111011100010101011110110000000010110111000010100000110100111011001010011110010000111101010001110101011110001101001010010100101101001011110101010101110000011011110100000010100110110101001011000011000000000000101110011100011011110010111101111110011011111100 1001101101010001000010010010001000011111111100110001100110101111110000100010101001001100111110111100001001011001000011100001011111011101100110000110011101000010110101110101011000100100100110000010001010001100101000011111001111100011011011010001001110101010100001010010010101111100101101100101010101011001011111100101101010100101111100100010111011101010110001000011011111111111111001111001011001000110 0110000100011001001111011010110110101000000101111111110000111101110000111100110111011110100011011011011100010110001110110100010010011011111001111011111110011011111000111110111000000010011101111001011011011001000111110100110101100001001000000100010101101011101010110100100101111000100000001011110111010100000000011010011001011010111011000101010000111010000101100000000110101001100100100010110011100000 1001111100110001000011001111111110000000100011110000111011001001011000100000010010100001010000010011000001010000001100000101010001101101100010111011001010000111111110000010100110110110110000000111111101101111000110011110000000001011011110101000000000111110111000101010111100101000110111000000110001111011001101010010011001110001001110001111011010101000111101110010001010010110010100100010100001101000 1000100010101111000110100110010110110001110100100100010001001010101000011110011010111010101100111110000111001110000101111110011101011101001111001000101110011101001011110111110111111010111111001010100000101010101001001110111111101010010110010010101000100110001010101011101010010110101001101101110100011010001101010100110011011111010001011000101111111001001111110111110111001011101001101001010101010001 1001010010111111000001110100100101100110101010011111010001000001010001000000100010101101011111111111010011110010010100111010011110001101000110110000101111010010100010100001010010101101110001101110101011010111100101111001010000011111001001110110110101001001001000001010111111011000001101001000111000011110100010011111111000000101000011000001101111100011011000110111000101110111000101010010001001011111 1000001110011111010010010011101101111001000100110001111011100011111000101111100011111011100000000111101000011001001001100011000100110110000010100000100101000010001001110101010010100010010000101000100001110010001010110001100011100000010010011001000011110000111111000000000011011010001100001101000001011010000110010110111010111011001001100110101010110101001110110011011110111010001111011001010110001001 0110011001101000111011001011101101101100010110010001001010110010001011110100011100000100110010110010111101011110011110111110100001101110110010000110110010001001000100101100000010010001100000111011001110101010010001011101110011001111011111110111100010101000100110101110101110100101010011111111000000111100011001001010001001101101111100110011011001111000110101110110011101100001010110011111001100110100 0000010000011011100100100110000111000001000001100101010011000111010101111011110010001000110111000101100010001100100101000000101001111100110110111011011011011110111111110111101100110100001101011111010011011101110100101110010100010010001111000111111110101101001011010011100001011111001100000000100010101011101101101010011010101010000000110101100111100111011110000101101100010000011100001101000011100010 1101001000100111101011101000000111101101100001010100001010010101010001011000100001110101000111001001000111111011010101000110111011111011111000010111100011000010000011010100111000000011101011010111010110101001010101000111010100000000100100101000011011110001011111000010100111100000011110110111000000111101010101011011001011010000010010101111111001001101100010110011011101001111010011101111011111011101 1011111100110111110101100010101000000011000101001000111110010000010010010010101001011010010111110100110101111110010000111110000111010000101100010011001101011000010011111110101001111100001010001100110000011011010110110101011100101000000100010000110100110100101000100010011000110001001100000000001101011111111110101101111011111000111100000101110110100100110000101000100001110110100000011000110011000000 1000000001001000110111101001011100000110110001101111100011011101000010101001010001000011110100111100110011011001110111010010010110001100111111101110001101000111100101111000100100010011011100111000110001001001000000010111000111000011000011100001110001100001001101011011100011111100010100011000011111000111101001000100111001001101011111000010011001110010011011010110111001010111011000010011101100001010 0101001000001011000010000010110000000010001010110010000111011000111000011100110000101000011000001000101000101011100101100011110000110010001101111101000111011101111010010010000010100110100000010000000010011111010101111001011100101001110111101010100101011011111010110001011001101010011101001101000101010000001010011100000000000110100000010010110011111011010010000010110000011001100011101001010101110100 1110001000011000010011001111011101110010110010001100110101101001001111001111000011010011011010110001001010111010100000111011000101111001101110100111011000010001011001010011101010101100110011110010011001000010011101000001010001010011011101111001000100111111000000101001011010011001100101000111111000111011011101001010000001010010111010011010001111111110001110101001000111111101100100111100101001000110 1110101110111111010110001111000001110100100010000101000101001000010100000100001000000011101000000010001101001110100101100111111000011001011110011000011010110110001011011001100100001101101010100101111111011100110001001110100111101100011101000011011101011000000010010100010110010100000001010011001000100010001111010001000011001101111010111000110001111100010010000010101100000011000110111110011011100011 0001110010100110011000101010000001001100011000100011001101110000011110110001011100100000001101011011011000111010100011010111101100100110001101110100011010011111111011111011110100101111010110000100010001010101010000010101111011001110111000101000001111111111111011101101101100001001101101110001000011100100110010110001100100000011011010010111111100101111101111011011011010110101011110110010100111001011 0010001111011110010101101100000010011111111010001110111010001010010111110101100011111000100100111011011101001111001111000101011000111010001001111101110011011001011100010100101011101100001010000011011011011100111010110000001110110010011011001110000111110011100000011001101111010011111110001001100001110011001010110101100010110100000111000001111010010000001101101110010111111000100100111101000111101000 1101000101000001101100100110011100001101111011101000001000001011110010011000011100100110011011110000100111111011101010100000011000000001111100100000000000101001111100100001000011010011110001001000111111100111111111010011010001110101001010111011111000010010010001000111110010011101110111001111001001011110110111101011000001010101101110101111100111000001000010000011001000011000111011101000101010111001 0111001110000110001000111111110001001111101011110110111101010101101100011100011101000111000000000111100101011111100010010011100000010001000001001100000010010111110101000101011100011111101010111001010101011000011010100110100000111010100111111101100101110111100000011100001000100100001000101110101100000000001010110011001110101011110100011001011011110001001000011101011000111110011001010000101000001001 1011110100000110100001010001110110010001110100100010011010100111010100001110011101101001111011010010100001100010010000010100011001000011100000100101111010111110001101001101111010011001011001100111101111110011010011000101100110100001010001011110110110100101001101010111010100100001001100101110010101011101010011110011011000001101011001101011010001100110110000000111111111000000111110000001011000110011 0000001101010111000010000110111000000100110111001100001101110101011001000111101111110100010010011100101110001001100100001001010111110000000010110010101000011001111101110011111000111011110100101111011110111101111110111011111010011110101010101111110100010010000000100100010010011100100101110101101011000010010111110010010000011001100010101000101111101000111000110010000101010111110001100110101001101100 0001011100011110110011010100100000001101100011000010001100111110111011100110111111011101000110110000110110000011001011000100111001010000100010110110111110000001101111101100101001001100001010000101010110100101101001000001010110001100110111111010000000110011011001110010001100110101100100100110111100111101011111111110010100011010100000110011000110111111001010001001110010000111110110010100000100110010 1111000101100100001101111100001001100010010001100111100111010100110110100011100101000100110111100100110111100011101011110101001110001111101011101111010111011001010111111001110100011000010101001101110110011000101010000100011111100001011001100101000000000100000101101100111001111011100111010000101010010010101101000001000001100100111000100010100001110001100101010101001000011100001100100100000110101110 0101100101011110010000100111110011111000100101111001010000011000100011100111100001100011000110011101100000011100110001001010101101011001110110101110011100001101001001001110110011000010110011100101101010111000001100111100100000011000001010111111101100000010001110001101101010110100011001000101000001110110010111000011010111011101110011011001100110011010011110010001111011000111010101000101110010100100 1011001100111110000001101011110000000010101010010100101100101000000101110111001110100001000110001010001010001111111101001110011011011000000111011010101000101111100100011011001000000000000001011101111001111001100100011010010010011101110001110010100100010100101010000010010001001110100001001101111011111011001101011100100000011100001000111101000101110011100001001111011010111010011110011011010000110010 0010010010000110011111000011000010001001111011101001100011011111000000101010001101011000011001110001111101011101111011111101100100001010110100001010110110101100010110101000001010100101110101100100010010010111111001010000101011101000100010111101011111010111010001000110101010110100000110110010010010001101110100000001010101110000001011010010111100110111111010100100000101100000010000001010001010110101 0010101100100110011011111110111101000111100010010110111001011111011001110100111001100111110001110010111101001001001011010010011100001110001001001110000100100000000101110100010000010000111101010101101101101001010110100101100111100000001100010101000100000110111010000110111101100000100110010111001000011110111111011001101001111110100101001001000011110100011101111100001010101101011100100101100110110011 0010101010000011011111000011011010101000010110010000000010010111101000000001101110000000101011001111010100101100111000010100001110110111110110011000001110010000000101101010111111001100011101111101010010010110100101000001110001010010110111111110010011001101000000000001011000000111111111000100011101001100111001000111100110000000001101100100100010100101010101001100001111010100110111001011010111000011 0100110101001110010110010000000010100010101100100011100100101001010110011010110111100101011000101100010010110100000100010100101001110101100010111100100101010110011010010100110011011010101011110011011101111100100010110001001001110111100101100110101101010001011001010100110010010110001110111111001110011110111101011110010000010111011011111111000110110001000010001100001001111110010001101110111010011111 1011100011010011100111111110001001110010100110001100110011010101011011001100011011101000100000101010110000010111100100100111110001111001011100101111100000001011000011011010100011001100000010000111100100101011101100101111001101100001000000100111001110010110000111100110000101101001010010111111000101110101110110001001010100101111011010010101011101100000001110111110101001100010000100100101110001011101
cTrader Algo

【cAlgo】cBotからのポジション決済方法色々

4/13/2021

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

決済したいポジションを取り出す

今回はcBotからポジションを決済する方法をざっとまとめてみます。

まずは決済したいポジションを取り出すところから。

エントリー後に自分のエントリーしたPositionオブジェクトの参照をフィールドに持っておいてもいいのですが、この場合、適切に処理しないとストップロスなどでサーバー側で決済されたポジションの参照をいつまでも持ってしまう可能性があります。

もともと保有中の全ポジションはRobot本体クラスのPositionsプロパティからアクセス可能ですので、基本的に決済したいポジションはその都度ここから取り出す方がわかりやすいと思います。

いくつか取り出し方の例を挙げてみましょう。

 

Find系メソッドで取り出す

自分がエントリーしたポジション全部

エントリー時にラベルを指定しておく必要はありますが、こんな感じで取り出せます。

var myPositions = Positions.FindAll("MyLabel", SymbolName);

SymbolNameを指定するのを忘れないようにしてください。ラベルだけの指定では、他通貨ペアで同じcBotが動いてたらそっちのポジションも持ってきてしまいます。

注意点としては同じ通貨ペア名の別チャートで同じcBotを動かしていた場合は、そっちでエントリーしたポジションも拾ってしまいますが、まぁレアケースでしょう。

そのような使い方をするcBotを作成する場合はパラメータで別のラベルを指定するなど工夫をしておいてください。

 

自分がエントリーした売りポジション一つだけ

Find系メソッドはTradeTypeを指定することで買いだけ、売りだけ、といった取り出し方も可能です。

例として一番古い売りポジションはこんな感じで取り出せます。

var sellPosition = Positions.Find("MyLabel", SymbolName, TradeType.Sell);

もちろんFindAllでも同じように指定して、売り全部を取り出すことも可能です。Findメソッドの場合、対象ポジションがなければnullが返ります

 

LINQで取り出す

PositionsのFindAllやFindメソッドでは、ラベル、通貨ペア名、売りか買いかだけしか指定できませんが、Linqを使えば様々な条件を指定してポジションを取り出すことが可能です。

 以下のサンプルコードは上記のFindAllで取り出した自分のポジションmyPositionsの中から取り出す例ですが、Positionsプロパティから直に取り出すことも可能です。

 

利益の出てるポジションだけ

var profitPositions = myPositions.Where(position => position.NetProfit > 0);

Whereを使って条件に合うポジションだけ取り出します。Whereの引数(ラムダ式部分)を変えればどんな条件でも指定できます。

 

一番獲得Pipsの多いポジション一つだけ

var bestPosition = myPositions.OrderBy(position => position.Pips).LastOrDefault();

Pipsで昇順に並び替えて、一番最後の要素だけ取り出しています。

なお、いずれもmyPositionsが空っぽの場合はnullが返りますのでnullチェックはお忘れなく。

 

 

取り出したポジションを全部決済する

では、続いて取り出したポジションを決済してみましょう。下記サンプルではclosePositionsという名前の変数に取り出した決済したいポジションが全部入ってると思ってください。

 

単純な全決済

一つずつ順番に決済するならこう。Positionsをたどって対象ポジションだけを決済します。cBotで自分がエントリーしたポジションを順番に決済するならこんな感じになります。

foreach(var position in closePositions) {
    position.Close();
}

ちなみにposition.Close()とClosePosition(position)は全く同じです。これらのメソッドは注文結果が返って来てから、次の注文を送ります。

決済対象が一つだけの時はいいのですが、複数ポジション決済時はこれだとタイムロスが生まれるため、お勧めしません。非同期注文を使いましょう。

foreach(var position in closePositions) {
    ClosePositionAsync(position);
}

基本こっちでいいと思います。

決済処理としてはこれだけなのですが、万が一決済に失敗した時はポジションが残ってしまいます。次に示す決済失敗した時の処理も入れておくことをお勧めします。

 

決済失敗したらリトライ

成功したかどうか確認して、失敗してたら1回リトライするならこう。

var res = position.Close();
if (!res.IsSuccessful) position.Close();

非同期でやるなら次の通り。

ClosePositionAsync(position, args => {
    if (!args.IsSuccessful) ClosePositionAsync(args.Position);
});

まぁ失敗したとこに1回リトライしたくらいで決済できるかどうかはわかりませんが。

 

絶対に決済させたい

1回リトライなんてぬるい。死んでも絶対に決済させたいんじゃ!という方はもしかしたらこんなコードを書きたくなってしまうかもしれません。

//非推奨!
TradeResult res;
do {
    res = ClosePosition(position);
} while (!res.IsSuccessful);

これはお勧めできません。決済できない状況では本当に死にます。プログラムが。(もし死ななかったらフリーズします。)

そもそもサーバーが応答しないときなんて、コンマ秒単位で何回命令送りつけたところでたいてい結果は同じです。

死んでも決済させたいのはわかりますが、死んだら決済できないのであまりお勧めできません。

やるなら非同期でやりましょう。こんなメソッドを用意してあげます。

//--------------------------
// 絶対クローズしたい!
private void AbsolutelyClose(Position position) {
    ClosePositionAsync(position, args => {
        if(!args.IsSuccessful) AbsolutelyClose(args.Position);
    });
}

失敗の結果を受け取ったら、再度決済注文を送る、というのをひたすら繰り返します。

使い方はforeachの中でClosePositionAsyncの代わりにこのAbsolutelyCloseを呼んであげるだけです。必要に応じてエラー内容まで確認してから再起呼び出ししてください。

やってること自体は同期のときと同じなんですが、非同期で動くためプログラムをフリーズさせることはありません。(多分。実際そんな状況になったことないので確認できてませんが。)

 

決済は重要

言うまでもなく、決済注文は自動売買において特に重要ともいえる部分でしょう。エントリーできないならまだしも、「決済できずに損切りできませんでした」ではシャレになりません

決済失敗した場合には仮に延々と注文送り続けるにしても、本来は何度か失敗したら通知でも送って人の手が入るようにする方が望ましい気がします。

また、万が一「決済できない」ということを見越して、エントリー時は仮でもいいので必ずストップロスを設定しておくことも重要ですね。

 

確実な決済処理でよりよいcBotライフを!

 

 

 

 

 


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

新しいコメント

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

cTrader's Life

© 2025 ajinori