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
_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