Avoid curve-fitting. This snippet sets up WFO parameters:
// --- Walk Forward Settings ---
OptimizeInSample = Param("In Sample Years", 5, 1, 20, 1);
OptimizeStep = Param("Step Years", 1, 1, 5, 1);
SetOption("Optimization", "WalkForward");
SetOption("OptimizationInSample", OptimizeInSample * 252); // Trading days
SetOption("OptimizationStep", OptimizeStep * 252);
Aggressive traders use multiple timeframes. Here is a code that buys on a 5-min chart using a 1-hour trend direction.
// --- Multi-Timeframe (Requires both charts open) --- TimeFrameSet(inHourly); // Switch to hourly HourlyTrend = MA(C, 50) > Ref(MA(C, 50), -1); TimeFrameRestore();// Expand the hourly signal to 5-minute bars HourlyTrendExp = TimeFrameExpand(HourlyTrend, inHourly, expandFirst);
// 5-min Entry logic Buy = Cross(RSI(14), 30) AND HourlyTrendExp; Sell = Cross(80, RSI(14));
// Plotting MTF Plot(HourlyTrendExp, "HTF Trend", colorGreen, styleOwnScale);
The best AmiBroker AFL code in the world will fail if your backtest settings are wrong. amibroker afl code
// Define conditions Buy = Cross(RSI(14), 30); // Buy when RSI crosses above 30 Sell = Cross(70, RSI(14)); // Sell when RSI crosses below 70
// Plot signals on price chart PlotShapes(IIf(Buy, shapeUpArrow, shapeNone), colorGreen); PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), colorRed);
Copy and paste this into your Amibroker Formula Editor.
/* Project: Amibroker Auto-Blogger Description: Generates HTML Blog Post code based on current chart setup */// 1. TECHNICAL PARAMETERS _SECTION_BEGIN("Blog Settings"); StopLossPerc = Param("Stop Loss %", 5, 1, 20, 0.5); RiskReward = Param("Risk:Reward", 2, 1, 5, 0.5); AnalysisType = ParamList("Trade Type", "Swing Trade|Intraday|Investment"); _SECTION_END();
// 2. TECHNICAL CALCULATION (Simple Strategy for Demo) // We use a simple Moving Average Crossover for the narrative ShortMA = EMA(C, 9); LongMA = EMA(C, 21); TrendUp = ShortMA > LongMA; TrendDown = ShortMA < LongMA;
// Determine Signal BuySignal = Cross(ShortMA, LongMA); SellSignal = Cross(LongMA, ShortMA); Avoid curve-fitting
// Calculate Targets EntryPrice = C; // Using current Close for demo logic StopLoss = IIf(TrendUp, EntryPrice * (1 - StopLossPerc/100), EntryPrice * (1 + StopLossPerc/100)); Target1 = IIf(TrendUp, EntryPrice + (EntryPrice - StopLoss) * RiskReward, EntryPrice - (StopLoss - EntryPrice) * RiskReward);
// 3. CHART VISUALIZATION SetChartOptions(0, chartShowArrows|chartShowDates); Plot(C, "Price", colorDefault, styleCandle); Plot(ShortMA, "EMA 9", colorYellow, styleLine); Plot(LongMA, "EMA 21", colorBlue, styleLine);
// Plot Signals PlotShapes(IIf(BuySignal, shapeUpArrow, shapeNone), colorGreen, 0, L, -15); PlotShapes(IIf(SellSignal, shapeDownArrow, shapeNone), colorRed, 0, H, -15);
Title = Name() + " - Auto Analysis";
// 4. BLOG POST GENERATOR (HTML) // This section creates a string containing formatted HTML
function GenerateBlogPost() { local html, trendState, signalText, signalColor; Aggressive traders use multiple timeframes
// Determine Trend Text if (TrendUp) trendState = "Bullish"; signalText = "Buy Signal Detected"; signalColor = "green"; else trendState = "Bearish"; signalText = "Sell Signal Detected"; signalColor = "red"; // HTML Construction html = "<!DOCTYPE html><html><head><style>" + "body font-family: Arial, sans-serif; line-height: 1.6; " + ".header color: #2c3e50; " + ".box background: #f4f4f4; border-left: 5px solid " + signalColor + "; padding: 10px; margin: 10px 0; " + ".table width: 100%; border-collapse: collapse; margin-top: 15px; " + ".table td border: 1px solid #ddd; padding: 8px;
Creating a complete content for an Amibroker AFL (Amibroker Formula Language) code requires understanding what specific functionality or indicator you want to implement. Amibroker AFL is used for creating custom indicators, strategies, and algorithms for analyzing and trading financial instruments, primarily stocks, forex, and futures.
Below, I'll provide a basic template and example for a simple moving average crossover strategy, which is a common and straightforward example. This example will include two moving averages with different periods, and a buy/sell signal will be generated based on their crossover.
Every robust AmiBroker AFL code consists of three potential sections:
Writing beautiful AmiBroker AFL code is only half the battle. The path to profitability requires:
Insert _TRACE("Variable X = " + WriteVal(X)); to print values to the Log window (View -> Log).