Wealth-Lab Wiki

API ChartStyles Community Components Community Indicators IndexDefinitions Knowledge Base Misc Optimizers Pending Deletion PosSizers Providers Standard Indicators TASC Traders Tips TASCIndicators Tutorial Videos Visualizers


Quick Search
Advanced Search »

TASC 2018-04 | Adaptive Moving Averages (Apirine)


Traders' Tip text

In an attempt to improve the situation with many whipsaw signals typically generated by price/KAMA crossovers, Vitali Apirine combines two adaptive moving averages to create a simple AMA/KAMA crossover system. By installing TASCIndicators library's latest version from our website and restarting Wealth-Lab, users can rebuild this system from the flexible blocks known as Rules. By simply combining and reordering them one can come up with pretty elaborate strategies. Figure 1 illustrates the easiness – the process can take less than a minute and free you up from writing the code.


Figure 1. Setting up the system in Wealth-Lab's “Rules Wizard”.

The system naturally works better on stocks which steadily move in the direction of the trend rather than go sideways (even with higher volatility) or less volatile ones. It's the sideway movement that is one of the biggest performance killers of a moving average system like this. A market filter might help further avoid whipsaws.


Figure 2. Successful trend trades followed by losses in sideways market in INTC (Intel).

For those of you who like to customize every aspect and build even more complex logic, C# language and the power of .NET framework is at your disposal in Wealth-Lab:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using TASCIndicators;

namespace WealthLab.Strategies { public class MyStrategy : WealthScript { protected override void Execute() { var ama = AMA.Series( Bars, 10); var kama = KAMA.Series( Close, 10);

PlotSeries( PricePane, ama,Color.Red,LineStyle.Solid,2); PlotSeries( PricePane, kama,Color.DarkGreen,LineStyle.Solid,2);

for(int bar = GetTradingLoopStartBar(11 * 3); bar < Bars.Count; bar++) { if ( IsLastPositionActive ) { Position p = LastPosition; if ( CrossUnder( bar, ama, kama)) SellAtMarket( bar + 1, p); } else { if ( CrossOver( bar, ama, kama)) BuyAtMarket( bar + 1); } } } } }

Eugene (Gene Geren)
Wealth-Lab team

Important Disclaimer: The information provided by Wealth-Lab is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security.  The owner of Wealth-Lab.com assumes no liability resulting from the use of the material contained herein for investment purposes. By using this web site, you agree to the terms of this disclaimer and our Terms of Use.

Used under license from FMR Corp. Copyright 2008 FMR Corp. All rights reserved.

ScrewTurn Wiki. Some of the icons created by FamFamFam.