Seasonal trouble ahead

If a bitchy prime minister and a crazy president weren’t enough, for the upcoming months the seasonal chart is also indicating further price setbacks.

Seasonality of DAX

Analyzing the average monthly performance of the German DAX index a distinct pattern of seasonality can be observed. On average June has been down 0.6%, but the big trouble is yet to come.

 

The chart shows the average monthly performance of the DAX index, using data since 1999.

Each bar of the histogram represents a specific months percent performance. Starting with the dark blue bar in January, the green bar right now represents the average June performance.

Seasonal  and Volatility Prognosis:

As you can see on the above chart June always has had a bearish prognosis over the last years. July might bring some relief (the positive magenta bar behind June), but therefore August and September surely got a strong bearish setup. Although the markets have been bullish over the last 20 years, the average combined performance of August and September is -4%.

The average performance of a month is not a good indication for the actual magnitude of the upcoming market move, it just is an indication for its direction.

Where the move might go you can see on the market neutral volatility prognosis. The shown prognosis is based on Kvolatility and uses the DAX returns since 1999 to calculate the average expected move for the next year.

Due to reasons I have got some trouble in hoping for a move to the upper boundary of the Kvolatility projection, but I surely will structure my trades to profit from a bearish move within the next few months.

Tradesignal Equilla Indicator code:

 

KVolatility based volatility projection:

Meta: subchart(false);
Inputs: datapoints(250),Multi(1.0), show(Yearly,Monthly,Weekly,IntraDay,EndOfChart);
Variables: bn, start, i, rp,rc, rpsum, rcsum, returnperiod, call, put;

bn=barnumber;

if show=Yearly and year(date)<>year(date[1]) then begin
  start=bn;
  for returnperiod=1 to 250 begin
    rpsum=0;
    rcsum=0;
    for i =0 to datapoints-1 begin
      rc=maxlist((close[i]-close[i+returnperiod])/close[i+returnperiod],0); // % return of call
      rp=maxlist((close[i+returnperiod]-close[i])/close[i+returnperiod],0); // % return of put
      rcsum=rcsum+rc; // sum of all %returns over time
      rpsum=rpsum+rp;
    end;
      
    call=multi*rcsum*close/datapoints;
    put=multi*rpsum*close/datapoints;
    drawsymbol[-1*returnperiod](close+put+call,"+");
    drawsymbol[-1*returnperiod](close-put-call,"-");
  end;
end else

if show=Monthly and month(date)<>month(date[1]) then begin
  start=bn;
  for returnperiod=1 to 25 begin
    rpsum=0;
    rcsum=0;
    for i =0 to datapoints-1 begin
      rc=maxlist((close[i]-close[i+returnperiod])/close[i+returnperiod],0); // % return of call
      rp=maxlist((close[i+returnperiod]-close[i])/close[i+returnperiod],0); // % return of put
      rcsum=rcsum+rc; // sum of all %returns over time
      rpsum=rpsum+rp;
    end;
      
    call=multi*rcsum*close/datapoints;
    put=multi*rpsum*close/datapoints;
    drawsymbol[-1*returnperiod](close+put+call,"+");
    drawsymbol[-1*returnperiod](close-put-call,"-");
  end;
end else


if show=weekly and dayofweek(date)<dayofweek(date[1]) then begin
  start=bn;
  for returnperiod=1 to 5 begin
    rpsum=0;
    rcsum=0;
    for i =0 to datapoints-1 begin
      rc=maxlist((close[i]-close[i+returnperiod])/close[i+returnperiod],0); // % return of call
      rp=maxlist((close[i+returnperiod]-close[i])/close[i+returnperiod],0); // % return of put
      rcsum=rcsum+rc; // sum of all %returns over time
      rpsum=rpsum+rp;
    end;
      
    call=multi*rcsum*close/datapoints;
    put=multi*rpsum*close/datapoints;
    drawsymbol[-1*returnperiod](close+put+call,"+");
    drawsymbol[-1*returnperiod](close-put-call,"-");
  end;
end else

if show=intraday and dayofweek(date)<>dayofweek(date[1]) then begin
  start=bn;
  for returnperiod=1 to 100 begin
    rpsum=0;
    rcsum=0;
    for i =0 to datapoints-1 begin
      rc=maxlist((close[i]-close[i+returnperiod])/close[i+returnperiod],0); // % return of call
      rp=maxlist((close[i+returnperiod]-close[i])/close[i+returnperiod],0); // % return of put
      rcsum=rcsum+rc; // sum of all %returns over time
      rpsum=rpsum+rp;
    end;
      
    call=multi*rcsum*close/datapoints;
    put=multi*rpsum*close/datapoints;
    drawsymbol[-1*returnperiod](close+put+call,"+");
    drawsymbol[-1*returnperiod](close-put-call,"-");
  end;
end else

if show=EndOfChart and islastbar then begin
  start=bn;
  for returnperiod=1 to 250 begin
    rpsum=0;
    rcsum=0;
    for i =0 to datapoints-1 begin
      rc=maxlist((close[i]-close[i+returnperiod])/close[i+returnperiod],0); // % return of call
      rp=maxlist((close[i+returnperiod]-close[i])/close[i+returnperiod],0); // % return of put
      rcsum=rcsum+rc; // sum of all %returns over time
      rpsum=rpsum+rp;
    end;
      
    call=multi*rcsum*close/datapoints;
    put=multi*rpsum*close/datapoints;
    drawsymbol[-1*returnperiod](close+put+call,"+");
    drawsymbol[-1*returnperiod](close-put-call,"-");
  end;
end;

 

Seasonal Performance indicator:

Inputs: Jan(false),Feb(false),Mar(false),Apr(false),Mai(false),Jun(false),Jul(false),Aug(false),Sep(false),Okt(false),Nov(false),Dez(false);

variables: s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,eq(0);
if bartype=bartypemonthly then begin

  if month(date)=1 then begin
    c1=c1+1; // Counter für alle Jännerbars
    s1=s1+(c-o)/o; // Summe aller Jänner Performance in %
    drawforest(0,100*s1/c1,"Jan"); // Darstellung average Jänner Performance
    if Jan then eq=eq+(c-o)/o;  // EQ in %
  end;
  if month(date)=2 then begin
    c2=c2+1;
    s2=s2+(c-o)/o;
    drawforest(0,100*s2/c2,"Feb");
    if Feb then eq=eq+(c-o)/o;
  end;
  if month(date)=3 then begin
    c3=c3+1;
    s3=s3+(c-o)/o;
    drawforest(0,100*s3/c3,"Mar");
    if Mar then eq=eq+(c-o)/o;
  end;
  if month(date)=4 then begin
    c4=c4+1;
    s4=s4+(c-o)/o;
    drawforest(0,100*s4/c4,"Apr");
    if Apr then eq=eq+(c-o)/o;
  end;
  if month(date)=5 then begin
    c5=c5+1;
    s5=s5+(c-o)/o;
    drawforest(0,100*s5/c5,"Mai");
    if Mai then eq=eq+(c-o)/o;
  end;
  if month(date)=6 then begin
    c6=c6+1;
    s6=s6+(c-o)/o;
    drawforest(0,100*s6/c6,"Jun");
    if Jun then eq=eq+(c-o)/o;
  end;
  if month(date)=7 then begin
    c7=c7+1;
    s7=s7+(c-o)/o;
    drawforest(0,100*s7/c7,"Jul");
    if Jul then eq=eq+(c-o)/o;
  end;
  if month(date)=8 then begin
    c8=c8+1;
    s8=s8+(c-o)/o;
    drawforest(0,100*s8/c8,"Aug");
    if Aug then eq=eq+(c-o)/o;
  end;
  if month(date)=9 then begin
    c9=c9+1;
    s9=s9+(c-o)/o;
    drawforest(0,100*s9/c9,"Sep");
    if Sep then eq=eq+(c-o)/o;
  end;
  if month(date)=10 then begin
    c10=c10+1;
    s10=s10+(c-o)/o;
    drawforest(0,100*s10/c10,"Okt");
    if Okt then eq=eq+(c-o)/o;
  end;
  if month(date)=11 then begin
    c11=c11+1;
    s11=s11+(c-o)/o;
    drawforest(0,100*s11/c11,"Nov");
    if Nov then eq=eq+(c-o)/o;
  end;
  if month(date)=12 then begin
    c12=c12+1;
    s12=s12+(c-o)/o;
    drawforest(0,100*s12/c12,"Dez");
    if Dez then eq=eq+(c-o)/o;
  end;
end;

drawline(100*eq,"Eq");

if bartype<>bartypemonthly and islastbar then begin
  drawtext(0,"Warning","Monatschart verwenden!",16);
end;