Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
bad tick clean for Amibroker (AFL)
This chart is used to generate clean data for another chart.
Link this chart to another one.
This runs on a 5 second database to trim bad ticks.
Clean data is saved to “~SA_Clean” ATC ticker every pass.
Linked chart must replace OHLCV arrays.
Place the following AFL at the beginning of the linked chart:
SetForeign("~SA_Clean)
Try out your own high resolution data filtering algorithms
Similar Indicators / Formulas
Indicator / Formula
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | _SECTION_BEGIN ( "5 sec Bad Ticks" ); FilterType = ParamList ( "Filter type" , "None|TEMAOC4|MedianOHLC9]|UnSpike" ,1); if (FilterType== "UnSpike" ) { CH= C == H ; CL= C == L ; OH= O == H ; OL= O == L ; MH= Median ( H ,4); ML= Median ( L ,4); MH[0]=MH[1]=MH[2]=MH[3]=MH[4]; //workaround for bug? ML[0]=ML[1]=ML[2]=ML[3]=ML[4]; //workaround for bug? H = IIf (CH,MH, H ); //trim glitch High close C = IIf (CH,MH, C ); //trim glitch Close high O = IIf (OH,MH, O ); //trim glitch Open high H = IIf (OH,MH, H ); //trim glitch High open L = IIf (CL,ML, L ); //trim glitch Low close C = IIf (CL,ML, C ); //trim glitch Close low O = IIf (OL,ML, O ); //trim glitch Open low L = IIf (OL,ML, L ); //trim glitch Low open H = Min ( H , Min (MH*2- L , H )); //trim out of range H L = Max ( L , Max (ML*2- H , L )); //trim out of range L O = Min ( H , Max ( L , O )); //trim out of range O C = Min ( H , Max ( L , C )); //trim out of range C } if (FilterType== "MedianOHLC9" ) { H = Median ( H ,9); L = Median ( L ,9); O = Min ( H , Max ( L , O )); C = Min ( H , Max ( L , C )); } if (FilterType== "TEMAOC4" ){ O = H = L = C = TEMA (( O + C )/2,4);} AddToComposite ( O , "~SA_Clean" , "O" ,atcFlagEnableInIndicator|atcFlagDeleteValues); AddToComposite ( H , "~SA_Clean" , "H" ,atcFlagEnableInIndicator); AddToComposite ( L , "~SA_Clean" , "L" ,atcFlagEnableInIndicator); AddToComposite ( C , "~SA_Clean" , "C" ,atcFlagEnableInIndicator); AddToComposite ( V , "~SA_Clean" , "V" ,atcFlagEnableInIndicator); _SECTION_END (); // end of bad tick removal routine _SECTION_BEGIN ( "Test Timeframes" ); //Explore timeframe functions Chartframe = ParamList ( "Chart Type" , "None|Native|Time bars|Volume bars|$Range bars|%Range bars" ,0); Timebar = 60* Param ( "Time (minutes)" ,1,1,10,1); Volumebar = 12* Param ( "Volume (avg rate)" ,1,.25,10,.25); //finds a volume with an average bar rate in minutes Rangebar = Param ( "$ Range" ,.1,.01,10,.01); RangebarP = Param ( "% Range" ,.1,.01,2,.01)/100; if (Chartframe== "Time bars" ) { Plot (Timebar/60 , "Bar Minutes" , colorBlue , styleNoLabel | styleNoLine | styleOwnScale ); //just for the number TimeFrameMode (0); TimeFrameSet (Timebar ); //force n*5 second bars now } if (Chartframe== "Volume bars" ) { // first total all the volume for the last 4680 bars between 9:30 and 4:00 only to get a volume per 5 sec bar Totalv=0; totalbars=0; bartimes = TimeNum (); //time of day to gather volume for (i= BarCount -1;totalbars<4680;i--) { if (bartimes[i]>=93000 AND bartimes[i]<160000){Totalv += V [i]; totalbars++;} } avevol = Volumebar*Totalv/4860; ex = int ( log10 (avevol))-1; //2 significant digits to keep barvol = ((10^ex)*( round ((avevol)/(10^ex)))); //truncate significance to keep from dithering Plot (barvol , "Bar Vol" , colorBlue , styleNoLabel | styleNoLine | styleOwnScale ); //just for the number TimeFrameMode (2); TimeFrameSet (barvol); } if (Chartframe== "$Range bars" ) //this does not work right, Bug??? { Plot (Rangebar , "Bar range" , colorBlue , styleNoLabel | styleNoLine | styleOwnScale ); //just for the number TimeFrameMode (3); TimeFrameSet (Rangebar ); } if (Chartframe== "%Range bars" ) //this does not work right either, Bug??? { // first total all the prices for the last 4680 bars between 9:30 and 4:00 only to get an average price Totalp=0; totalbars=0; bartimes = TimeNum (); //time of day to gather volume for (i= BarCount -1;totalbars<4680;i--) { if (bartimes[i]>=93000 AND bartimes[i]<160000){Totalp += C [i]; totalbars++;} } range = RangebarP*Totalp/4860; ex = int ( log10 (range))-1; //2 significant digits to keep barP = ((10^ex)*( round ((range)/(10^ex)))); //truncate significance to keep from dithering Plot (barP , "Bar range" , colorBlue , styleNoLabel | styleNoLine | styleOwnScale ); //just for the number TimeFrameMode (3); TimeFrameSet (barP ); } if (Chartframe!= "None" ) //use none for high speed { Plot ( C , "Price" , colorBlue , styleBar ); // quick and dirty trading day start and end markers Plot ( TimeNum ()>=160000 AND Ref ( TimeNum (),-1)<160000 , "" , colorRed , styleOwnScale | styleNoLabel | styleDashed | styleHistogram ); Plot ( TimeNum ()>=93000 AND Ref ( TimeNum (),-1)<93000, "" , colorGreen , styleOwnScale | styleNoLabel | styleDashed | styleHistogram ); } _SECTION_END (); |
0 comments
Leave Comment
Please login here to leave a comment.
Back