Here you can search through the pages of this Namespace, their attachments and the files uploaded to the system.
Note: the results will only display the items you have permissions to read.
[...] + sinInDegrees - 1) / cosInDegrees;
double a1 = Math.Exp(-1.414 * Math.PI / 8.0);
double b1 = 2.0 * a1 * Math.Cos((1.414 * 180d / 8.0) * Deg2Rad);
double c2 = b1;
double c3 = -a1 * a1;
double c1 = 1 - c2 - c3; for (int bar = 2; bar bar = 0.5*(1 + alpha1)*(Close bar - Close bar-1 ) + alpha1*HP bar-1 ;
//Smooth with a SuperSmoother Filter
Filt bar = c1*(HP bar + HP bar-1 ) / 2 + c2*Filt bar-1 + c3*Filt bar-2 ;
}
DataSeries ">48"> ds = new DataSeries[48 [...]
[...] namespace WealthLab.Strategies
{
public class CoronaCharts : WealthScript
{
public const double twoPi = 2 * Math.PI;
public const double fourPi = 4 * Math.PI;
public class ArrayHolder
{ // current, old, older
internal double I, I2, I3;
internal double Q, Q2, Q3;
internal double R, R2, R3;
internal double Im, Im2, Im3;
internal double A;
internal double dB, dB2;
}
// Keep cntMax fifo samples and find the Highest and Lowest lead for samples in the list
private void PhaseList(ref ArrayList fifo, int cntMax, double lead, out double H, [...]
[...] 1;
hDayClose = Synchronize( hDayClose ) >> 1;
hDayLow = Synchronize( hDayLow ) >> 1;
var hR1 = ( 2 * hPivot - hDayLow );
var hS1 = ( 2 * hPivot - hDayHigh );
var hR2 = ( hPivot - ( hS1 - hR1 ) );
var hS2 = ( hPivot - ( hR1 - hS1 ) );
var hR3 = 2 * hPivot + (hDayHigh - (hDayLow * 2));
var hS3 = 2 * hPivot - ((hDayHigh * 2) - hDayLow); var hRM1 = (hR1 - hPivot)/2 [...]
[...] Bars.FindNamedSeries("Commercial Short");
DataSeries diff = cl - cs;
RSI rsiDiff = RSI.Series( diff, 2 );
rsiDiff.Description = "RSI on Difference between Commercial Long/Short";
if( cl != null && cs != null )
{
ChartPane p2 = CreatePane( 25, true, true );
ChartPane p1 = CreatePane( 25, true, true );
ChartPane p = CreatePane( 25, true, true ); PlotSeries( p, cl, Color.Green, LineStyle.Solid, 1 );
PlotSeries( p, cs, Color.Red, LineStyle.Solid, 1 );
PlotSeries( p1, diff, Color.Blue, LineStyle.Histogram, [...]
[...] CreateParameter("Exit after", 20, 1, 50, 1);
paramDailyLength1 = CreateParameter("Daily Length 1",12,2,300,20);
paramDailyLength2 = CreateParameter("Daily Length 2",26,2,300,20);
paramWeeklyLength1 = CreateParameter("Weekly Length 1",60,2,300,20);
paramWeeklyLength2 = CreateParameter("Weekly Length 2",130,2,300,20);
}
protected override void Execute()
{
if( Bars.Scale != BarScale.Daily )
{
DrawLabel(PricePane, [...]
[...] "BandPassSeries(" + ds.Description + "," + period + "," + delta + ")");
double beta = Math.Cos(2 * Math.PI / period);
double gamma = 1/ Math.Cos(4 * Math.PI * delta / period);
double alpha = gamma - Math.Sqrt(gamma * gamma - 1d);
for (int bar = 2; bar bar = 0.5 * (1 - alpha) * (ds bar - ds bar - 2 )
+ beta * (1 + alpha) * res bar - 1 - alpha * res bar - 2 ;
}
return res;
}
protected override void Execute()
{
[...]
[...] CreateParameter("SMA period", 50, 10, 200, 10);
paramMom = CreateParameter("Momentum period", 10, 2, 30, 2);
paramHi = CreateParameter("Highest period", 20, 10, 100, 10);
paramProximity = CreateParameter("Within SMA %", 2, 1, 5, 1);
paramPullback = CreateParameter("Pullback %", 2, 2, 18, 2);
paramRecovery = CreateParameter("Approaching %", 2, 2, 6, 2);
paramTimeout [...]
[...] includes a "Skipped trade solution" that helps overcome it by adjusting the basis price. Workaround #2: For AtMarket orders, by overloading the market order with a limit order at the opening price, you can get all the trades if you run without commissions. With commissions, bump up Margin Factor a bit (e.g. 1.01) to ensure you get all the trades. Add this method to your Strategy class: /* Add this BuyAtMarket method and nothing else needs to be changed */
// It uses a limit order that executes at the opening price so that the basis price is the same as the execution [...]
[...] code includes a simple shorting Strategy which triggers and entry when a) SVE_IF_RSI crosses under 70, and, b) price negatively diverges with the ARSI. We employed rudimentary divergence detection that keys off the two ARSI peaks just prior to the SVE_IF_RSI trigger. The technique compares the relative price peaks corresponding to the ARSI peak bars, and, if a negative divergence is detected the script draws in the divergence lines and initiates a short Position. For simplicity, we exit the Position after 7 bars.
Figure 1. While the strategy is not expected to [...]
[...] the data, and how stable it is over time. Figure 1. Typical long entries following spike below -2 standard deviations on the Daily chart of AAPL (Apple). We created a bare-bones system to put to test the idea that a spike below -2 provides a long entry timing signal (we'll skip the opposite signal this time). Figure 1 illustrates some typical entries. Its only exit rule is to "Exit after fixed bars". Looking ahead, this parameter had the biggest impact on the system's net profit (as shown on Figure 2). Then [...]
[...] entering in a trend continuation following a pullback after a breakout. This pattern (widely known as "1-2-3 pattern") could be programmed to apply to intraday or daily charts alike. Our rendition targets daily charts. Since the rules didn't put much emphasis on exits, leaving this to the trader, we added a simple profit target. Below you can find the complete trading system's rules: Entry:
Wait for a 5-day close-to-close uptrend. If the closing prices retrace 50% of the uptrend's distance (±1 percentage point) over the next 10 bars, a valid pullback has formed. Look [...]
[...] signals to buy on the open in the Alerts view as on Figure 1:
Figure 1. A view of the Alerts tab with 2 signals with the highest reading of the RS5 oscillator. If you wish to visualize the oscillators, double click on any trading signal. Wealth-Lab will plot them on a chart like Figure 2 illustrates:
Figure 2. A sample plot of the RS4 and RS5 oscillators built using author’s default set of 11 index funds on the daily chart of QQQ. Index fund data provided by Tiingo. On a closing note, simply download public [...]
[...] _stoSmooth;
public PutCallRatioIndicator()
{
_rsiPeriod = CreateParameter("Fast RSI Period", 5, 2, 30, 1);
_wmaPeriod = CreateParameter("Fast WMA Period", 5, 2, 10, 1);
_devs = CreateParameter("SD Multiple", 1.3, 1, 2, 0.1);
_slowRainbowPeriod = CreateParameter("Slow Rbw Period", 4, 1, 10, 1);
_wmaSlow = CreateParameter("Slow Smooth Period", 2, 1, 10, 1);
_rsiPer = CreateParameter("Slow IF RSI Period", 8, 1, 20, 1);
_stoPer = CreateParameter("Stoch [...]
[...] directly instead of using the DivergencePlotter routines. Note that divergence is detected for the 2 most-recent peaks in the ds1 (price) series. The logic is designed to find peaks/troughs in ds2 (oscillator) that are within proximity bars of the peaks/troughs of ds1 . For this reason, it may occur that the diverging lines are drawn through other oscillator peaks/troughs since these are ignored.
Interpretation The interpretation for positive/negative divergence is based on the article "Trading Divergences" by Sylvain Vervoot in the Feb 2008 issue of TASC magazine. [...]
FIR — 0.8%
[...] Parameter Description
source
Price series
weights
Weights as string e.g. "1,2,2,1"
weights
Alternatively, specify weights as double[] array
Warning!
Weights must not sum to zero (e.g. -1, -2, 2, 1 would result in error).
Description FIR stands for Finite Impulse Response Filter. This is a type of smoothing filter that assigns different weights to price data a number of bars in the past. Pass the Price Series you want to apply [...]
[...] commissions). More so, with significantly lower risk (maximum drawdown -13% vs. -59.3%) and market exposure (39.2% vs. 100%). Figure 2 highlights system’s weakness: it can lose to Buy&Hold in strong bull markets. On a closing note, make sure to load enough historical data to run this backtest. Indicators like EMA (used as the broad market direction condition) require a fair amount of seed data (here: three times the 100-bar EMA period) to stabilize their calculation before they can be used reliably in a trading system.
Code using System;
using [...]
[...] ZigZag(this, 8, true, PeakTroughMode.Percent);
zg.Draw(Color.Gray, Color.Gray, LineStyle.Solid, 2);
// ZigZag for a single series
ZigZag zz = new ZigZag(this, Close, 8, true, PeakTroughMode.Percent);
zz.Draw( Color.Blue, Color.Red, LineStyle.Solid, 2);
zz.PlotPeakTrough(Color.Blue, 3);
// Zigzags aren't just for the standard price series. You can apply them to any DataSeries like an indicator
DataSeries rsi = RSI.Series(Close, 14);
ChartPane rsiPane = CreatePane(50, true, true);
PlotSeries(rsiPane, [...]
[...] Community Indicators , from the Extensions section of our website and restart Wealth-Lab. Figure 2 . For DAX stocks, the optimum trade duration was between roughly 2 to 5 months as discovered in optimization. After making sure the libraries are up to date, the Volume Flow (VFI) indicator used in the article code will appear under the TASC Magazine Indicators group. It can be plotted on a chart and be used as an entry or exit condition in a Rule-based Strategy without having to program a line of code yourself. using System;
using System.Collections.Generic;
using [...]
[...] the system's parameters it can be applied to charts of different time frames (e.g. EOD): Figure 2. A failed flag on the Daily chart of AXP (American Express) in Wealth-Lab 6. There's room for improvement: consider adding a filter against erratic price movement, phase out the less probable trades against the medium-term (daily) trend, playing with the exits (to our taste, the initial stop at the flag bottom may result in premature exits; subtracting an ATR from that level could be a more robust approach etc). Also, there's a closely similar system looking for tight [...]
[...] the "Download" button in Wealth-Lab's "Open Strategy" dialog. Figure 1. A Wealth-Lab Developer 6.2 chart showing the Price Zone Oscillator strategy in action applied to a Daily chart of Walt Disney Co. ( DIS ). Although the new complementary oscillator implementation is pretty straightforward, the accompanying system rules have to function in different market regimes and cover such events as positive and negative price/oscillator divergences. The complexity of their implementation is hidden in an additional library, "Community Components" , available for download [...]
[...] both the entries and exits. An entry is triggered when price reaches the highest high of the previous 2 bars after an SMARSI(3) below 20, whereas the exit occurs at the close of the bar on which the low reaches the lowest low of the previous 2 bars. This trigger strategy often entered and exited a prospective trade 1 bar earlier than waiting for the indicator to cross the 20/80 levels in the opposite direction. To protect against unforeseen disasters, we implemented a 5% stop loss. While the Donchian channels weren’t used in the trading strategy, [...]
[...] bar's low” ), a pivot high/low point is different from the more traditional one which is more like “1-2 consecutive lower lows followed by 1-2 consecutive higher lows”. Further, text and code is not in line with article's own Figure 2: the illustration leans towards the traditional definition. Compare that to a ZigZag swing chart on author's Figure 1. Yes, that's actually another, "undocumented" 5th way to build a swing chart based on absolute or relative (percentage) movements from an established top or bottom. [...]
[...] assembled in Wealth-Lab in a drag and drop fashion from the building blocks known as Rules. On Figure 2 we show a way to achieve better flexibility through “Multi Condition Group” feature. In essence it triggers the entry signal when the Engulfing and one of Bollinger Band conditions occurred not on the same day exactly but close enough to each other i.e. within a few days.
Figure 2. All conditions required to assemble the trading system are in place.
For those of you who like to have a more finer control we publish the translated code [...]
[...] paramSqueezeLookback; public SVESmoothedVolatilityBands()
{
paramBandAvg = CreateParameter("Band average", 20, 2, 100, 1);
paramMiddleLine = CreateParameter("Middle line period", 20, 2, 100, 1);
paramDevFact = CreateParameter("Deviation factor", 2.4, 0.2, 5.0, 0.2);
paramLowBAdj = CreateParameter("Low Band Adj.", 0.9, 0.1, 3.0, 0.1);
paramSqueezeLookback = CreateParameter("Squeeze lookback", 200, 5, 150, 1 );
}
protected override void Execute()
{
int [...]
[...] simulation ($5000 size, $8 1-way commissions) on the Dow 30 symbols over the last 6 years yielded the 2-Parameter optimization curve in Figure 1. Figure 1. While the optimization didn’t inspire confidence in the strategy’s stability over a wide range of parameters, ATR Factors around 2 helped improve the overall profit, while the Period did not affect the results significantly. WealthScript Code (C#)
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators; [...]
[...] paramWeeklyLength2;
public MyStrategy()
{
paramDailyLength1 = CreateParameter("Daily Length 1",12,2,300,20);
paramDailyLength2 = CreateParameter("Daily Length 2",26,2,300,20);
paramWeeklyLength1 = CreateParameter("Weekly Length 1",60,2,300,20);
paramWeeklyLength2 = CreateParameter("Weekly Length 2",130,2,300,20);
}
protected override void Execute()
{
var RDM = RelativeDailyPPO.Series(Close,paramDailyLength1.ValueInt,paramDailyLength2.ValueInt,
paramWeeklyLength1.ValueInt,paramWeeklyLength2.ValueInt);
var [...]
[...] and the initial stop price. A rule of thumb is to aim for a reasonable risk/reward ratio of at least 2:1. The visualizer consists of two graphs, Distribution (upper) and Contribution (lower). Distribution
The risk/reward Distribution graph processes all closed and open trades in the simulation, showing both winning and losing trades (accordingly, green and red bins). The X axis contains the risk/reward bins (equal to the number of trades or 10, whichever is less). These bins aggregate the simulated trade results expressed as risk/reward ratio. A bin contains all trades [...]
[...] over a year. Time in market is another dimension of risk, and charting the “life” of a trade (Figure 2) shows that the majority of losing trades becomes losers from the start, or hang about the breakeven level for quite a long time. With this knowledge, a potential improvement could be introduced.
Figure 2. A Wealth-Lab Developer 6.0 chart showing the profit/loss of a single losing trade vs. the time in each trade (in weekly bars).
Considering this, we added a new, optional rule to the system: If after 20 (by default) weekly bars [...]
[...] (see below) by simply clicking the "Download" button in Wealth-Lab's "Open Strategy" dialog (Figure 2). Figure 2. How to download trading strategies in Wealth-Lab 6.
WealthScript Code (C#)
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators; namespace WealthLab.Strategies
{
public class Star201301 : WealthScript
{
private StrategyParameter paramEntryType;
private StrategyParameter paramExitType;
private StrategyParameter paramFixedBars;
private [...]
[...] five technical, intermarket and fundamental conditions are in place, and then wait while a stock's 2-day RSI crosses above 5 from the oversold territory. As we found the proposed exit strategy triggering too many false signals, not allowing to uncover the system's potential, we replaced it with a simple trailing exit at a 20-day stop of the daily lows. Figure 1. A Wealth-Lab 6 chart showing the application of the fundamental & technical rules from Mr.Pendergast's article on the Daily chart of DD (Dupont). The upper pane shows the 2-day [...]