There is a port knocking method that is very simple and effective that requires no particular tool to initiate (a standard computer without additional programs suffices, or a phone with one of the hundreds available apps) that is to use ping with packet size 
Here is an example that you can try for yourself:
/ip firewall filter
add action=log chain=input icmp-options=8:0 in-interface-list=WAN packet-size=1925 protocol=icmp
/ipv6 firewall filter
add action=log chain=input icmp-options=128:0 in-interface-list=WAN packet-size=1925 protocol=icmpv6
(the rules are to be placed after the accept established/related and before the accept ICMP rules to be effective)
Now from outside, ping your router's external IP / IPv6 address, under Windows use:
ping -l 1897 IPv4-address
ping -l 1877 IPv6-address
Linux
ping -4 -c 4 -s 1897 IPv4-address
ping -6 -c 4 -s 1877 IPv6-address
(subtract 28 bytes for IPv4 and 48 bytes for IPv6)
For android, use apps like Ping & Net for example.
So instead of checking sequence of ports numbers, check the sequence of different ping packet sizes. The great thing is that ICMP / ICMPv6 is by default rate-limited. You can not fire thousands of packets per seconds at your router, they will be dropped. But also, RouterOS Firewall tracks ICMP like connection, with a 10-second timeout for ICMP and 30-second timeout for ICMPv6. After you issue a ping / ping6 command towards your router, the next rule matching will only happen after the conntrack entry expired. So when you issue the ping sequence, you'll have to wait 10 seconds between two sizes for IPv4, and 30 for IPv6. Perfect when you issue the ping manually. Bot that tries to fire tens of ICMP Echo requests per seconds to your router will only get the 1st packet counted.
And the packet size is not limited to the MTU. As you can see the example use 1925. Fragmentation is automatic, even for IPv6 because it's done at the source (your ping program).
As a result brute-forcing is very difficult.
And did I say that you don't need special port knocking program? just open your PC's Terminal app.
I am using this method for my inbound SSTP emergency VPN.