1011111001010000110010001010110010011100100100111000111101011110111000011010100101011110110110011000100001110001001011101101100110001010101110101001100110100010100000101000110101111101001100111000111111100001001011100111000000011001111010100001101010101010110111001101011101110010110010010101100001010110110010011001111110101000001000111110000000000110100001001101110010100011101111110011010010011011 1001100110001010110010101001011110111010011101010110011100110010100101110010011011110100101111000011001101100000100000000001010101101011111011011101101100101100111000011010001101110110110110001110111101110010100000101100000111111001011111110101011011111111101011001100000000011111110001101111001101001000100000101010001011011010001001011110111111011010010110111111011010111001111011100000001100111101 1000001100000011011101001111111100110001000000111101111000001011010010000100010011000000111100101001111101111101001000101100001110111101011001110101101010101000001110101010101111001010010000110011100011001101001000011010110101000011100000001101010111010000000101110000011111001001111000100110101110111011101101000011110000000101101010110111001010010101001010101010000100111010011110001000101111111111 0010001101000101101000110101011010010110011000010000100111011011100101110001100100111010011011101011010011011001100001111100001001111011111011110011110110110110100100011011101010101110011111011000101001111000001100110110101101100011000001101010010110000110011111011101011000111010100010001000000001111000110011111001011000111101110001000101100110011001101010100011101001100011010101111111000010010101 1100011111111100000000001000101001001010110001110000100001110010101001010001110111000001011011110011010100111110100110110111001001010110101111000010001111000100011011011000100110011010010011111100010010000011010110100110100010010010100001011101111100011110110000111101000101010111000010011010101101110101011101011000110011111001000110100010101001001011101100000101110011001111110100000100101111010001 1000001100010110100010101101010111111111100100001101001111010110101110001000010000111101111101011111110110110011111101101111010000001100001010111101110011111010000010111001010111001001110111111110101000110110111110110100011101011011110110100010011110101111011001111111000111100000011000011100110000000011111010101010011000111100101011101101100010010001101100000000011010100111001110010001010100001111 0000110001000000100001000110010100101010000010010111010100011101100010100011001100111001011111001101111001101001001110000010001111011001010010101110001110010010000101100000100100111000010000101010001001000110000001011000011000010001010011111111110000100101000001000100110001111011001100111101000001001010011111011110001001110101111100000010110100110000100011111101101010111011101111110011101011101001 0111011010100110100110111000010111000001011101111110101100010101101000000101111100110100111110111010001010101001101001001101001100011011111100110011100110100100011101010111011000110111011100110111100110100001101010100011000111101011110101000000010100100011010001010110010110100001010110110100010110011001000111000101001110010011101111111001011000010101101000111011100101011011111100111101001010000110 0110111000110011101110000101011010101011010011000011011110010111110000101010010000010001011110111100110011001100011110010111101011000000110001010110000100000000010101110000110001110101100000101000011000111001001011001110111000100111000110110011111001001110111110000111100101000101011111010010010110011011111001100100010000001001110100111101111001111100100000000011010011001010101101101100000000001011 1001010011010010110110111111111110001111011101101000101000100000111101100011000001110001100110100110001011100010011000010110100111000011100110000111101110111001011111010010101111011000111100001101110011010010000110011111101011001101010001110101110110011011110001100011111111100011100001011110100100111111110100010000100110001111110001100010000111011100110100110111100100010110100001110001111011000110 1101000110010010110111101010011100100101000010110101011011001010101100011011110111100001010010101000110110100011001100010010110101111011001100010100101011100110010010110011101000010001110011101010001110000111000101101010111011011000110100001001001110100110111110101101110000110100011011011110111001000001111001011111001001100011011010011100110110010010011011110110011001101011110011011001100010010010 0101011011000000000101111000101011001110000100011100011000100000000000110111101110000010000111000001111010011001111100100010101111001001001100111101000000000111000101001111111000010001010110001111110100110000101101000101011110111000110101110100110111010101001111000000111111001001011110001101011001010101000101100000010010000101100101001100001100100111000111011100001111110010110101110000110101000000 1101001100010000001010011011010000101110000100011011000001101111001011101101110010000010111000011100111100101000010011111001111000100011101000101000001011100111010110001010010001110100001010010111000011011110111101100101111011100101101110100111001110101101111001111110100111111101010000000100011000000101110010010100110010000111010100110001100011000000100111110001001000101101000110001011110001101011 1000100010100101110010001010010010101101100011110011001000001111001110111111011011010001011100000111010100000011110000010011101011011010101110100000110100011110010001100000111110100010100111101100001110011011001000100100111111101011000111100110000111011110001000011011011010011010110001001110110111101101011011101111011110010110111001000110010010010010101111011000110000111100011001001100011111010010 1010001110100111100000000001000000110111111011010100101101111100011110101100001110011011011000010001100101111011100100011011011001011110111000111011100011001000001111011101111001010000001000010101101101010000101111011111111000010101111000010100001010000110010101100011011101010011111101100111010110100111000011110110011101001101110011111001000111110011010011110011000101110000000000001100101000110001 0000011010000111001100110000110110010111001110011001001111011000101111111111100001111100001110001111111111010111001000000001101100010000001101011100011001000000001100110111101001101001001100001011101011110110010100101001111111011011110100001000101100111010011110110111011001000010110100101110010100100001111000110101110010110001111100010001010010101100010110000010010110000011001100010011001010110010 1000111110010110001111001000010011111110011000100011011110010011011010110001111001111010010100110000100010101100001001010001101100010100111001111010101101100101001100101100100100011110110010101010101100000010100010011011010011011001110010000110110100000000000010011010001000110010000111001111100110000010101010110010011000111011110001011010000000110000010011000010100011010101011010001000011111100011 1100010110011001011011001011011000110100010111011010010101100100000110100101011110111101001000100011100011010100000010010100001001011000101111101111110001001110101110111101100101010111100011000011001011001100010000101010011011010011111010010001001010010110010001010000010000100001101111111111010110011010101100011001010011010011010010011111010011100001010000011011000001100010110101111110110000100100 0101100100011010101110111111001101011000011111110100010101100011111111011001001100000000111000010101000011101001111010110100100110010111010010111111101110101000010011111110110110000011111000011010111010001100000010110111000111101110111010001110100110011110000011111010110101100101100000110011000010101111000001100100101100010111110011100110111101110001100101001100001100100101110001101010100100011110 0001110001000011101011011000010110111000111010011100010000010110111111010101101111101001001100110000010110111101010101001101101110110110111111111001000001101011000111111101100010101101110110111111011000011011001001010010001100001000100000001110101010000000100001111110110111011110011000101000111011001101011100011100110110001000110010100001000100000100100110110000001110001110101011100011101101110100 0110101111010010100111010110110001010011101110000001010001010011010010000110001100100001101001110100111011000001110101110110001000000000000011010011010111001010000101001111101001101111001110101001111100101010111000100101100010100110111110101011010111000110100100100110011100000010100001101001101000111001000111000011101000111111100000100010111000001100110010011110100101000101011110110001000001111011 1111000011010001010101101110110111001000111111011010101111000010110110000101101001100000101111100101101101000100001111101100010000110011101101100011000011101011001000011111100101101101101101000111101101110000110010011001110100011101101001000101111100101011110110000111010011111011111000010100010101110111101110111100001100101011100010101100000101001111101110101010010010101001100010100010000100100000 0111100100110011101000001011100010001000011010101001010000001010101011100110000011000001111111000011001001111000111011001111100010010111010111111010110011001001010101110100001011011101100111001101010110000110111010011000100000010110111010000101100001011011000101101010000111010010110110011001001011000111001111111111001111010011010001011110001000000100100010101100011110001011010101001101000000111001 0010010001010001011010111100101011000001001010101101001100001010001100101111111111101000110101100000101011100111001001011001111010000100110101010100010011000111101100111101000001010010011110010010101011011001000101000001110001110011101011001000101111100110111100100100100011100010111101001111111111100011000010001110011011101110011010000001001111010010111111111010101101001110110111101010010001100101 1000001101111000010000010101010111110011100011110001001110110000110111011010000000000000000110111011001001010100011100000100100100101110101000100011111110101011101001110000010111000001111110000010011100010110100000010011011010010111111111110010110000000000100110010010110000000000110111101101010110110111111010011101101001001101110111001101100110011100110111001111110000010101001110111110101110100110 1101001111111011100000110011011011011110100000011010000011111011110001111000001000010001110100111100100101000010110000101000000000110100111010001101011001110100010101111010011110100101000001111001001110001011110000101100010111001000011110001101101111101011110000100110011101111011000011110111111100000011000110101101100101110111100000011110010011100111110011001001100001000110101001000101001101000000 0100000101110010000001011100111000000111110110111011011110100000100000000010001000010001100001001000110001101111100100101010001011100001111100100101000001100100110101010001111001111010100011110001001001111111010000011111011001100010010100000110001100001010111010110111010010010110100101101100110011111011110111000011111100011010100000101011111010000011010111000111101011101001101100110000010011011000 1001110010011011001010110110111011001011110111000110101111111111010010111110111100001000101111100010100010011000100011011000110001100101000101010101110101100110000100010101101100010111011000110010000011101001000111111000011101010010101100100010001100100111101111011001010000100101010101001100111010100001011110010001011011110100101011011010000011101010010100000111101110100001010101001100101100100100 1010101010011111111100010011000110110010001000111001000000111001101110100011100100000110110011111100110010111111010111100001000111010111001100100000001111011101001100110011111010011110011101111100000100001010110011110001001111111100000001101101010011010010101001110010101000001001111001010110100110010101001011110111101101101111000011010000001001110000111000101110010001001010010100000001010011010001 1011110111010000010011111100101011011100100000101101000000010101010111010100010011011001100111111101001101101001111011110101100110101100001110010010110110010111101000001000101011000001010100010001011011000001100101101001110110011110000101000000111000100101001100101101101101000111001001000010110101000010001000000011010001000011001001110000110110100010010111111001001010111111000001010001110011100101 1011000101001111000011101000100110111110001011001100100001111100100011100111101101101111110010100111010101111111101010011001011101011101000011111010111100001011010101001111101101001000001000100110000111010110101110101111001111010001101010010110001111001111110001100001111110010111000100000111110011111111110001111101110111101010100110110001010010101000100001100100001101100001001000001011100010101000 0111000011010010101010100101110001010111101101111010111101110000110101010101010001101111000100111000011100001111010100110011110011000100100110111100001101001100111010000010001001000101010010111110100001100010111001011111001100110000010100101111011001010110000100101100001001001101010110111111000111001001100100001111000001010010010101010101010111100111111000100110111001111111100000011010001011110110 1000111100111110100001100100101110110001100001111000001001000011000001010011010110111000001001011101001110111000011011110001110000011110100000101100001101111000011000111100000011011000011001001101000001000010000101011110010001100110101001010110000110100001011000011111001000101101000110111010010011110101110110011011100000011010100111010001100001011011111101110111000100010111101100010101011010010011 0111011100110100000011101011010111011111101111111111000010101000101101010011011010101011110001000101101100010011010011110101110011010110000100010001001011010111101000111010010101011111001010001001000011100010011100110111001101101000111001010000100110011000101101001010101010111011011010111110000011110111110111010011000011000001101011001001100011100100000110001000010000111010101111110011010001100100 1100111101001010110100110011000110000011100111011011100101101000110100000010110111001111111111100001000110110001100011111010010000010000001111110010000011101110111111001010001111101010010011101110101000101110010101010111010001011000000111110010110001000011100001011101101100111001111100010000000111000111100110101011011100100011110011111010110010000001000000011000000100000110101010111111010001000110 1110011010100011110101000111000001101111100001100010000001101000111100101101010001111011100111101010100011100100000001001000110101101011001110000011001010000111001000010110010011101001101011000111110101000010001111101100101111000101001101111111011011000011110110111110000111110000101101001001101101011011000000010101010001101101000000110011010010010111100011110111010100110001111011101101110100111010 1110010001000000001100110010101000000110011001101110001101011111100010111101000010000110101110100101011011000111101100110101001000011110101011110000110000000000010111001011100100011011000110000000010111011011000110000000110101010101001010000010010101001011101110110111000101000010001011010110011101011011110111001110010011111111001001010000001111100000000100110010110111010010110100110101000101100001 0100010101110011111110101101011111010100110110011001011011101101101001011011111010100001011101010000010000001010101011011011111100110010110101000100100101111001100101010111000110101100110100111100110111001000101100110100010011010110100101001011101100110011000110110011010110111001111100100001000101001110010101010101111110001111011000010000001001011010111010100110010101100010110110110110001000010100 0100110011110110100110010001000011101100010101000001101011111011010010111110100101100011001101101111101010011001011001010100000000110010101000011111101101110111111010110110101101000000011011000001100100000101111110001011010101110101000111100011111100011110001110111010110001101111011011001110111000000010011100111011011001111110001110101010100011011101010100000110100010000100111011100100001110001010 1001110010111111110100011011111000001110001101010100111001011110011110101111101011111100011000111011101011110001000011000100011011111100000000010101001100001110011110100000011000011111110101111000111001001010101111011001101010110100101101010010011001001110000110011111001110001001001011111010111111001001111100100011011111010110111000100010011110001101101101101101001001111101101000010100001011110101 0010111011010000001111101101010111110010010111110100010111000011101001000110111001110000011101110111101001100001001110000011100000001001001010000000011000011101111011010111011110000111111011100001011100110101111111011100111100000111011110111111110010110101011001100001001011101001000110110101000011000101101000010011001100111111010100010110111111110000111010000001101101101101100101100100001001000000 1100100010101001111110011110000101101001001010000111001101011110100111011101010010010011100100110111001011011011001000010111110110000000010000010000000100100001010000000111110000101000110110110001010110010110110000010010100011111010011010010100110100100000000111001101110111101101011111110011000110001111011100000101000111011111101101000111100011101010101000010000110110100110000001011010001000101011 0001100011110101111000110000000011010111000111000001000101010011100011111010110110111101000010110001010111000110011110111100100110111100010010110000011010101101010101100100110111010100011010011101110101000110011111101011001011101110101100111010111111010010110000000011011101111000110101111101010111111110110010011000110110001000010000011011001100001100000001001111111011110001000101111110101111101110 0001110001010111110110101101010001011110010011101101001111110101000110100011110010111110110100001111011000000000100100101110111000000001100110101011011000010111101000010100011111110110011000001100100001100100110101110010010100000001010101011011001110000011101010100010111011010010110001100100101001110010111101110101011110010010011110011110010100011110010100111101101010100110101000100101001011011010 1000100101001101010000100010100011111110111110011010011100111001100001111100110011000011001100111110000110110101111100001110111011000000111000101110101100010010110111101010010000101110000111000001101011111001100001001111011001001111111000011001001001010001001111010010001010011001100100111011110101111010001001101000110100101110111000101111111000010100100011100010000101000110110011000001011111101010 1001101101000011010101111000001001101000001110001100000010110010000101100000101010100100110001000000011110110010001110111111010111010010011111111101000000100011100110011010000001101000001101000110000111111011101101011111100100010000011011011111010111001011011110001010011111001110000000001011110101110100111000001100110101010000011001101110110111010100100101111101001110001110011011101111110011010101 0000000011011001001110000001010110100111010100111001011110010110000111000100001000111001101111101000010100110110000100011101110010010100100000010010100001110101111100101001100011010110011110110000010100101000001011111110011000100100100100100000100110000001011110001011100001111000010110101011101100100000010111111011110000110011111010000000111010010000100000100010011001111001110111001001000001100110 0000101110010101000001001001111101010111111001010111000010101111110110100101010000101001011101001111001011010001010100111010011100001110000010000011001101010101110100110110010111011101100000011110001001110001111010010110101111000000110010100000000000110011011110111110010011011101100000101001001001110110101110011011101010110011011010010111111000001111110100001101100111000101111111110101111110010100 1101100101110010000001101111001001010110101010110111000110111000101100101000010111011010101100101001010100111101000010010110010001111011100011010001101000101111001000101101111101010010101100001111001100100101011011010100010101001100001001101111010001011100101100011111011001001011011000110010100010000001001001110000000011001000100011101100101011110100101110000010100001100010011101110011001000101110 0010111010101001101101000100101001010000011100010100010100101101111110000001010001010101100100101011001100010111001011110011101011001110111000011110111101001100101110001100110001010111101001011010111101011011110101111101100010000010010111100110010111000100110000101011000011101111110100000001010100100110100001111110000110010110101010010011100011110010011001001001110110101100100000011110111110001101 1110001011110000011011000010000111010001110011001110010010110011110110011110001101011100001111000000100011111101100110000011111110000011011110111001011000100101011000000011001001100001110011001011101011110100000110011000101101111100101100011110001000011110000001011110010111110010111100010110101100100101111101101011111010110111011001101011111101010000110110101100100001011110011100110000000000001100 1010001111001101011011101101100100111000000011111001000001101111011110100011010010001001100100001001101110011110101100111001101000110011001111011101100001111010010010010110110101010011111001100000001001101100001011001111111110000111101111101101110000101101001010110001100101100101001011000011110001000110101011000110101110101110011111111000111011011001000011001100111111101000000001101010111100001000 1111010011100010110000000010110100001001101000101010001100110000001111100011100111100100100011100101110100010110100110111110111000010000010011010000110011011011010000110101110011000010000111111110011001111010010111110100101100000010011100001011101110001101001100000101100110111010100101001000100110101111000110011010101101010001100000100110110101111100100110011001011101000111000110011101001111000010 0111100111111001010101111110101101101010111111011011111111000110001010110010011100001111010100001100100110110001011111011000100000110101110111011100111000110110010010110000000001101101010101010111111110000110110101101100010000100000100100001011000100001010010110010011001100100111101101111110110111010100111111011101001110011110101101101001011110110111001100100100111000101100000110001001110001100000 1101110110010010010111010110001011010100010000111011011111000000100010101001010110011001001101110100110111100100111110011001000101000000000001101100100011000011110010010001101010000010001100001011010011000110010011001101110001111101010001010110010110000101111001110100010001101101000100100101010011111101111011001001101011000110110010010010011001100110010100100010111011001010111011110011111001110101 1011101111000100101000001001110010101100101111110000000111111110110110101101010001101000000101101101111101110000110010110011001000101011011011010001010010100001111100100100001100011010100001101010000101111111011100010111111010011011011010000010011001010011101101010001010100111110011000010011011011001011010101000011101011001101111110101000100011110010110000101011001000010010110001001001000110001010 0110011100100101101101100111101101000101010000110000110101001011001100100101100011100110000111110111100100101011000110111100100111100011000001111001001001111101110000011111100100000100000101010100101000111011001011110000000001011011110101101011011111100110111011011000010111110101011001010110111111110100110001000001001011001110000101000100111000000011100111000001101110010110010100000111000111101100 0000011100111111010101111011001011101001100011010001111111000101011010111010000100101111111101111101100101111010110110001100110000100001111110000000010111011101111111100011100111110101110010111101111111011001001101011010011000000110111101000110111111100100101011100011001101000011001010011110111111110011010010010111001110010010110011010011111111000100001110010011100010000100100100110101000010011111 1001010001010110001001101001111001001001110111001001111110010110000100011001001101000101101100011110110011001011101110110100111000100001011100000101111010111011000011000000010011010110100111011010111001101000101111101001001101111101000111101001110101000101110010001000010101100001101011011000101100111101001000100001100011011101011001001011000101101011000110011110010101000111011011100011001101100000 1011111001000110001011110100100100100111111111001100101000011000110000000011111010101111101111011001010111000001000101111111000111110011001011100101011111100010000011011101111100101001101011010011100100101010111111110001101100100011001111000110111101000010100001110011111011110100000010100101001110100001111111110111111000001010000000111011100011000101000100101101110001010101010101010000011000000101 0100011100010111110111110001010100011111010111001010100010001010111110010001110011001100100110101010000111110110111000100001111111100011010010101110101010000110010001000010101010101110000011101010101100010000000001011001010100100111110000111100100011111100100001111110110110100111110110110010100000100010110000001101110001110111000000011011101110111000110100110100100101100011001000000000101010111101 1111101110101100101100100010101101011100110011010011111011001101111011001100001110101011111100000100011010110010100110001011011110011000111100011011110110010100010001100010110011001100000000100100011001100101010101100000100011100000101111110100111001000011110101101001101111001011011010100100110001010001011101101011001111100011000100000001110100111010101110100000010100000111101001011010100011010011 1110101111000111001011101100101101100001010101011111101101000101110010101110001000100001111000110101111001010010111100111000100010001010001100110101101001001111010111001110100010010010110011111110101110101101101010101100010011100100001001101110110010110111101001100010011011010110001001111110011110011001000001111000000001011100001000001011100011010001111110100111001001001000100111000010100001010001 1100010000110011101110100000010000101001100100010001011110000101101010100110011000011000011110010011100001100010101100011010101111100011011110010001111110111110110000111111010110101000010100011001101101011110011001000101101101011011011000000100110011001011011011011011000101001011110011111010110111101111001111000011011111001001100001110111011111001010101110101010000111110000101100111010111111101001 0100111110001001011100111011010110010011111000011011000001100110011110000000100001110001011110010010100001101001111100100011100111001100011110001011101110110100010101001110000010000000110111000010110101110010000011001111001001000011110100110010010000101110110100011100000101010111101010111000101111100101000100110000010001001000100110000110101010100111111100001110010000100000110100100111100010111111 1011001011010010011011010110011011000100101001100001111011000010110111111111110101101000100000110011110011000111110010100101111110100001001001001011101001000000010000101110010111000110000100100001100101011000111100001001101000100101001110000111110000001100110101001110011010100010101000000111001110101101000000000010010101011111100100110111101000010011111011011101010010111100010111111100010011101001 1011101010010100110101110000100111000011100000011000000100011110110010101011100101100100110110100000111110110101000011101010101001110010000001111011010101001110001111111110000011111110101011101101001011010000010011001110100000110100111000100111011000000100011011011001010011110111110101000000010011110111011010001111000101111111001111111000110011010001011111011001110001011010101100011110011110000010 1001101111010111000111010111111111001011011111001010000110001011101110011011100100101001000011100100011111101100100010000010100100100101010100001101111011111111001000111111111100100001011110011100100000100011110010110011110001111101111011001001111001000111001101010100100011010110110111011001000101100100000101001111110111000001011010011010010001110010001001001100010000111001011001001001001100010111 0111011100111010011111011000100010000110001000001001110011010100110011101100110101000100111110100000010001111111000101111000101010011110000000000001111111011101101110111100001111111101101001001011110101001000000010010111110110011110000110011100001110000100110010011010100001010011111000110001111000001000111111011000000111000101000011001010001011001001110101110100101001000100000111000010011110110011 1010101001011010010000010111010011010110000011001001101001101010011001110110010010111100111011110010011110100111000101100001010111111101011101001101001111000101000101000111101011110000010101110100110100110110000101000001010001100100000010110111100111010110101101011110100001001000100100111100101011101010111110101110011000000101110111100100110111110010110110001101010010001110111101110110100101001001 1000111110010110111010110010101011001101010011101110111001001010001111101111011101010001110110100110011111100110011011000101110111000101010000111110011001101001111101111110111101110110100111100100000011110011010000011011011011010110011100101000101101010100101000010100101110100100110110010000010011000111000110010111011011100001010110011101101011011110100111111100100001011101010101000101000111100110 0110010010011001011101011101011000111011011100111010111110000101010111100011011101001100111001000000100001000110101111011001110011000110000110001101001001011011101101000011111100101001001011001110111111010111100100001010100111110010001010010110111111110110110110110001001010001111001011001100011000001011001101110001110001011010101010111010000101111001000010001011110111111101010101111111110010101111 0111001001111110100011010100101010010011100001001110011000000111010111111010101001101000011111011100000100010011100001011111000101011100100000111101000110000111101011000111110011000000100010010101100001001110110001001110010010000011111111010111001001101000110010111001010000111111001001110010010000011011100100110000001000010111000011111100100000101101111000010010001100100101110011001011111110001100 0011110001000100110101110011101001000101111010000011101000000110101010010111001100101110001010110111010111000010011000011100001000110010011000110100011010100000010101011010110101101101110100001100101001111110001000010011101010001010010110001111010110100011010100110110001011110110001010000110000001110110011001110101001011001010000011011011111110011111101010011010010110010100101110110011001100000110 0001100111010111001111000100011000111000000011100000101011100000101110100011101100110011111001111001010011100000100011011111110101100010010010101001101001011000100010111000000001110101111111101001000010010111000000001101011001001011001111000100100001010011110110110111001100111011000100100011010111111001001110000110000011101101100001011000101110100000010100111110010001010011100010011100110101100111 0001010000111001010110111100001011111011011001111111110110101000010101110101110000111101111000111100101111000010011001011111000101000000000011011000101000100101101101010111010001111100001001000011011010100111011010001110100011000100110000000111100111000110010111101010001001000101110001110001001011001011011000101111001011011001010111000001011010101000011111101111010011110001111011010110001001101101 1011001011101010001110010000110010101011001101111011110000101010101010000011000110100101011010001010111010000110010101001110101010001001011001111111011011101010100010101011101000000000111100110001100111000011100011011010011000110001010100101111000001001011110001010000110000001000110101011001000010111110000101000111011110100110011100111100111000111110110101010100000100100100110011001100100111100011 1000101100101101001010111001010111100100010000111000101000011101100011010100000001110100101110111101111100100000100110000110100111001010001000111010000111100011110011111010111111101100110111110110011001100101001101100000001110000100100001000111001100101000111011110000001010111101101101010010110110010010010011000110100100101111100110101011000111001000100100110101101111000110110100101001111001000110 1100111000110110001000001001101000100001010111101110000110000100001010010110010001111000011100100011000101101011000011100011100010011111100001101111010110010100101010000111010110101011111110010101000011010111001010000010110011111001111010001111111000101111001011001100001000101001100000000010100011010011111001110010001111111100000101011110111010011100110101000011011000100001101010011101100110111000 0010111110001011111110100001100111110111000110011110001010000010101100010001000111101000111101100001100001011101100011101001010101111001001111011101010001100110101100010011001110110000100111000001100110001010111010011011000110000001010100000010010011011110011111001000010111010010101000110000011110101000101110010010100100101011000000110001101000000111001001100000101010000000101011010011000000011011 0110011110110100010011110111001001101111010110101001001011010011010100111101000101011100011011001000101000011000110011100000111110101000011111001011111100111111101101100000011111110111110100100100011110100011000111011101101110001000010110000000100111100101011000101001001101110110001001011010001110110001111001011001101101011001101110100000111110111111000001000000111101101001001100010010010001110110 1100101111111100111010011101000010010001000011100111001101100110000000100110011001101000110111100101011100101110101110100111100001101110010111000110110011000110101011110010010010000001100010111100010101110010010110111010010001110101101011100000100010101011100011111000000111011011110000101111100100010011000001001100101111100111111010001010010101100101110000001110000111011010111111110000010001100010 1101000011111000110000111000011110110010001110111100011111010110001110001101101001100011111101110010111001001111000010001001110110011010111110001011011110001010010010011110100000011100111110100100100101100011000111110101010111000011101110010100110010010101001110011011111110001010000000101000111010001111001101011000000110000111010110000100101011001001100001001011000001011000110111110010101110111101 0010011101110101100110000110011000100111100100001101110011101111010011000001110100001010011000001000001100111100011011001101101000101111010111011000100000011110011111011001010100000100110111100010010000101101100100001100001000111011000000110000011011100111101010001010100101000111111101110100011001100100010001101001111010010100010101010010111110001111101110100101001010011000110101001101110100111101 1101111010111011001110001001111101001010111101010101100100001010000011000110110001000000110100110000010000100101001111100111010111111100101101000111111001111011101101011100000011101001100011001011101010001011000000100100000111101101111000100101101101101101101100100100101111100001010110101000101010100100101011100101010100101011001010001100110101011000110011011000001011111101111100011111110000110000 1111010001100100101110111111001010010000101011110001111110011010101110010001111010000101010010000101011001011100111110001111010101011110101101101110001110011110010110111001100100100100000010001000111100000111111111100110011001010111001011100001001001010100001010010010000010001100001000110111010101010000000110011001010011001111101110000000101010001011110111110011001011100100100011011110100000111011 1100000101111001111111111001000100011001101010011010010100000101110110010110010011001111000110011001111111000110000101001110100101000100100011000010111010111111111100111010100101100001111000011100100101001011011101000110111001010010100011010110011101001000010101100100111111111110111010000111111001011000001010111111110001101110100101111000111001000010110100010111001001100110100100010001111101100001 1011010001000001011111010001010100100010110110011011010111000000110000101010101001011001111000010111111001000001111110010101110011011111100110101011101001011011001010001001001100111010010010101100000011001011000110010010110000111010100100010010010010101000111011100001000100011000110110110010010010001111001111011010001001110100100111111101100111010110110110110110100110000100001110001101110101011100 1101011010111010001110000000011011001110001010011001110010001100110111011010111100000000101110110101011001001000010001110100111110000100100100010100010101110010011001001100100000010101001010001000011010110101010011001101001011011111100110011001100001100110100001001011111100001111101110100100111010101111011111111111011101111100010100000001010111100010010101001100000010100110100010100110111110111011 1111101001011010000101101011010011001100001011111001101000000000001010100100110100011110100001000100010000011100100101100000000111100111000000101011000011100000011110111100101111010001000011100001100100010001100001010001110000010010101100000110011000100010110100000100111100110001111000011001100000011001001111110000011110100100111101010101100101011011000000011010001100010011100100010100000111010100 0101101101000001011001110011101111000010010010001100110101101111101111111100011000111111110100011100110011011011011110011100100001000111110110111000101001100111011010000010000010110010011011100011000110101110011110100000001111001000011010001000011101100111001101110000101011100111100110110010010001101110001111001010011011010100010011100110000111000001010110110001111110110110110101000111100111110011 1001011110110101101111000001000001001101001010000100100000011110111001001000101100001011101000100100001100001010011000101111101000011110101101100000011111001100111110001100100000011010010111100100011010000100101011010001100010000010010000101011001000010101011001010110110111110011111110110110110111110000100010001111110100110110100111111011111010110000011000011100100111000001110011111111100000110011 1001001001011100101011011101001110100100000001100011010110100001111001111111110001010001100111110100000001010111011011110010011001111100110100100100011100011100011111011010100110010111100011111111101010100110101001010101101101101110110100010001110111110011010101000100110101100101110110101110101011100000110010101011010001001000100001011111100100110010101011101001100111111010100000010011010010000011 0001101000110000101101010111111100101111101100100111000111100101010010110011000011000000111101100010101101100011101001001000100001000100010111000100011110000100100000111001010101101101100111000011111110110101000110000001010000000101101011110010011111111101110110100011101110100111110111011101110001100000000110001100110000111001011101000000101010001101010011111111011011000011110111101100001101101001 1111110101001001001111010111000011101101010110111101100001010000111001000101011011011010010001111010110011001101001101011011001101100010101110101110010000100011001100011110110000101010011111110010011110111100000111011100100110110100110111111110110001000100101010101111111011110111110110101001000101011101011000111111011100110111001100111101110001001100000010000100110110101110101001111111101011010101 0110011001001001100100111000000100100010100100101000010101101110000001010100010100101101111100001011011010100001011111111000011010010110011001011001000110100010100111111010110100001111101001100011100110110101110110101000001111010001101100000100010011101010000011101001001101110000111001101100000001011100011101100110001110000010100101010001111110101110111011111011110100000111101011111100110100000001 1101011011011111111011000001001010110011001111001111100100110001111111001011010001000100010110010110111100100101010100010101110100010001111111001110101001011101000110110011110010111011110110111010000010010111011101011100111111110100000011000100000110101110001110001010101110000010001001000000000111110101001100111100011100000101111100010000100000011011110010010101100011000011111001101010100000001101 1001001111010000101011011111001001011111110000101100111100010000111011101000000110010101100011111100011110111111100011010101110000011101010100111011101001000111010111101011011011000000001000100111000111100101101111010000101000001100111101101010000001111011100011011111110010111010101011101010011101100111010100100011111100010110000110000000110100110110000100011100101110001011100000011001111101000100 1000011010011001101110010000110100111000000110101111110000100111111001110100011010111001111000101010100010000001011111010010011011101100010101010111111010011110001000011000100101101011110011001001110111011110111100010100111101111111100001101000010110110100101011000111011101000010101000110000010111101011100010111110110101001011001000010101100110111111100001010001111100011110111010000111010011101101 0100010100111000000100011010111100001100010010011001010100111011111110010111000101011000110001010111100011000010011111100110110100110000010100111010001000110101010000110010001101110101010110110001101110001100100010010011001001000100010010100101100001110010101101110010011000110001111000110101001111110000000110101101000110000000001100000010110011101111011110011110000101011101101100010111010010101011
cTrader Algoシステムトレード

【cAlgo】ナンピンマーチンcBot【Sample】

4/10/2021 12/18/2023

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

悪名高いナンピンマーチン

世の中にはいろいろなロジックのEAやcBotがありますが、ナンピンマーチンほどシステムトレード初心者を魅了し、そして地獄の底に蹴落としてきたロジックはないのではないでしょうか。

(EAやcBot・・・cTrader信者のajinoriとしては全部cBotと呼びたいところですが、一般的な呼び名で総称してEAと呼んでおきます。)

 

ナンピンマーチンとは

説明は不要でしょうが一応簡単に。

ポジションが損失を抱えたら、同じ方向で追加エントリーすることで、平均エントリー価格を下げる「ナンピン」と、負けたら倍掛けして負けを取り返すギャンブル手法「マーチンゲール法」を組み合わせたロジックです。

一般的にはポジションに一定以上の損失が出たらより大きなロットでナンピンして損失の相殺を図るロジック全般を総じてナンピンマーチンと呼ぶことが多いでしょう。

 

なんでダメなのか

一番大きな理由は破産リスクの大きさです。「マーチンゲール法」自体、無限に倍掛けできることを前提とした必勝法のため、ロットが資金的ににエントリーできないくらい膨れ上がった時点で口座破綻を起こします。

破産リスクを小さくするためには最初のエントリーをできるだけ小さくする必要がありますが、その結果リターンが少なくなり、その割にはそこそこの口座破綻可能性を秘めるという、どう頑張ってもハイリスクローリターンの設計になってしまうのです。

 

本当の問題

ハイリスクローリターンであると最初からわかっていれば誰も使うことはなく、ただすたれていくだけの手法のはずです。しかしナンピンマーチンロジックはいまだに人気・・・かどうかはわかりませんが、少なくとも有名です。

ナンピンマーチンの怖さは口座破綻のリスクが感覚的にはわかりにくい、という部分にあるのでしょう。人は小さすぎる確率を0として扱ってしまうんですよね。特にマイナスの事象に関しては。

「さすがに〇回も連続で負けるわけないっしょ!」って。この思考が破滅への道を着々と進んでいくのです。

また、EA開発の視点から言うなら、このロジックを使えば比較的簡単にきれいな右肩上がりのバックテスト結果が出せてしまうんで、EA販売をする人からしたら都合がよかったというのもあるかもしれません。

 

作ってみた

どうしてもナンピンマーチン=ヤベーやつというイメージが強かったため、手を出したことがなかったのですが、今回ブログのネタとして、至極単純なナンピンマーチンcBotを作ってみました。

ソースコードも公開してますので、よかったらなんかの参考にしてください。なるかわからないですけど。

 

何も考えないナンピンマーチンcBot

ロジック

最初に適当にエントリーします。プログラムに「適当に」とか言えないので、とりあえず起動時の最後のローソク足が陽線なら買い、陰線なら売りにしておきます。特に意味はないので別に逆でもいいです。以降、ずっと同じ方向でエントリーを繰り返します。

あとは設定値(Pipsパラメータ)以上損失が出たら倍掛けエントリーします。損失が相殺された時点でナンピンポジションは全決済します。

利確も同じ幅にして利確したら再エントリー、にしようかと思ったのですが、決済直後に再エントリーはさすがにあり得ないので、「最初のポジションは一番いいところで決済して再エントリーした」と仮定して、最初のポジションが一番いいところから設定Pips以上落ちたらナンピンさせるという設定にしました。

・・・説明がわかりにくくてすみません。ロジック気になる方はソースコード読み解いてください。

 

ソースコード

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

namespace cAlgo.Robots {
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NanMar : Robot {
        [Parameter(DefaultValue = 100.0)]
        public double Pips { get; set; }

        const string LABEL = "NanMar";
        const string COMMENT = "namping";
        TradeType _tradeType;
        Position _basePosition;
        Position _lastPosition = null;
        double _maxPips = 0;

        protected override void OnStart() {
            if (Account.IsLive && RunningMode == RunningMode.RealTime) {
                /* 当cBotはブログ記事用に作成されたサンプルcBotです。
                 * 何の工夫もないナンピンマーチンロジックにより売買を繰り返すため、高確率で口座破綻を引き起こします。
                 * 間違い防止のため、初期状態ではリアル口座で稼働ができないようになっています。
                 * リスクを承知の上、動かしたい場合はこのifブロックを削除の上ビルドしてください。 */
                Print("初期状態ではリアル運用できません。ソースコードを確認してください。");
                Stop();
            }
            // --- 適当に売買方向を決めて発注
            _tradeType = (Bars.LastBar.Close > Bars.LastBar.Open ? TradeType.Buy : TradeType.Sell);
            var res = ExecuteMarketOrder(_tradeType, SymbolName, Symbol.VolumeInUnitsMin, LABEL);
            if (res.IsSuccessful) {
                _basePosition = res.Position;
            } else {
                // --- 発注失敗したら一度止める
                Print(res.Error);
                Stop();
            }
        }

        protected override void OnTick() {
            // --- 初期ポジションの最大獲得Pipsを覚えておく。
            if (_basePosition.Pips > _maxPips) {
                _maxPips = _basePosition.Pips;
            }

            // --- ナンピンしてなくて、初期ポジションが最大Pipsより設定値以上落ちてるか、ナンピンポジションの損失が設定値を超えてたとき
            if ((_lastPosition == null && _maxPips - _basePosition.Pips > Pips) || (_lastPosition != null && _lastPosition.Pips < -1 * Pips)) {
                // --- 前のポジションの2倍ロットでナンピン
                var volume = (_lastPosition != null ? _lastPosition.VolumeInUnits : Symbol.VolumeInUnitsMin) * 2;
                var res = ExecuteMarketOrder(_tradeType, SymbolName, volume, LABEL, null, null, COMMENT);
                if (res.IsSuccessful) {
                    _lastPosition = res.Position;
                } else {
                    Print(res.Error);
                }
            }

            // --- ナンピンポジションが前の損失を相殺できてれば初期ポジションだけ残して全決済
            if (_lastPosition != null && _lastPosition.Pips > Pips) {
                var myPositions = Positions.Where(pos => pos.Label == LABEL && pos.SymbolName == SymbolName && pos.Comment == COMMENT);
                foreach (var pos in myPositions) ClosePositionAsync(pos);//本当はクローズされたか成否確認しないと危険。今回は面倒なので省略。
                _lastPosition = null;
                _maxPips = 0;
            }
        }
    }
}

たったこれだけのコードです。ろくに確認してないので説明と違う動きになってたらごめんなさい(笑)

あ、少しくらいはcBot開発の参考になりそうなこと書いておきます。

ポジションのラベルとコメント

cBotからの注文ではポジションにラベルとコメントがつけられます

あくまで私の使い方ですが、基本的にラベルはMT4のマジックナンバーと同じ感覚で使います。どのcBotから注文されたかわかるようにするため、基本的に一つのcBot内では同じものを使います。

コメントは注文に追加情報をつけておきたいときに使います。cAlgoのメソッドPositions.Findではコメントを指定しての検索はできないのですが、LINQを使えば特定のコメントのポジションだけ抜き出すことは可能です。

このサンプルではナンピンポジションであることをコメントに残し、一括決済時にコメントがついたものだけを取り出してすべて決済しています。

 

ダウンロード

いろいろ改造して試してみたいという方はこちらからどうぞ。

(2023/12/18 更新 古いものはバックテストレポートが出ないようなので、.NET6.0版に差し替えました)

 

バックテスト結果

10年バックテストの結果がこんな感じ。さすがにいい結果とは言えませんが、一応右肩上がりです。

ちなみに最適化一切なしの一発バックテストです。これはEURUSDの結果ですが、どの通貨でやってもだいたい同じような結果が出ます。

よく見ると資金が極大なのがわかるとは思いますが、つまりはそういうことです。100万円程度だとたとえ1000通貨から始めても破綻します。

こんな簡単なコードで、価格も一切見ないでトレードさせるだけなのに、資金さえあれば最適化もなしで右肩上がりのグラフが出るわけです。よく見ればおかしいのはわかるんですけどね。このリターンの少なさとか。

 

最適化してみた

最適化というかPips設定一つ変えただけなんですが、こんな荒いカーブフィッティングでもよさげなグラフができるから面白いですね。

トレード回数も増えて、目立ったドローダウンもうまい具合に隠れて、あとは縦軸の金額さえ目に入らなきゃいい感じです。(笑)

 

ちなみにこんな感じの時々下にスパイクが出てる直線右肩上がりグラフこそ、まさに典型的な損切りなしナンピンマーチンEAの特徴ですので見れば一目でわかります。

(確かMT4だと決済順序に気をつければ下方向スパイクは見えなくできた気がします。見えないとナンピンマーチンか損切りなしグリッド系EAか見分けつかないですが、cTraderなら見えてしまうため明白にわかります。)

間違ってもこんなグラフのEAにひっかからないようにお気を付けください。最近はまともな販売サイトであればナンピンマーチン使ってるかくらいは書いてあるので大丈夫だとは思いますが。

 

まとめ

実際に簡単なナンピンマーチンEA(cBot)を試してみることでその破産リスクの大きさとリターンの少なさを実感することができました。

皆さんもぜひ上記のコードをいじったり、プログラムがわからなければバックテストだけでもいろいろやってみてください。

もちろんこのロジック自体がナンピンマーチンの中でも特に酷いせいはあるのですが、こんなものですらなんとなくよさげなグラフに見えてしまうことを忘れてはなりません。

ロジックを改良して、ちょっとよさげなモノが出来上がったときに、正しくリスクとリターンを評価できるのでしょうか。ナンピンマーチンで一番怖いのはここだと思います。

もちろんナンピンマーチンのすべてを否定するつもりはありません。1回1回の勝率が独立事象のギャンブルでマーチンゲール法使うのに比べたら、FXでナンピンマーチン使う方がよっぽど理にかなっているのも確かです。

人によってはこれに、まともなエントリーロジック、ナンピンの仕掛け方、損切りの仕方など工夫に工夫を重ねて実用的なEAを作ることも可能なのだと思います。

でもそれって、第三者から見た時に中身もわからない状態でまともかどうか判断できるんですかね。少なくともグラフだけでは難しそうですよね。

基本的には「危うきには近寄らず」で敬遠しておく方が無難な気がします。


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

新しいコメント

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

cTrader's Life

© 2026 ajinori