Thử nghiệm
// =======================
// LAPPHI STRONG SIGNAL SYSTEM AFL - FULL VERSION (v2025)
// =======================
_SECTION_BEGIN("Background Color");
BKswitch = ParamToggle("Background Color","On,Off");
OUTcolor = ParamColor("Outer Panel Color",colorBlack);
INUPcolor = ParamColor("Inner Panel Upper",colorWhite);
INDNcolor = ParamColor("Inner Panel Lower",colorWhite);
TitleColor = ParamColor("Title Color ",ColorRGB(0,0,0));
if (!BKswitch) {
SetChartBkColor(OUTcolor);
SetChartBkGradientFill(INUPcolor,INDNcolor,TitleColor);
}
_SECTION_END();
_SECTION_BEGIN("Trend");
smoother = Param("Trend Smoother", 5, 5, 20);
upColor = ParamColor("Up Trend Color", colorGreen);
downColor = ParamColor("Down Trend Color", colorRed);
_SECTION_END();
_SECTION_BEGIN("Signal Toggles");
showBuySell = ParamToggle("Show Buy/Sell", "No|Yes", 1);
showChuanSignals = ParamToggle("Show Mua Chuan/Ban Chuan", "No|Yes", 1);
showIntraday = ParamToggle("Show Intraday Buy/Sell", "No|Yes", 1);
showFastTS = ParamToggle("Show Fast TS Signals", "No|Yes", 1);
_SECTION_END();
_SECTION_BEGIN("Signal");
distributionColor = ParamColor("Distribution Zone Color", colorBlue);
accumulationColor = ParamColor("Accumulation Zone Color", colorGreen);
entryColor = ParamColor("Entry Signal Color", colorBrightGreen);
profitTakeColor = ParamColor("Profit Zone Color", colorRed);
exitColor = ParamColor("Exit Signal Color", colorRed);
overBought = 200;
warningLevel = 220;
overSold = -overBought;
_SECTION_END();
_SECTION_BEGIN("Entry/Exit");
SetChartOptions(0, chartShowArrows | chartShowDates);
SetBarsRequired(sbrAll, sbrAll);
GraphXSpace = 20;
GfxSetBkMode(0);
hlc2 = (H + L + C * 2) / 4;
emaHLC2 = EMA(hlc2, smoother);
stDevHLC2 = StDev(hlc2, smoother);
signalRatio = IIf(stDevHLC2 == 0, overBought, (hlc2 - emaHLC2) * overBought / (stDevHLC2 + 0.000001));
signalRatio = EMA(signalRatio, smoother);
trading = EMA(signalRatio, smoother);
signalTrading = EMA(trading, smoother);
oo = IIf(trading < signalTrading, trading, signalTrading);
cc = IIf(trading < signalTrading, signalTrading, trading);
barColor = IIf(Ref(oo, -1) < oo && cc < Ref(cc, -1), upColor, IIf(trading > signalTrading, upColor, downColor));
plotStyleType = ParamList("Chart Style", "Candle|Bar|Line|Area");
plotStyle = IIf(plotStyleType == "Candle", styleCandle,
IIf(plotStyleType == "Bar", styleBar,
IIf(plotStyleType == "Line", styleLine,
styleArea)));
PlotOHLC(oo, oo, cc, cc, "LapPhiIndicators", barColor, plotStyle);
_rawBuy = Cross(trading, overSold);
_rawSell = Cross(overBought, trading);
Buy = ExRem(_rawBuy, _rawSell);
Sell = ExRem(_rawSell, _rawBuy);
if (showBuySell) {
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone), entryColor, 0, IIf(oo > cc, cc, oo));
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), exitColor, 0, IIf(oo > cc, oo, cc));
}
_SECTION_END();
_SECTION_BEGIN("Overbought/Oversold/Warning Detail");
warningRatio = IIf(stDevHLC2 == 0, warningLevel, (hlc2 - emaHLC2) * warningLevel / (stDevHLC2 + 0.000001));
warningRatio = EMA(warningRatio, smoother);
warning = EMA(warningRatio, smoother);
warningShape = IIf(warning >= overBought OR warning <= overSold, shapeHollowSmallCircle, shapeNone);
warningColor = IIf(warning >= warningLevel, profitTakeColor, IIf(warning >= overBought, distributionColor, accumulationColor));
PlotShapes(warningShape, warningColor, 0, warning, 0);
Plot(overBought, "", colorGreen, styleDashed | styleNoLabel);
Plot(0, "", colorWhite, styleDashed | styleNoLabel);
Plot(overSold, "", colorRed, styleDashed | styleNoLabel);
_SECTION_END();
// === MUA CHUAƒÂ¡A‚ºA‚¨N / BAƒÆ’A‚ÂN CHUAƒÂ¡A‚ºA‚¨N ===
lookbackSignal = 10;
signalPeak = HHV(trading, lookbackSignal);
signalTrough = LLV(trading, lookbackSignal);
_rawMuaChuan = trading > Ref(signalPeak, -1);
_rawBanChuan = trading < Ref(signalTrough, -1);
MuaChuan = ExRem(_rawMuaChuan, _rawBanChuan);
BanChuan = ExRem(_rawBanChuan, _rawMuaChuan);
if (showChuanSignals) {
PlotShapes(IIf(MuaChuan, shapeStar, shapeNone), colorBrightGreen, 0, Low - 2);
PlotShapes(IIf(BanChuan, shapeStar, shapeNone), colorRed, 0, High + 2);
}
// === MUA/BAƒÆ’A‚ÂN TRONG NGAƒÆ’A¢â€?¬Y ===
isIntraday = Interval() < inDaily;
BuyIntradayRaw = Buy AND isIntraday;
SellIntradayRaw = Sell AND isIntraday;
BuyIntraday = ExRem(BuyIntradayRaw, SellIntradayRaw);
SellIntraday = ExRem(SellIntradayRaw, BuyIntradayRaw);
if (showIntraday) {
PlotShapes(IIf(BuyIntraday, shapeStar, shapeNone), colorBrightGreen, 0, Low, -15);
PlotShapes(IIf(SellIntraday, shapeStar, shapeNone), colorRed, 0, High, -15);
}
_SECTION_END();
// === LAƒÂ¡A‚»A…’C VAƒÆ’A¢â€?¬ XUAƒÂ¡A‚ºA‚¤T EXPLORATION ===
VolAvg5 = MA(Volume, 5);
volCondition = VolAvg5 > 200000;
oversold = trading <= overSold;
overbought = trading >= overBought;
Filter = volCondition AND (
Buy OR Sell OR MuaChuan OR BanChuan OR BuyIntraday OR SellIntraday OR oversold OR overbought
);
// === TAƒÆ’A¢â‚¬Â MAƒÆ’A¢â€?¬U CAƒÂ¡A‚ºA‚¢ DAƒÆ’A¢â‚¬â„¢NG KHI MUA CHUAƒÂ¡A‚ºA‚¨N / BAƒÆ’A‚ÂN CHUAƒÂ¡A‚ºA‚¨N ===
rowColor = IIf(MuaChuan, colorLightBlue,
IIf(BanChuan, colorLightOrange, colorDefault));
// === CAƒÂ¡A‚»A‹Å“T HIAƒÂ¡A‚»A¢â‚¬Å¡N THAƒÂ¡A‚»A… ===
// === LAƒÂ¡A‚»A…’C & KHAƒÂ¡A‚»A…¾I TAƒÂ¡A‚ºA‚ O MAƒÆ’A¢â€?¬U NAƒÂ¡A‚»A¢â€?¬N DAƒÆ’A¢â‚¬â„¢NG ===
VolAvg5 = MA(Volume, 5);
volCondition = VolAvg5 > 200000;
oversold = trading <= overSold;
overbought = trading >= overBought;
P = Param("Period", 20, 2, 25, 1);
m = Param("Multiplier", 3, 0.1, 5, 0.1);
A = ATR(P);
for (i = 0; i < BarCount; i++)
{
if (i < P OR IsNull(A[i]))
{
S[i] = Null;
T[i] = 0;
continue;
}
if (C[i] > S[i - 1])
{
if (T[i - 1] == 1)
S[i] = Max(C[i] - m * A[i], S[i - 1]);
else
S[i] = C[i] - m * A[i];
T[i] = 1;
}
else
{
if (T[i - 1] == -1)
S[i] = Min(C[i] + m * A[i], S[i - 1]);
else
S[i] = C[i] + m * A[i];
T[i] = -1;
}
}
// ==== TAn hiệu giao dịch ====
BuyTS = Cover = C > S;
Short = SellTS = C < S;
BuyTS = ExRem(BuyTS, SellTS OR Short);
SellTS = ExRem(SellTS, BuyTS);
Short = ExRem(Short, Cover OR BuyTS);
Cover = ExRem(Cover, Short);
_SECTION_BEGIN("TenkanSen");
TS=(HHV(High,9)+LLV(Low,9))/2;
_SECTION_END();
_SECTION_BEGIN("KijunSen");
KJ=(HHV(High,26)+LLV(Low,26))/2;
_SECTION_END();
SpanA = (TS + KJ) / 2;
SpanB = (HHV(High, 52) + LLV(Low, 52)) / 2;
// === Ai?u ki?n mua/bA¡n Ichimoku: giao c?t Tenkan vA Kijun ===
BuyTSKJ = Cross(TS, KJ);
SellTSKJ = Cross(KJ, TS);
BuyCHIK = IIf(C>Ref(C,-26),1,0);
Buytrenichi = IIf(C>SpanA AND C>SpanB,1,0);
Sotinhieuichi = BuyTSKJ + BuyCHIK + Buytrenichi;
_SECTION_BEGIN("Relative Strength");
//Fix percent for Up band
//percent = Param("Percent MA",0.1,0.01,0.5,0.01);
//ATR for Up Band
//periods = Param( "Periods", 15, 1, 200, 1 );
//ATRs = ATR(periods) - 0.5;
//Relative Strength
base = ParamStr("RS base ticker", "VNINDEX" );
RS = RelStrength("VNINDEX");
//Up_MA = MA_base * (1+percent);
//Up_MA = MA_base * (1+ATRs);
//Keltner Band Code
KMid = MA (RS, 20); //Middle Line
ATRPeriod = 10; //ATR Period
KFactor = 1.0; //Multiplier
KValue = ATR(ATRPeriod) * KFactor;
KTop = KMid + KValue; //Upper Band
KBottom = KMid - KValue; //Lower Band
MAA=Param("Short term MA for RS",13,1,200,1);
MAA_long=Param("Long term MA for RS",49,1,200,1);
MA_base = MA(RS,MAA);
MA_base_long = MA(RS,MAA_long);
BuyRS = Cross(Rs,MA_base_long);
SellRS= Cross(MA_base_long,RS);
_SECTION_END();
// === Trailing Stop Nhanh ===
P_fast = 3;
m_fast = 2;
A_fast = ATR(P_fast);
for (i = 0; i < BarCount; i++)
{
if (i < P_fast OR IsNull(A_fast[i]))
{
S_fast[i] = Null;
T_fast[i] = 0;
continue;
}
if (C[i] > S_fast[i - 1])
{
if (T_fast[i - 1] == 1)
S_fast[i] = Max(C[i] - m_fast * A_fast[i], S_fast[i - 1]);
else
S_fast[i] = C[i] - m_fast * A_fast[i];
T_fast[i] = 1;
}
else
{
if (T_fast[i - 1] == -1)
S_fast[i] = Min(C[i] + m_fast * A_fast[i], S_fast[i - 1]);
else
S_fast[i] = C[i] + m_fast * A_fast[i];
T_fast[i] = -1;
}
}
BuyTS_fast = Cover_fast = C > S_fast;
Short_fast = SellTS_fast = C < S_fast;
BuyTS_fast = ExRem(BuyTS_fast, SellTS_fast OR Short_fast);
SellTS_fast = ExRem(SellTS_fast, BuyTS_fast);
Short_fast = ExRem(Short_fast, Cover_fast OR BuyTS_fast);
Cover_fast = ExRem(Cover_fast, Short_fast);
// === V? h?nh tam giác cho tín hi?u nhanh ===
if (showFastTS)
{
PlotShapes(IIf(BuyTS_fast, shapeSmallUpTriangle, shapeNone), colorBlue, 0, Low - 1.5, -20);
PlotShapes(IIf(SellTS_fast, shapeSmallDownTriangle, shapeNone), colorOrange, 0, High + 1.5, -20);
for (i = 0; i < BarCount; i++)
{
if (BuyTS_fast[i])
PlotText("TS", i, Low[i] - 3, colorBlue);
if (SellTS_fast[i])
PlotText("TS", i, High[i] + 3, colorOrange);
}
}
Filter = volCondition AND (
Buy OR Sell OR MuaChuan OR BanChuan OR BuyIntraday OR SellIntraday OR oversold OR overbought
OR BuyTS OR SellTS OR BuyTS_fast OR SellTS_fast);
// === MAƒÆ’A¢â€?¬U NAƒÂ¡A‚»A¢â€?¬N TOAƒÆ’A¢â€?¬N DAƒÆ’A¢â‚¬â„¢NG KAƒÂ¡A‚ºA‚¾T QUAƒÂ¡A‚ºA‚¢ ===
rowBGColor = IIf(MuaChuan, colorGreen,
IIf(BanChuan, colorLightOrange,
IIf(BuyTS,colorAqua,
IIf(SellTS,colorYellow,colorDefault))));
// === CAƒÆ’A‚ÂC CAƒÂ¡A‚»A‹Å“T HIAƒÂ¡A‚»A¢â‚¬Å¡N THAƒÂ¡A‚»A… VAƒÂ¡A‚»A…¡I NAƒÂ¡A‚»A¢â€?¬N DAƒÆ’A¢â‚¬â„¢NG ===
AddColumn(Close, "Close", 1.2, colorDefault, rowBGColor);
AddColumn(IIf(Buy,1, 0), "Buy", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(Sell, 1, 0), "Sell", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(MuaChuan,trading, 0), "MuaChuan", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(BanChuan, 1, 0), "BanChuan", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(BuyRS, 2, IIf(RS >MA_base_long,1,0)), "MuaRS", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(SellRS, -2, IIf(RS <MA_base_long,-1,0)), "BanRS", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(BuyTS_fast, 1, 0), "BuyTS_fast", 1.0);
AddColumn(IIf(SellTS_fast, 1, 0), "SellTS_fast", 1.0);
AddColumn(IIf(BuyTS, 1, 0), "MuaTS", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(SellTS, 1, 0), "BanTS", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(BuyTSKJ, Sotinhieuichi, 0), "MuaIchi", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(SellTSKJ, 1, 0), "BanIchi", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(oversold, 1, 0), "Oversold", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(overbought, 1, 0), "Overbought", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(BuyIntraday, 1, 0), "BuyIntraday", 1.0, colorDefault, rowBGColor);
AddColumn(IIf(SellIntraday, 1, 0), "SellIntraday", 1.0, colorDefault, rowBGColor);
Nhận xét
Đăng nhận xét