Thứ Bảy, 6 tháng 7, 2013

Better Volume Indicator from ThinkScript to AmiBroker

Code này mới được mình translate nguyên thủy từ ThinkScript sang amibroker.
Nguồn: (http://www.hotstockmarket.com/t/193355/thinkscript-better-volume-indicator)

Code amibroker cũ:

SetChartBkColor(16 ) ;
_SECTION_BEGIN("EMA");
P = Volume;
Periods = Param("PeriodsEMA", 9, 2, 300, 1, 10 );
Plot( EMA( P, Periods ), _DEFAULT_NAME(), colorRed, styleLine | styleThick );
_SECTION_END();
Period = Param("Period", 10, 2, 300, 1, 10 );;
LowColor = colorYellow;
ClimaxColor = colorRed;
ChurnColor = colorGreen;
ClimaxChurnColor=colorBlue;
LowChurnColor= colorWhite;
Value1 = V;
Value2 = V*(H-L);
Value3 = V/(H-L);
BarColor = IIf( (Value1 == LLV(Value1,Period)), LowColor,
IIf( (Value2 == HHV(Value2,Period)), ClimaxColor,
IIf( (Value3 == HHV(Value3,Period)), ChurnColor,
IIf( ((Value2 == HHV(Value2,Period) AND (Value3 == HHV(Value3,Period)))), ClimaxChurnColor,
IIf( (Value3 == LLV(Value3,Period)), LowChurnColor, colorBlueGrey)))));
_SECTION_BEGIN("Volume");
Plot( Volume, _DEFAULT_NAME(), BarColor, ParamStyle( "Style", styleHistogram | styleThick, maskHistogram ), 2 );
_SECTION_END();

 Code amibroker theo ThinkScript:


lookback = 8;

Use2Bars = "Yes";
LowVol = "Yes";
ClimaxUp = "Yes";
ClimaxDown = "Yes";
Churn = "Yes";
ClimaxChurn = "Yes";

LowVolColor = 8;
ClimaxUpColor = 9;
ClimaxDownColor = 1;
ChurnColor = 5;
ClimaxChurnColor = 0;
DefaultBarColor = 7;
AvgColor = 0;

Range = High-Low;
Value1 = IIf (Close >= Open,Volume * ((Range) / ((2+(Range*Range)/10) * Range + (Open - Close))),
Volume * (((Range + Close - Open)) / (2+(Range*Range)/10) * Range + (Close - Open)));
Value2 = Volume - Value1;

Value3 = Value1 + Value2;
Value4 = Value1 * Range;
Value5 = (Value1 - Value2) * Range;
Value6 = Value2 * Range;
Value7 = (Value2 - Value1) * Range;
Value8 = IIf (Range != 0, Value1 / Range, 1);
Value9 = IIf (Range != 0, (Value1 - Value2) / Range, 1);
Value10 = IIf (Range != 0, Value2 / Range, 1);
Value11 = IIf (Range != 0, (Value2 - Value1) / Range, 1);
Value12 = IIf (Range != 0, Value3 / Range, 1);
Value13 = IIf (Use2Bars=="Yes", Value3 + Ref(Value3,-1),1);
Value14 = IIf (Use2Bars=="Yes", (Value1 + Ref(Value1,-1))*(HHV(High,2)-LLV(Low,2)),1);
Value15 = IIf (Use2Bars=="Yes", (Value1 + Ref(Value1,-1)-Value2-Ref(Value2,-1))*(HHV(High,2)-LLV(Low,2)),1);
Value16 = IIf (Use2Bars=="Yes", (Value2 + Ref(Value2,-1))*(HHV(High,2)-LLV(Low,2)),1);
Value17 = IIf (Use2Bars=="Yes", (Value2 + Ref(Value2,-1)-Value1-Ref(Value1,-1))*(HHV(High,2)-LLV(Low,2)),1);
Value18 = IIf ((Use2Bars=="Yes" AND (HHV(High,2)!=LLV(Low,2))),(Value1+Ref(Value1,-1))/(HHV(High,2)-LLV(Low,2)),1);
Value19 = IIf ((Use2Bars=="Yes" AND (HHV(High,2)!=LLV(Low,2))),(Value1+Ref(Value1,-1)-Value2-Ref(Value2,-1))/(HHV(High,2)-LLV(Low,2)),1);
Value20 = IIf ((Use2Bars=="Yes" AND (HHV(High,2)!=LLV(Low,2))),(Value2+Ref(Value2,-1))/(HHV(High,2)-LLV(Low,2)),1);
Value21 = IIf ((Use2Bars=="Yes" AND (HHV(High,2)!=LLV(Low,2))),(Value2+Ref(Value2,-1)-Value1-Ref(Value1,-1))/(HHV(High,2)-LLV(Low,2)),1);
Value22 = IIf ((Use2Bars=="Yes" AND (HHV(High,2)!=LLV(Low,2))),Value13/(HHV(High,2)-LLV(Low,2)),1);


Condition1 = IIf(Value3 == LLV(Value3, Lookback), 1, 0);
Condition2 = IIf((Value4 == HHV(Value4, Lookback) AND Close > Open), 1, 0);
Condition3 = IIf((Value5 == HHV(Value5, Lookback) AND Close > Open), 1, 0);
Condition4 = IIf((Value6 == HHV(Value6, Lookback) AND Close < Open), 1, 0);
Condition5 = IIf((Value7 == HHV(Value7, Lookback) AND Close < Open), 1, 0);
Condition6 = IIf((Value8 == LLV(Value8, Lookback) AND Close < Open), 1, 0);
Condition7 = IIf((Value9 == LLV(Value9, Lookback) AND Close < Open), 1, 0);
Condition8 = IIf((Value10 == LLV(Value10, Lookback) AND Close > Open), 1, 0);
Condition9 = IIf((Value11 == LLV(Value11, Lookback) AND Close > Open), 1, 0);
Condition10 = IIf(Value12 == HHV(Value12, lookback), 1, 0);
Condition11 = IIf (Use2Bars=="Yes" AND (Value13==LLV(Value13,Lookback) AND Close > Open AND Ref(Close,-1) > Ref(Open,-1)),1,0);
Condition12 = IIf (Use2Bars=="Yes" AND (Value14==HHV(Value14,Lookback) AND Close > Open AND Ref(Close,-1) > Ref(Open,-1)),1,0);
Condition13 = IIf (Use2Bars=="Yes" AND (Value15==HHV(Value15,Lookback) AND Close > Open AND Ref(Close,-1) < Ref(Open,-1)),1,0);
Condition14 = IIf (Use2Bars=="Yes" AND (Value16==LLV(Value16,Lookback) AND Close < Open AND Ref(Close,-1) < Ref(Open,-1)),1,0);
Condition15 = IIf (Use2Bars=="Yes" AND (Value17==LLV(Value17,Lookback) AND Close < Open AND Ref(Close,-1) < Ref(Open,-1)),1,0);
Condition16 = IIf (Use2Bars=="Yes" AND (Value18==LLV(Value18,Lookback) AND Close < Open AND Ref(Close,-1) < Ref(Open,-1)),1,0);
Condition17 = IIf (Use2Bars=="Yes" AND (Value19==LLV(Value19,Lookback) AND Close > Open AND Ref(Close,-1) < Ref(Open,-1)),1,0);
Condition18 = IIf (Use2Bars=="Yes" AND (Value20==LLV(Value20,Lookback) AND Close > Open AND Ref(Close,-1) > Ref(Open,-1)),1,0);
Condition19 = IIf (Use2Bars=="Yes" AND (Value21==LLV(Value21,Lookback) AND Close > Open AND Ref(Close,-1) > Ref(Open,-1)),1,0);
Condition20 = IIf (Use2Bars=="Yes" AND (Value22==LLV(Value22,Lookback)), 1,0);

Color=

IIf (ClimaxChurn== "Yes" AND (Condition10 OR Condition20) AND (Condition2 OR Condition3 OR Condition4 OR Condition5 OR Condition6 OR Condition7 OR Condition8 OR Condition9), colorViolet,
IIf (LowVol== "Yes" AND (Condition1 OR Condition11) , colorYellow,
IIf (ClimaxUp== "Yes" AND (Condition2 OR Condition3 OR Condition8 OR Condition9 OR Condition12 OR Condition13 OR Condition18 OR Condition19) , colorBlue,
IIf (ClimaxDown== "Yes" AND (Condition4 OR condition5 OR Condition6 OR Condition7 OR Condition14 OR Condition15 OR Condition16 OR Condition17) ,colorWhite,
IIf (Churn== "Yes" AND Condition10 OR Condition20,colorRed,colorGrey50 )))));

Plot(Volume, "Vol",Color,styleHistogram );
Plot(MA(Volume, lookback), "VolAvg",colorWhite, styleLine);

Hình ảnh:



Chú ý, nguyên tắc:
# Yellow - Low Volume for the size of the bar - Amateurs at work
# White - Climax down
# Blue -Climax up
# Red - Churn - Pros buying at lows OR unloading at highs
# Violet- Climax Churn - Pros taking profits at highs OR lows
# Gray - Normal (default) Bar

1 nhận xét: