Building Winning Trading Systems with TradeStation書裡的6個交易系統之一的WLD版。
ChartScript Description
This trading system is disclosed in the book "Building Winning Trading Systems with TradeStation," by George Pruitt and John R. Hill. Pruitt and Hill are the principals of Futures Truth, the independent trading system testing company. In that capacity they have seen and forward tested literally thousands of trading systems and have developed informed opinions about what works and what doesnt work in the markets. Their recommendations thus merit consideration.
The strategy of this system is predicated on the thesis that winning trades are more likely to follow losing trades. Therefore, to implement this strategy the system is "ghost" or paper traded in the background and a real trade is entered only after a ghost or real losing trade. The ghost trading accurately simulates the action of Wealth-Lab to the extent that entry and exit conditions are evaluated, market position is maintained, simulated entry and exit prices are calculated, and hypothetical profits determined. However, the ghost system does not enter real trades. That is left to the real system which enters a real trade only following a real or ghost losing trade, logs that trade, and uses it in the determination of back test performance. The authors suggest that this system is mostly a template demonstrating how background ghost trading may be used to develop information for the use and benefit of foreground real trading.
The core trading logic itself is simple enough. Long and short trades are entered stop when the 9-day RSI crosses under/over the 70/30 critical levels preconditioned by the 9-day EMA being outside a channel formed by the 19-day EMA of highs and lows. Positions are closed stop when the EMA penetrates the highest high/lowest low of the past 20 days.
This system was back tested over five years against the WL-100 portfolio. The real system alone gave a RAR=34.7% and 148/425=34.8% winners. Using the ghost system and entering a new real trade only after a losing ghost or real trade yielded a RAR=20.7% and 144/426=33.8% winners thus calling the losing trade hypothesis into question. Alternatively, using the ghost system and entering a new trade only after a winning ghost or real trade resulted in a RAR=76.6% and 103/316=32.6% winners. It therefore appears, at least for this core logic, watchlist, and backtest period, that when youre hot youre hot!
q
WealthScript Code
Below is the WealthScript code for this ChartScript.
( Click here for a version of the WealthScript code suitable for copying to the clipboard)
var Bar,paneRSI,myPosition :integer;
var myEntryPrice,myExitPrice,myProfit :float;
HideVolume;
myPosition:= 0;
myProfit:= -1;
for Bar:= 21 to BarCount-1 do
begin
{--------------------Ghost System--------------------}
{Simulate system, offset by one bar, in every respect to determine if last trade was loss}
if myPosition = 0 then
begin
if EMA(Bar-1,#Close,9) > EMA(Bar-1,#High,19) then
if CrossUnderValue(Bar-1,RSISeries(#Close,9),70) then
if PriceHigh(Bar) > PriceHigh(Bar-1) then
begin
myEntryPrice:= Max(PriceOpen(Bar),PriceHigh(Bar-1));
myPosition:= +1;
end;
if EMA(Bar-1,#Close,9)< EMA(Bar-1,#Low,19) then
if CrossOverValue(Bar-1,RSISeries(#Close,9),30) then
if PriceLow(Bar)< PriceLow(Bar-1) then
begin
myEntryPrice:= Min(PriceOpen(Bar),PriceLow(Bar-1));
myPosition:= -1;
end;
end;
if ((myPosition = +1) and (PriceLow(Bar)< Lowest(Bar-1,#Low,20))) then
begin
myExitPrice:= Min(Lowest(Bar-1,#Low,20),PriceOpen(Bar));
myProfit:= myExitPrice - myEntryPrice;
myPosition:= 0;
end;
if ((myPosition = -1) and (PriceHigh(Bar) > Highest(Bar-1,#High,20))) then
begin
myExitPrice:= Max(Highest(Bar-1,#High,20),PriceOpen(Bar));
myProfit:= myEntryPrice - myExitPrice;
myPosition:= 0;
end;
{-------------------Real System--------------------}
{Real trades are entered only if the last ghost or real trade resulted in a loss, i.e. myProfit< 0}
{myProfit:= -1;}
if ((MarketPosition = 0) and (myProfit< 0)) then
begin
if EMA(Bar,#Close,9) > EMA(Bar,#High,19) then
if CrossUnderValue(Bar,RSISeries(#Close,9),70) then
BuyAtStop(Bar+1,PriceHigh(Bar),);
if EMA(Bar,#Close,9)< EMA(Bar,#Low,19) then
if CrossOverValue(Bar,RSISeries(#Close,9),30) then
ShortAtStop(Bar+1,PriceLow(Bar),);
end;
if MarketPosition = +1 then
SellAtStop(Bar+1,Lowest(Bar,#Low,20),LastPosition,);
if MarketPosition = -1 then
CoverAtStop(Bar+1,Highest(Bar,#High,20),LastPosition,);
end;
{----------Plotting----------}
DrawLabel(GHOST TRADER,0);
DrawLabel(19-day EMA(hi/lo): dotted lines,0);
DrawLabel(9-day EMA(close): solid line,0);
PlotSeries(EMASeries(#High,19),0,#Blue,#Dotted);
PlotSeries(EMASeries(#low,19),0,#Blue,#Dotted);
PlotSeries(EMASeries(#Close,9),0,#Blue,#Thin);
paneRSI:=CreatePane(75,true,false);
DrawLabel(9-Day RSI(close),paneRSI);
PlotSeries(RSISeries(#Close,9),paneRSI,#Blue,#Thin);
1/2 1 2 下一頁 尾頁