Stock Portfolio Organizer
The ultimate porfolio management solution.
Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Profit_Alligator for Amibroker (AFL)
Copy & Paste Friendly
Back
/*
NAME:Profit_Alligator.afl
Trading Chaos
New Trading dimension
Trading Chaos 2 edition
Edit:nEw
Date:14/09/2016
*/
/*Money Management*/
// Initial Capital
SetOption("InitialEquity", 50000 );
// Commission is set to 0.1%
SetOption("CommissionMode",1);
SetOption("CommissionAmount",0.1);
// Maximum position sizes
MaxPos = 30;/*amout stock at buy per signal */
SetOption("MaxOpenPositions", MaxPos);
// Buy/Sell at ATO one day after the signals are triggered
SetTradeDelays(1,1,0,0);
RoundLotSize = 100;
BuyPrice = Open;
SellPrice =Open;
_SECTION_BEGIN("Price");
Plot(C,"Close",ParamColor("Color",colorBlack),styleBar|ParamStyle("Style")|GetPriceStyle());
_N(Title = StrFormat("Profitunity:{{NAME}} - {{INTERVAL}} {{DATE}} O %g,h %g,L %g,C %g (%.1f%%) "+" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
_SECTION_END();
//1.Alligator
_SECTION_BEGIN("Alligator");
// Define Value
P= ParamList("Price", "Close|(H+L)/2|(H+C+L)/3",1);
if (P=="Close")
A = C;
else
if (P=="(H+C+L)/3")
A = (H+C+L)/3;
else
A = (H+L)/2;
/*Line Alligator*/
AlligatorBlue=Ref(Wilders(A,13),-8);
AlligatorRed=Ref(Wilders(A,8),-5);
AlligatorGreen=Ref(Wilders(A,5),-3);
/*plot 3 alligators*/
PlotAlligator=ParamToggle("Plot Alligator?","NO|YES",1);
if(PlotAlligator)
{
Plot(AlligatorBlue,"Jaw",colorBlue,styleLine|styleThick);
Plot(AlligatorRed,"Teeth",colorRed,styleLine|styleThick);
Plot(AlligatorGreen,"Lips",colorGreen,styleLine|styleThick);
//require entry ws3 : open>AlligatorRed
AlligatorEntry=0>AlligatorRed;
}
_SECTION_END();
//2.fractals
_SECTION_BEGIN("Fractal");
UpFractal=ValueWhen(
(Ref(H,-2) > Ref(H,-4)) AND
(Ref(H,-2) > Ref(H,-3)) AND
(Ref(H,-2) > Ref(H,-1)) AND
(Ref(H,-2) > H),Ref(H,-2));
DownFractal=ValueWhen(
(Ref(L,-2) <= Ref(L,-4)) AND
(Ref(L,-2) <= Ref(L,-3)) AND
(Ref(L,-2) <= Ref(L,-1)) AND
(Ref(L,-2) <= L),Ref(L,-2));
/*plot alligator Fractal Up and Fractal Down*/
PlotFractalUp=ParamToggle("Plot Fractal Up?","NO|YES",1);
if (PlotFractalUp)
{
Plot(UpFractal,"UF",ParamColor("Up Fractal Color",colorBlue),ParamStyle("Up Fractal Style",styleThick|styleDashed));
}
PlotFractalDown=ParamToggle("Plot Fractal Down?","NO|YES",1);
if (PlotFractalDown)
{
Plot(DownFractal,"DF",ParamColor("Down Fractal Color",colorRed),ParamStyle("Up Fractal Style",styleThick|styleDashed));
}
UF=UpFractal;
DF=DownFractal;
_SECTION_END();
_SECTION_BEGIN("Tick");
/* Tick rules specifically for*/
Tick=IIf(C<=200,1,
IIf(C>200 AND C<=500,5,
IIf(C>200 AND C<=500,5,
IIf(C>500 AND C<=2000,10,
IIf(C>2000 AND C<=5000,25,
IIf(C>5000,50,0))))));
nTick=Param("Buy Tick",1,1,2,1)*Tick;
ZoneTick=Param("Zone Tick",2,1,4,1)*Tick;
_SECTION_END();
// Liquidity is larger than 10 MB per day (on average)
Liquid = MA(C*V,60) > 10e6;
// The market is in a good condition trade
SetForeign("SET",True);
SETBuyCon = RSI()>EMA(RSI(),20) ;
RestorePriceArrays();
//4.AO
//Calculate AO
AO = MA(A, 5) - MA(A, 34);
// Determine AO UpBar and DownBar
AOUpbar=AO>Ref(AO,-1);
AODownBar=AO<Ref(AO,-1);
//Determine AO Sourcer Buy and Sell
SoucerUp = Ref(AO ,-2) > Ref(AO ,-1) AND Ref(AO ,-1) < AO ;
SoucerDown = Ref(AO ,-2) < Ref(AO ,-1) AND Ref(AO ,-1) > AO ;
AOSoucerBuy = SoucerUp AND (AO > 0 AND Ref(AO ,-1) > 0 AND Ref(AO ,-2) > 0);
AOSoucerSell = SoucerDown AND (AO < 0 AND Ref(AO ,-1) < 0 AND Ref(AO ,-2) < 0);
//Signal AO Cross Buy and Sell
AOCrossBuy = AO > 0 AND Ref(AO ,-1) < 0;
AOCrossSell = AO < 0 AND Ref(AO ,-1) > 0;
BuyAO = AOSoucerBuy OR AOCrossBuy;
SellAO = AOSoucerSell OR AOCrossSell;
//Determine TwinPeaksBuy
LatestLowPeak = IIf(AO < 0, Ref(LowestSince(AOCrossSell, AO, 1), -1), 0);
TwinPeaksBuy = AO < 0 AND Ref(AODownBar, -1) AND AOUpBar AND Ref(AO,-1) > LatestLowPeak;
//Move latest lowest peak to the new one created now:
LatestLowPeak = IIf(TwinPeaksBuy, Ref(AO,-1), LatestLowPeak);
//PlotShapes( IIf(TwinPeaksBuy ,shapeDigit3,0) ,colorBlue, 0, 0,12);
//Determine TwinPeaksSell
LatestHighPeak = IIf(AO > 0, Ref(HighestSince(AOCrossBuy,AO, 1), -1), 0);
TwinPeaksSell = AO > 0 AND Ref(AOUpBar, -1) AND AODownBar AND Ref(AO,-1) < LatestHighPeak ;
//Move latest highest peak to the new one created now:
LatestHighPeak = IIf(TwinPeaksSell, Ref(AO,-1), LatestHighPeak );
//PlotShapes( IIf(TwinPeaksSell ,shapeDigit3,0) ,colorOrange, 0, 0,-12);
//Determine Super AO(ws2) Buy and Sell
SuperAOBuy=Ref(AODownBar,-3) AND Ref(AOUpBar,-2) AND Ref(AOUpBar,-1) AND AOUpBar;
SuperAOSell=Ref(AODownBar,-3) AND Ref(AODownBar,-2) AND Ref(AODownBar,-1) AND AODownBar;
BuyWS2=SuperAOBuy;
SellWS2=SuperAOSell;
//Determine signal single /Multi entry for WS2
PlotWS2E=ParamToggle("Plot Signal WS2 Single entry?","NO|YES",1);
if(PlotWS2E)
{
BuyWS2=ExRem(BuyWS2,SellWS2);
}
// Signal single Entry for WS2
SellWS2=ExRem(SellWS2,BuyWS2);
//Display Signal Buy and Sell WS2 --> triangle empty
PlotWS2=ParamToggle("Plot WS2?","NO|YES",1);
if(PlotWS2)
{
PlotShapes(IIf(SellWS2,shapeHollowSmallDownTriangle,0),colorOrange,0,H,-12);
PlotShapes(IIf(BuyWS2,shapeHollowSmallUpTriangle,0),colorBlue,0,L,-12);
}
//Requirement Buy WS3
BuyWS3=0<=UF AND C>UF AND H>=(UF+nTick) AND Ref(H,-1)<=UF AND AlligatorEntry AND Liquid;
//signal Sell WS3 between DownFractal and AlligatorRed,choose that more bearish
AlRed=AlligatorRed;
TS=IIf(((DF-nTick)<AlRed),AlRed,(DF-ntick));
SellWS3=C<=TS;
SellPrice=TS;
//Determine signal single /Multi entry for WS3
PlotWS3E=ParamToggle("Plot Signal WS3 Single entry?","NO|YES",1);
if(PlotWS3E)
{
BuyWS3=ExRem(BuyWS3,SellWS3);
}
//Signal Single Entry for WS3
SellWS3=ExRem(SellWS3,BuyWS3);
//Display Signal Buy and Sell WS3 --> triangle
PlotWS3=ParamToggle("Plot WS3?","NO|YES",1);
if(PlotWS3)
{
PlotShapes(IIf(BuyWS3,shapeSmallUpTriangle,Null),colorBlue,0,L,-24);
PlotShapes(IIf(SellWS3,shapeSmallDownTriangle,Null),colorRed,0,H,-24);
}
//comment that appear of Window Interpretation
WriteIf(BuyWs2,"(WS2-Super AO Buy)- Place Buy Stop to buy 1 unit if price rises to"+WriteVal(H+Tick,1.0)+" or higher."," ");
WriteIf(SellWs2,"(WS2-Super AO Sell)- Place Sell Stop to sell 1 unit if price falls to"+WriteVal(L-Tick,1.0)+" or lower."," ");
WriteIf(BuyWs3,"(WS3-Fractal Breakout Buy)- Place Buy Stop to buy 1 unit if price rises to"+WriteVal(H+Tick,1.0)+" or higher."," ");
WriteIf(SellWs3,"(WS3-Fractal Down OR Alligator Red -Sell)- Place Sell Stop to Sell 1 unit if price falls to"+WriteVal(L-Tick,1.0)+" OR lower."," ");
//4.AC
AC=MA(AO-MA(AO,5),5);
ACUpbar = AC > Ref(AC,-1);
ACDownBar = AC < Ref(AC,-1);
//3 bars buy when in positive territory:
AllAbove0 = Ref(AC,-3) > 0 AND Ref(AC,-2) > 0 AND Ref(AC,-1) > 0;
SellA = Ref(ACUpbar,-3) AND Ref(ACDownBar,-2) AND Ref(ACDownBar,-1) AND ACDownBar AND AllAbove0;
//2 bars sell. If in negative territory or crossed below 0:
AllBelow0 = Ref(AC,-3) < 0 AND Ref(AC,-2) < 0 AND Ref(AC,-1) > 0;
CrossBelow0 = (Ref(AC,-2) > 0 AND Ref(AC,-1) < 0) OR (Ref(AC,-1) > 0 AND AC < 0);
SellB = Ref(ACUpbar,-2) AND Ref(ACDownBar,-1) AND ACDownBar AND (AllBelow0 OR CrossBelow0);
CrossAbove0 = (Ref(AC,-2) < 0 AND Ref(AC,-1) > 0) OR (Ref(AC,-1) < 0 AND AC > 0);
//3 bars buy when in negative territory:
BuyA = Ref(ACDownBar,-3) AND Ref(ACUpbar,-2) AND Ref(ACUpbar,-1) AND ACUpbar AND AllBelow0;
//2 bars buy. If in positive territory or crossed above 0:
BuyB = Ref(ACDownBar,-2) AND Ref(ACUpbar,-1) AND ACUpbar AND (AllAbove0 OR CrossAbove0);
BuyCrossAC=BuyA OR BuyB OR TwinPeaksBuy;
SellCrossAC=SellA OR SellB OR TwinPeaksSell;
//PlotShapes( IIf(Buy ,shapeUpArrow,0) ,colorGreen, 0, IIf(AC < 0, AC, 0),-12);
//PlotShapes( IIf(Sell ,shapeDownArrow,0) ,colorRed, 0, IIf(AC < 0, AC, 0),12);
//Commentary
//WriteIf(Buy, "Place Buy Stop to buy 1 unit if price rises to " + WriteVal(H+0.01)+" or higher. (AC+)",
//WriteIf(Sell, "Place Sell Stop to sell 1 unit if price falls to " + WriteVal(L-0.01)+" or lower. (AC-)",""));
//5.MFI
//----------------- MFI Definition -------------------------------
_SECTION_BEGIN("MFI");
D0 = (High-Low)/Volume>= Ref((High-Low)/Volume,-1) AND Volume >= Ref( Volume, -1 );// Green
D1 = (High-Low)/Volume< Ref((High-Low)/Volume,-1) AND Volume <Ref( Volume, -1 );// Red
D2 = (High-Low)/Volume>= Ref((High-Low)/Volume,-1) AND Volume < Ref( Volume, -1 );// Blue
D3 = (High-Low)/Volume< Ref((High-Low)/Volume,-1) AND Volume >= Ref( Volume, -1 );// Pink
dynamic_color = IIf( D0, colorBrightGreen, IIf( D3, colorPink, IIf( D1, colorRed, colorBlue)));
AlligatorMFI=IIf(D0,1,IIf(D1,2,IIf(D2,3,IIf(D3,4,0))));
Plot (4, "MFI", dynamic_color, styleOwnScale|styleArea|styleNoLabel|styleNoTitle, -0.5, 100 );
_SECTION_END();
_SECTION_BEGIN("Explore");
//buy=AlligatorEntry and BuyWS2 and BuyWs3 and BuyCrossAC and SETBuyCon and Liquid andBuyAO or TwinPeaksBuy;
//sell=SellWs2 or SellWs3 or SellCCrossAC or SellAO TwinPeaksSell;
Buy=Liquid AND AlligatorEntry AND SETBuyCon OR BuyWS2 OR BuyWs3 AND BuyCrossAC AND BuyAO;
Sell=SellWs2 OR SellWs3 OR SellCrossAC OR SellAO;
//BuyPrice = Open;
//SellPrice =Open;
VP = Param("Period for Avg Vol" , 10, 50, 240, 1); // sets the period for the average volume calculation
Filter = Cross(C,(Ref(HHV(H,20),-1)))
//AND Bull
AND (MA((V*C),20)>1000000)
AND ((ROC(C,20)- ROC(Foreign("SET", "Close"),20))>0)
AND ((ROC(C,60)- ROC(Foreign("SET", "Close"),60))>0)
AND ((ROC(C,130)- ROC(Foreign("SET", "Close"),130))>0)
AND V > Ref(V,-1) AND V > Ref(V,-2) AND V > Ref(V,-3) AND V > Ref(V,-4)
AND V > Ref(V,-5) AND V > Ref(V,-6) AND V > Ref(V,-7) AND V > Ref(V,-8)
AND V > Ref(V,-9) AND V > Ref(V,-10) ;
/**Add column of data scan in table*/
Action = WriteIf(Buy, "BUY", WriteIf(Sell, "SELL", " "));
Result = WriteIf(Buy,"Buy",WriteIf(Sell,"Sell"," "));
AddTextColumn( WriteIf(Buy, "Buy" , "Sell" ) , "TRADE" , 5 , IIf(Buy,colorYellow, colorWhite), IIf(Buy, colorDarkGreen, colorRed) );
AddTextColumn(IndustryID(1) ,"Industry Sector ", 25.0, colorWhite, colorBlue, 125); // adds a column for the industry sector
AddColumn(C, "Close", 3.2, colorBlue, colorYellow, 55); // adds a column for today's close
AddColumn(Ref(Close,-1),"Y-Close",1.2, IIf( ROC(Ref(C,-1),1)>=0,colorDarkGreen, colorRed ),50 );
AddColumn( ROC( Close, 1 ), "ROC(1)", 1.2, IIf( ROC(C, 1 ) >= 0,colorDarkGreen, colorRed));
//AddColumn(BuyPrice, "BuyPrice" ,3.1, colorWhite,colorDarkGreen);
//AddColumn(SellPrice, "SellPrice",3.1, colorYellow, colorDarkBlue, 75); // adds a column for the close as a % from the prior close
AddColumn(V, "VOLUME",8.0, colorYellow, colorDarkGreen, 75); // adds a column for today's volume
//AddColumn( Ref(MA(V,VP),-1), WriteVal(VP, 2.0)+ " dMA", 8.0, colorWhite, colorBlue, 75); // adds a column for the average volume
// Remove extra buy / sell signals
Buy = ExRem ( Buy, Sell );
Sell = ExRem ( Sell, Buy );
/**PLOT Arrow signal to BUY&SELL**/
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);
_SECTION_END();
_SECTION_BEGIN("Position");
/******** Position Size and Position Score ****/
// Invest equally in each stock
PositionSize = -100/MaxPos;
// If there are more than one buy signals at a given time,
// the priority of the Buy is based on the ranking from
// position score. Here, our criterion is the ratio of
// today's value with respect to the average past value
PositionScore = C*V/MA(C*V,60) ;
// Stop Loss ***************************************
// Exit next day if the loss is larger than 10 %
ApplyStop(stopTypeLoss,stopModePercent,10,2);
/* max loss stop optimization */
//ApplyStop(stopTypeLoss, stopModePercent, Optimize( "max. loss stop level", 10, 2, 30, 1 ),True );
/**-----------------END CODE-------------------------------------**/