I think there might have been a problem with your compass readings, or "in the north" really means just a little north of east.
Cuba is in the northern hemisphere at around 20 to 23°N (tropic of Cancer) and so the Sun can be directly over head and the Moon with an additional 5 degrees inclination with respect to the ecliptic can go several degrees North. (see this answer for a bit about the Moon's motion).
- it started in the north position around 4 pm.
- By 7pm, it was in the east position,
- and by 11 pm, it was in the south position.
I think there might have been something affecting your compass. The Magnetic declination there is about 6-8 degrees, that might have had a tiny effect, but you might look for problems like
- iron or other ferromagnetic material,
- mechanical compass from the wrong hemisphere sticking due to dip angle
- or if it was an electronic compass, incorrect degaussing/calibration.
The other possibility is that by "in the north" you really mean only "slightly north of east" or "east-north-east".
I wrote a short script in Python for your trip, and the three lines in the plot represent January 15 (lowest, blue), 17, and 19 from Santiago de Cuba, the southernmost area of Cuba. The moon does get to the zenith and perhaps a tiny bit past it (towards North) but I don't think that would be visually noticeable.
The Large black dots represent 7PM local time, and each dot to the west is one more hour.
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Loader, Topos
halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180
load = Loader('~/Documents/fishing/SkyData') # single instance for big files
ts = load.timescale()
de421 = load('de421.bsp')
earth = de421['earth']
moon = de421['moon']
Santiago_de_Cuba = earth + Topos(latitude_degrees = 20.019833,
longitude_degrees = -75.813917,
elevation_m = 10.)
hours = np.arange(16, 23.1, 0.5) + 5
days = (15, 17, 19, 21)
altazs, lines, linez= , , 
for day in days:
times = ts.utc(2019, 1, day, hours)
alt, az, d = (Santiago_de_Cuba).at(times).observe(moon).apparent().altaz()
alt, az = [thing.degrees for thing in (alt, az)]
alt[alt<0] = np.nan
r = (1 - alt/90.)
theta = rads * az
x, y = [r*f(theta) for f in (np.sin, np.cos)]
plt.subplot(2, 1, 1)
for alt, az in altazs:
plt.plot(hours[::2], alt[::2], 'ok')
plt.subplot(2, 1, 2)
for alt, az in altazs:
plt.plot(hours[::2], az[::2], 'ok')
th = np.linspace(0, twopi, 201)
cth, sth = [f(th) for f in (np.cos, np.sin)]
plt.plot(cth, sth, '-k', linewidth=1.5)
plt.plot(, , 'or', markersize=8)
plt.plot([-0.1, 0.1], [ 0, 0 ], '-k')
plt.plot([ 0, 0 ], [-0.1, 0.1], '-k')
plt.text(-0.05, 0.85, 'N', fontsize=16)
plt.text( 0.9, -0.05, 'E', fontsize=16)
plt.text(-0.95, -0.05, 'W', fontsize=16)
plt.text(-0.05, -0.90, 'S', fontsize=16)
for x, y in linez:
plt.plot(x[:-1:2], y[:-1:2], '.k')
plt.plot(x[:1], y[:1], 'ok')