Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)
Prezados membros,
por oportunidade da série de vídeos "Passeando pela Lojinha", na qual realizamos a análise de desempenho das estratégias mais assinadas na Loja de Estratégias do Profit Chart, compartilho abaixo a implementação do setup clássico de Cruzamento de 3 médias (Triple crossover) da Comunidade NeoTraderBot.
input pQtdePeriodosMediaRapida(4); pQtdePeriodosMediaIntermediaria(9); pQtdePeriodosMediaLenta(18); var bSinalCompra,bSinalVenda,bSinalLiquida : boolean; fMediaRapida,fMediaIntermediaria,fMediaLenta : float; begin //Inicializa variáveis a cada processamento bSinalCompra := False; bSinalVenda := False; bSinalLiquida := False; fMediaRapida := MediaExp(pQtdePeriodosMediaRapida, Close); fMediaIntermediaria := MediaExp(pQtdePeriodosMediaIntermediaria, Close); fMediaLenta := MediaExp(pQtdePeriodosMediaLenta, Close); //Plota indicadores SetPlotColor(1,clRed); SetPlotWidth(1,2); SetPlotStyle(1,psDash); SetPlotColor(2,clOlive); SetPlotWidth(2,2); SetPlotColor(3,clWhite); SetPlotWidth(3,2); Plot(fMediaRapida); Plot2(fMediaIntermediaria); Plot3(fMediaLenta); //Se já houver média lenta, realiza cálculos de entrada/saida/liquidação if (fMediaLenta <> 0) then begin if (fMediaRapida >= fMediaIntermediaria) and (fMediaIntermediaria > fMediaLenta) and (fMediaIntermediaria[1] <= fMediaLenta[1]) then bSinalCompra := True; if isBought and (fMediaRapida < fMediaIntermediaria) and (fMediaRapida[1] >= fMediaIntermediaria[1]) then bSinalLiquida := True; if (fMediaRapida <= fMediaIntermediaria) and (fMediaIntermediaria < fMediaLenta) and (fMediaIntermediaria[1] >= fMediaLenta[1]) then bSinalVenda := True; if isSold and (fMediaRapida > fMediaIntermediaria) and (fMediaRapida[1] <= fMediaIntermediaria[1]) then bSinalLiquida := True; end; if Not hasPosition and bSinalCompra then BuyAtMarket; if Not hasPosition and bSinalVenda then SellShortAtMarket; if hasPosition and bSinalLiquida then ClosePosition; end;