Я попытался протестировать систему
bunny cross system и обнаружил, что хотя сигналы системы и указывают на большие движения, большую часть времени они ведут к убыткам.
Затем мне пришла в голову идея перевернуть сигналы системы и установить жесткую цель 20 пипсов и стоп-лосс - 20 пипсов.
В оригинальной системе мы открываем длинную позицию, когда быстрая WMA пересекает медленную WMA, после чего цена пробивает вверх цену пересечения + фильтровое значение 27 пипсов.
В перевернутой системе мы открываем короткую позицию, когда быстрая WMA пересекает медленную WMA, после чего цена пробивает вверх цену пересечения + фильтровое значение 27 пипсов.
Результат превзошел все ожидания: система превратилась из убыточной в прибыльную. Еще лучшие результаты показала оптимизация системы, почти для всех комбинаций значений была получена прибыль.
Код для WealthLab для 15-минутного графика EUR/USD {#OptVar2 24;10;30;2}
{#OptVar1 12;10;30;2}
{#OptVar3 5;5;20;2}
{#OptVar4 20;16;30;2}
var Bar, p: integer;
var offset,pb,ps:float;
SetAutoStopMode( #AsPoint);
plotstops;
PlotSeries( WMASeries( #Close, #OptVar3 ), 0, #red, #Thick );
PlotSeries( WMASeries( #Close, #OptVar4 ), 0, #yellow, #Thick );
for Bar := 20 to BarCount - 1 do
begin
if CrossOver( Bar, WMASeries( #Close, #OptVar3 ), WMASeries( #Close, #OptVar4 ) ) then
begin
offset:=#optvar1/10000;
pb:=WMA(Bar, #Close, 20 )+offset;
ps:=0;
end;
if CrossUnder( Bar, WMASeries( #Close, #OptVar3 ), WMASeries( #Close, #OptVar4 ) ) then
begin
offset:=#optvar2/10000;
ps:=WMA(Bar, #Close, 20 )-offset;
pb:=0;
end;
DrawLine( Bar, pb, Bar+10, pb, 0, #Green, #solid );
DrawLine( Bar, ps, Bar+10, ps, 0, #Red, #solid );
if LastPositionActive then
begin
p := LastPosition;
if LastShortPositionActive then
begin
CoverAtTrailingStop( Bar + 1, PositionEntryPrice( p ) +20/10000, p, '-20 pips' );
CoverAtLimit( Bar + 1, PositionEntryPrice( p ) -20/10000, p, 'target');
end
else
begin
SellAtTrailingStop( Bar + 1, PositionEntryPrice( p ) -20/10000, p, '-20 pips' );
SellAtLimit( Bar + 1, PositionEntryPrice( p ) +20/10000, p, 'target' );
end
end;
if not LastPositionActive then
begin
if (pb<>0) then
begin
if (ShortAtLimit( Bar+1 , pb, 'buy' )) then pb:=0;
end ;
if (ps<>0) then
begin
if (BuyAtLimit( Bar+1 , ps, 'stop' )) then ps:=0;
end ;
end;
end;
Во вложенный файлах: кривая прибыли, распределение прибыли, итоги тестирования