import norgatedata
import pandas as pd
indexticker = '$COMP'
advancingissuesticker = '#NASADV'
decliningissuesticker = '#NASDEC'
timeseriesformat = 'pandas-dataframe'
start_date = pd.Timestamp('2020-01-01')
indexdata = norgatedata.price_timeseries(indexticker,start_date=start_date,timeseriesformat=timeseriesformat)
# Search for a situation
# "Nasdaq was down 137 points yet NAMO was up."
indexdata['chg'] = indexdata.Close - indexdata.Close.shift(1)
indexdata.drop(columns=['Open','High','Low','Volume'],inplace=True)
# Add in A/D data
adv = norgatedata.price_timeseries(advancingissuesticker,start_date=start_date,timeseriesformat=timeseriesformat)
dec = norgatedata.price_timeseries(decliningissuesticker,start_date=start_date,timeseriesformat=timeseriesformat)
# Cleanup colummns
adv.drop(columns=['Open','High','Low','Volume'],inplace=True)
dec.drop(columns=['Open','High','Low','Volume'],inplace=True)
adv.rename(columns={'Close':'adv'},inplace=True)
dec.rename(columns={'Close':'dec'},inplace=True)
# Merge A/D data into index data
indexdata = pd.merge(indexdata, adv, how="left", left_index=True, right_index=True)
indexdata = pd.merge(indexdata, dec, how="left", left_index=True, right_index=True)
# Calc McOsc for Nasdaq
indexdata['mcosccalc'] = 1000 * (indexdata.adv - indexdata.dec) / (indexdata.adv + indexdata.dec)
indexdata['mcosc'] = indexdata.mcosccalc.ewm(span=19,adjust=False,min_periods=19).mean() - indexdata.mcosccalc.ewm(span=39,adjust=False,min_periods=39).mean()
indexdata['mcoscchg'] = indexdata.mcosc - indexdata.mcosc.shift(1)
# Find "Nasdaq was down 137 points yet NAMO (Nasdaq McClellan Oscillator) was up."
# To prove/disprove "I have never seen this before." by wmvmw
indexdata['wmvmw'] = ((indexdata.chg <= -137) & (indexdata.mcoscchg > 0))
# Show those rows that satisfy the condition
print (indexdata[indexdata['wmvmw']])