PureBytes Links
Trading Reference Links
|
Excellent work Dimitris !
I fully intend on studying your contribution in detail and
implimenting this in my trading.
Thank you for sharing your knowledge.
Regards
Jim
--- In amibroker@xxxxxxxxxxxxxxx, "Dimitris Tsokakis" <TSOKAKIS@xxxx>
wrote:
> For the MA(C,20) MA(C,30) cross we have had for the N100, from
Jan2000 till now
>
> Total MAcross predictions 3538
> False predictions 2.26%
>
> For the respective MAs of StochD() the results were even better
>
> Total MAcross predictions 5008
> False predictions 0.80%
>
> Not bad at all !!
> Dimitris Tsokakis
>
> ----- Original Message -----
> From: Dimitris Tsokakis
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Tuesday, July 22, 2003 10:06 AM
> Subject: Fw: Predictions [the Composites]
>
>
> We may have another verification that the MAcross Prediction works:
> Let us see the whole N100 market and create 4 composite tickers
> "~DescPR", the population of the stocks with a Descending MAcross
Prediction [black]
> "~Dcr", the population of the stocks with a confirmed Descending
MAcross [red]
> "~AcrPR", the population of the stocks with an Ascending MAcross
Prediction [light blue]
> "~Acr", the population of the stocks with an confirmed Ascending
MAcross [blue]
> The anticipating character of the Prediction curves is obvious in
the attached gif, qualitatively and quantitatively.
> Dimitris Tsokakis
> ----- Original Message -----
> From: Dimitris Tsokakis
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Sunday, July 20, 2003 1:25 PM
> Subject: Predictions [the maths]
>
>
> APPENDIX I [the mathematical proof of the basic tClose relation]
> The main principle of this predictions series is the
>
> tClose=(p*(k-1)*MA(C,k-1)-k*(p-1)*MA(C,p-1))/(k-p);
>
> for tomorrows Close necessary for an MAk, MAp touch.
> For those interested, here is the mathematical proof:
>
> Let
> MAk=MA(C,k)
> and
> MAp=MA(C,p)
> For tomorrow, the respective values for C, MAk and MAp will be
called
> tC, tMAk and tMAp
> Applying the definition of moving average for tMAk and tMAp, we
shall have
> tMAk=(tC+C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2))/k
> tMAp=(tC+C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(p-2))/p
> If tMAk=tMAp, then
> (tC+C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2))/k=(tC+C+Ref(C,-1)+Ref
(C,-2)+...+Ref(C,-(p-2))/p, or
> p*(tC+C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2))=k*(tC+C+Ref(C,-1)+Ref
(C,-2)+...+Ref(C,-(p-2)), or
> p*tC+p*(C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2))=k*tC+k*(C+Ref(C,-1)
+Ref(C,-2)+...+Ref(C,-(p-2))
> Let k>p.
> Then
> p*(C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2))-k*(C+Ref(C,-1)+Ref(C,-2)
+...+Ref(C,-(p-2))=(k-p)*tC [relation R0]
> Since
> MA(k-1)=(C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2))/(k-1) [relationA0]
> and
> MA(p-1)=(C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(p-2))/(p-1) [relation B0]
> or
> (k-1)*MA(k-1)=C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(k-2) [relationA1]
> and
> (p-1)*MA(p-1)=C+Ref(C,-1)+Ref(C,-2)+...+Ref(C,-(p-2) [relation B1]
> Substituting relA1 and relB1 into relR0 we have
> p*(k-1)*MA(k-1)-k*(p-1)*MA(p-1)=(k-p)*tC or, in AFL terms
> p*(k-1)*MA(C,k-1)-k*MA(C,p-1)=(k-p)*tC or, finally
>
> tC=(p*(k-1)*MA(C,k-1)-k*MA(C,p-1))/(k-p), for k>p
>
> Dimitris Tsokakis
>
>
> PART II : PREDICTIONS FOR THE CROSS OF TWO INDICATOR MOVING AVERAGES
>
> The same principle may be used to predict a cross of two MAs of an
indicator.
> Example : The StochD() indicator and its MAk=MA(StochD(),k) and
MAp=MA(StochD(),p).
> We just need to replace C by StochD() in the original Prediction
formula.
> The results are impressive, false predictions are rare.
> The majority of Accurate predictions are confirmed the very next
bar, the Acc2Desc and Acc2Asc,
> ie predictions verified two bars later is totally removed from the
N100 study and, actually, are included
> here just for the comparison [both columns are zero for ALL N100
stocks, for the last 43 months...]
> After this extended test, we may say that the cross of two StochD()
MAs is successfully predicted.
> Use the following exploration [n=1 last quotations] for the
absolute # of crosses
>
> // Prediction of MAcross of StochD()
> C1=StochD();
> p=20;MAp=MA(C1,p);
> k=30;MAk=MA(C1,k);
> y=p*MA(C1,p)-(p-1)*Ref(MA(C1,p-1),-1);
> tC1=(p*(k-1)*MA(C1,k-1)-k*(p-1)*MA(C1,p-1))/(k-p);
> DescCrossPrediction=Cross(tC1,C1);
> AscCrossPrediction=Cross(C1,tC1);
> ConfirmedDesc=Cross(MAk,MAp);
> ConfirmedAsc=Cross(MAp,MAk);
> DescTotalPredictions=Cum(DescCrossPrediction);
> Accurate0DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-1));
> Accurate1DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-2));
> Accurate2DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-3));
> UselessDescPredictions=Cum(ConfirmedDesc AND DescCrossPrediction);
> AscTotalPredictions=Cum(AscCrossPrediction);
> Accurate0AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-1));
> Accurate1AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-2));
> Accurate2AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-3));
> UselessAscPredictions=Cum(ConfirmedAsc AND AscCrossPrediction);
> Filter=1;
> AddColumn(Accurate0DescPredictions,"Acc0 Desc",1.0);
> AddColumn(Accurate1DescPredictions,"Acc1 Desc",1.0);
> AddColumn(Accurate2DescPredictions,"Acc2 Desc",1.0);
> AddColumn(UselessDescPredictions,"Useless Desc",1.0);
> AddColumn(DescTotalPredictions-Column0-Column1-Column2-
Column3,"False Desc",1.0);
> AddColumn(Accurate0AscPredictions,"Acc0 Asc",1.0);
> AddColumn(Accurate1AscPredictions,"Acc1 Asc",1.0);
> AddColumn(Accurate2AscPredictions,"Acc2 Asc",1.0);
> AddColumn(UselessAscPredictions,"Useless Asc",1.0);
> AddColumn(AscTotalPredictions-Column5-Column6-Column7-
Column8,"False Asc",1.0);
>
> [see some results in the upper gif]
> and the following exploration for the % success
>
> // % Prediction of MAcross of StochD()
> C1=StochD();
> p=20;MAp=MA(C1,p);
> k=30;MAk=MA(C1,k);
> y=p*MA(C1,p)-(p-1)*Ref(MA(C1,p-1),-1);
> tC1=(p*(k-1)*MA(C1,k-1)-k*(p-1)*MA(C1,p-1))/(k-p);
> DescCrossPrediction=Cross(tC1,C1);
> AscCrossPrediction=Cross(C1,tC1);
> ConfirmedDesc=Cross(MAk,MAp);
> ConfirmedAsc=Cross(MAp,MAk);
> DescTotalPredictions=Cum(DescCrossPrediction);
> Accurate0DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-1));
> Accurate1DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-2));
> Accurate2DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-3));
> UselessDescPredictions=Cum(ConfirmedDesc AND DescCrossPrediction);
> AscTotalPredictions=Cum(AscCrossPrediction);
> Accurate0AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-1));
> Accurate1AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-2));
> Accurate2AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-3));
> UselessAscPredictions=Cum(ConfirmedAsc AND AscCrossPrediction);
> Filter=1;
> AddColumn(100*Accurate0DescPredictions/DescTotalPredictions,"Acc0
Desc %",1.0);
> AddColumn(100*Accurate1DescPredictions/DescTotalPredictions,"Acc1
Desc %",1.0);
> AddColumn(100*Accurate2DescPredictions/DescTotalPredictions,"Acc2
Desc %",1.0);
> AddColumn(100*UselessDescPredictions/DescTotalPredictions,"Useless
Desc %",1.0);
> AddColumn(100-Column0-Column1-Column2-Column3,"False Desc %",1.0);
> AddColumn(100*Accurate0AscPredictions/AscTotalPredictions,"Acc0 Asc
%",1.0);
> AddColumn(100*Accurate1AscPredictions/AscTotalPredictions,"Acc1 Asc
%",1.0);
> AddColumn(100*Accurate2AscPredictions/AscTotalPredictions,"Acc2 Asc
%",1.0);
> AddColumn(100*UselessAscPredictions/AscTotalPredictions,"Useless
Asc %",1.0);
> AddColumn(100-Column5-Column6-Column7-Column8,"False Asc %",1.0);
>
> [the respective results in the lower gif]
>
> Dimitris Tsokakis
>
>
> PART I : PREDICTIONS FOR THE CROSS OF TWO MOVING AVERAGES
>
> To make the probable cross window more narrow, let us forget the
unexpected +50% or -50% daily return.
> Each stock has a history, including gapups and gapdowns.
> The new hypothesis is that the stock will not double its historical
highest ROC(C,1).
> For the Upper [Lower] limit we have
> UR=2*Highest(ROC(C,1));LR=2*Lowest(ROC(C,1));
> and the respective coefficients will be
> Ucoeff=1+UR/100;Lcoeff=1+LR/100;
> and the more realistic condition will be
> Filter=tClose<Lcoeff*C OR tClose>Ucoeff*C;
> You will see now very few bars to expect an MAcross [the black
candles in the att. gif]
> The updated Title helps for info through the interpretation window.
[it is also an extended use of Boolean operators]
>
> // Probable MAcross bars
> p=20;MAp=MA(C,p);
> k=30;MAk=MA(C,k);
> y=p*MA(C,p)-(p-1)*Ref(MA(C,p-1),-1);
> tClose=(p*(k-1)*MA(C,k-1)-k*(p-1)*MA(C,p-1))/(k-p);
> DescCrossPrediction=Cross(tClose,C);
> AscCrossPrediction=Cross(C,tClose);
> ExpectMAcross=DescCrossPrediction OR AscCrossPrediction;
> Confirmed=Cross(MAk,MAp) OR Cross(MAp,MAk);
> UR=2*Highest(ROC(C,1));LR=2*Lowest(ROC(C,1));
> Ucoeff=1+UR/100;Lcoeff=1+LR/100;
> Filter=tClose<Lcoeff*C OR tClose>Ucoeff*C;
> AddColumn(MAp,"MAp");
> AddColumn(MAk,"MAk");
> Plot(C,"",7*Filter+1,64);
> Plot(MAp,"",4,1);Plot(MAk,"",5,1);
> bars=BarsSince(Cross(MAp,MAk) OR Cross(MAk,MAp));
> expect=NOT(Filter);
> Title=Name()+" , "+
> WriteIf(expect AND NOT(expectMAcross) AND NOT(Confirmed) AND bars>3
AND tClose<C,"EXPECT a bearish MAcross SOON","")+
> WriteIf(expect AND NOT(expectMAcross) AND NOT(Confirmed) AND bars>3
AND tClose>C,"EXPECT a bullish MAcross SOON","")+
> WriteIf(DescCrossPrediction,"EXPECT a bearish MAcross TOMORROW","")+
> WriteIf(AscCrossPrediction,"EXPECT a bullish MAcross TOMORROW","")+
> WriteIf(Confirmed,"MAcross","");
> In many cases now, there is one "EXPECT SOON" and one "EXPECT
TOMORROW".
> Dimitris Tsokakis
>
>
> ---- Original Message -----
> From: Dimitris Tsokakis
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Thursday, July 17, 2003 2:35 PM
> Subject: Fw: Predictions I
>
>
> Let us see now the more realististic approach:
> Hypothesis : We do not expect for tomorrow a daily return greater
than +50% OR less than -50% .
> Then you will find out very few days to expect the MAcrossover.
> Some times we see two or three premature signals before the main
one.
> This observation helps to speculate in advance the upcoming MAcross
and find best intraday prices for your movement.
> We may have 3 types of signals
> *EXPECT an MAcross SOON
> *EXPECT an MAcross TOMORROW
> *an MAcross confirmation
> to check the value of the method.
> Use for your ind. builder [interpretation window] the code
>
> // MA cross Expectation
> p=20;MAp=MA(C,p);
> k=30;MAk=MA(C,k);
> y=p*MA(C,p)-(p-1)*Ref(MA(C,p-1),-1);
> tClose=(p*(k-1)*MA(C,k-1)-k*(p-1)*MA(C,p-1))/(k-p);
> DescCrossPrediction=Cross(tClose,C);
> AscCrossPrediction=Cross(C,tClose);
> ExpectMAcross=DescCrossPrediction OR AscCrossPrediction;
> Filter=tClose<0.5*C OR tClose>1.5*C;
> AddColumn(MAp,"MAp");
> AddColumn(MAk,"MAk");
> Plot(C,"",7*Filter+1,64);
> Plot(MAp,"",4,1);Plot(MAk,"",5,1);
> bars=BarsSince(Cross(MAp,MAk) OR Cross(MAk,MAp));
> expect=NOT(Filter) AND NOT(ExpectMAcross);
> Title=Name()+" , "+WriteIf(expect AND bars>=2,"EXPECT an MAcross
SOON","")+
> WriteIf(ExpectMAcross,"EXPECT an MAcross TOMORROW","");
> to read the respective signals.
> In the att. gif, all the olive candles are far from any probable
MAcross, the big black candle gives
> the premature expectation signal and the very next bar predicts
[successfully] that an MAcross will occur tomorrow.
> Dimitris Tsokakis
> ----- Original Message -----
> From: Dimitris Tsokakis
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Thursday, July 17, 2003 11:17 AM
> Subject: Fw: Predictions I
>
>
> The conditions DescCrossPrediction or AscCrossPrediction give a
quite reliable warning for an upcoming MA cross, bullish or bearish.
> There are some periods when this cross is IMPOSSIBLE and may be
accurately idendified.
> This tClose is the virtual next bar Close which will fulfill the
condition MA(C,p)=MA(C;k).
> The argument is quite simple:
>
> If tClose is negative, then it is IMPOSSIBLE to see an MAcross
tomorrow.
>
> [Of course there are many other cases we may exclude, for example
tClose=0.1*C, since we do not expect a -90% daily return for CSCO !!!
> but, in this formula we just want to investigate the theoretical
IMPOSSIBLE]
> For your indicator builder [or AA] use the
>
> // Impossible MA cross Prediction
> p=20;MAp=MA(C,p);
> k=30;MAk=MA(C,k);
> y=p*MA(C,p)-(p-1)*Ref(MA(C,p-1),-1);
> tClose=(p*(k-1)*MA(C,k-1)-k*(p-1)*MA(C,p-1))/(k-p);
> Filter=tClose<0;
> AddColumn(MAp,"MAp");
> AddColumn(MAk,"MAk");
> Plot(C,"",6*Filter+1,64);
> Plot(MAp,"",4,1);Plot(MAk,"",5,1);
> In AA explore the database for the n=1 last quotations to see all
these stocks you do not expect an MA cross, bullish or bearish.
> Any MAcross technique should be applied to the rest...
> For July16 there were 18 N100 stocks indifferent for an MAcross.
> Dimitris Tsokakis
> ----- Original Message -----
> From: Dimitris Tsokakis
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Wednesday, July 16, 2003 11:04 AM
> Subject: Fw: Predictions I
>
>
> The condition
> DescCrossPrediction=Cross(tClose,C);
> predicts that a Descending MA cross will occur tomorrow.
> It will be named
>
> Accurate0DescPredictions, if it is confirmed tomorrow
> Accurate1DescPredictions, if it is confirmed 1 day later
> Accurate2DescPredictions, if it is confirmed 2 days later
> UselessDescPredictions, if it is simultaneous with the prediction
> False, if it does not belong in one above category.
>
> [Last bar predictions are also considered as false, although the
majority will be confirmed tomorrow...]
> Similar terminology is used for the Ascending crosses.
> The N100 results from Jan2000 till now are enthusiastic and, in
practical terms, we may say that we can have a safe prediction
> for the [unknown] next bar MA cross.
> Explore your database for the n=1 last quotations with
>
> // MA cross Prediction Statistics, by Dimitris Tsokakis, July 2003
> p=20;MAp=MA(C,p);
> k=30;MAk=MA(C,k);
> y=p*MA(C,p)-(p-1)*Ref(MA(C,p-1),-1);
> tClose=(p*(k-1)*MA(C,k-1)-k*(p-1)*MA(C,p-1))/(k-p);
> DescCrossPrediction=Cross(tClose,C);
> AscCrossPrediction=Cross(C,tClose);
> ConfirmedDesc=Cross(MAk,MAp);
> ConfirmedAsc=Cross(MAp,MAk);
> DescTotalPredictions=Cum(DescCrossPrediction);
> Accurate0DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-1));
> Accurate1DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-2));
> Accurate2DescPredictions=Cum(ConfirmedDesc AND Ref
(DescCrossPrediction,-3));
> UselessDescPredictions=Cum(ConfirmedDesc AND DescCrossPrediction);
> AscTotalPredictions=Cum(AscCrossPrediction);
> Accurate0AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-1));
> Accurate1AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-2));
> Accurate2AscPredictions=Cum(ConfirmedAsc AND Ref
(AscCrossPrediction,-3));
> UselessAscPredictions=Cum(ConfirmedAsc AND AscCrossPrediction);
> Filter=1;
> AddColumn(100*Accurate0DescPredictions/DescTotalPredictions,"Acc0
Desc %",1.0);
> AddColumn(100*Accurate1DescPredictions/DescTotalPredictions,"Acc1
Desc %",1.0);
> AddColumn(100*Accurate2DescPredictions/DescTotalPredictions,"Acc2
Desc %",1.0);
> AddColumn(100*UselessDescPredictions/DescTotalPredictions,"Useless
Desc %",1.0);
> AddColumn(100-Column0-Column1-Column2-Column3,"False Desc %",1.0);
> AddColumn(100*Accurate0AscPredictions/AscTotalPredictions,"Acc0 Asc
%",1.0);
> AddColumn(100*Accurate1AscPredictions/AscTotalPredictions,"Acc1 Asc
%",1.0);
> AddColumn(100*Accurate2AscPredictions/AscTotalPredictions,"Acc2 Asc
%",1.0);
> AddColumn(100*UselessAscPredictions/AscTotalPredictions,"Useless
Asc %",1.0);
> AddColumn(100-Column5-Column6-Column7-Column8,"False Asc %",1.0);
>
>
> ----- Original Message -----
> From: Dimitris Tsokakis
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Tuesday, July 15, 2003 5:35 PM
> Subject: Predictions I
>
>
> We may calculate the next bar Close necessary for a MA(C,p) to
cross another MA(C,k).
> I will overcome this procedure and I will try just to predict if a
cross will occur tomorrow.
> For your AA window explore for the n=1 last quotations with
> // Prediction for a cross of two moving averages
> p=20;MAp=MA(C,p);Plot(MAp,"",1,8);
> k=30;MAk=MA(C,k);Plot(MAk,"",2,8);
> y=p*MA(C,p)-(p-1)*Ref(MA(C,p-1),-1);//Plot(Ref(C,0),"",7,8);
> tClose=(p*(k-1)*MA(C,k-1)-k*(p-1)*MA(C,p-1))/(k-p);
> DescCrossPrediction=Cross(tClose,C);
> AscCrossPrediction=Cross(C,tClose);
> ConfirmedDesc=Cross(MAk,MAp);
> ConfirmedAsc=Cross(MAp,MAk);
> Title=Name()+
> WriteIf(ConfirmedDesc,", Confirmed descending MAcross","")+
> WriteIf(DescCrossPrediction,", A descending MAcross will occur
tomorrow","")
> +WriteIf(ConfirmedAsc,", Confirmed ascending MAcross","")+
> WriteIf(AscCrossPrediction,", An ascending MAcross will occur
tomorrow","");
> Filter=1;
> AddColumn(Cum(DescCrossPrediction),"Predicted DescCrosses",1.0);
> AddColumn(Cum(ConfirmedDesc),"Confirmed DescCrosses",1.0);
> AddColumn(100*Cum(DescCrossPrediction)/Cum(ConfirmedDesc),"Desc %");
> AddColumn(Cum(AscCrossPrediction),"Predicted AscCrosses",1.0);
> AddColumn(Cum(ConfirmedAsc),"Confirmed AscCrosses",1.0);
> AddColumn(100*Cum(AscCrossPrediction)/Cum(ConfirmedAsc),"Asc
%",1.0);
>
> to see the commulative predicted/actual cross relation.
> Replace the Filter=1; line with the
> Filter=AscCrossPrediction OR DescCrossPrediction;
> to see the predictions for tomorrow, or with the
> Filter=Ref(AscCrossPrediction OR DescCrossPrediction,-1);
> to see the confirmed crosses
> The commulative view for my favorites selection is in the attached
gif.
> A detailed analysis will follow.
> Use the same formula in Indicator Builder or Interpretation window.
> Dimitris Tsokakis
> [to be continued]
------------------------ Yahoo! Groups Sponsor ---------------------~-->
Free shipping on all inkjet cartridge & refill kit orders to US & Canada. Low prices up to 80% off. We have your brand: HP, Epson, Lexmark & more.
http://www.c1tracking.com/l.asp?cid=5510
http://us.click.yahoo.com/GHXcIA/n.WGAA/ySSFAA/GHeqlB/TM
---------------------------------------------------------------------~->
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
|