Hace algún tiempo , en otro foro, lei una técnica escrita por un forero que consistía en determinar las posiciones de compra o venta en base a dos Macd, uno digamos largo (con medias largas) y otro corto (con medias cortas) de forma que el macd largo nos determinaba la tendencia y el macd corto nos hacía de tigger. Mientras el Macd tendencial o largo estuviera por encima de cero solo se buscarían compras y mientras el macd tendencial o largo estuviera por debajo de cero solo se buscarían ventas. Cuando el macd tendencial estuviera sobre cero pero la señal del macd cruzara sobre el mismo, habría que valorar, pues podría haber cambio de tendencia. Igual cuando el macd largo estuviera bajo cero y la señal cruzara under.
Básicamente en esto consiste la idea que repito no es mia sino de otro forero.
No puedo poner imagen pues no me permite poner imágenes con extensión bmp.
Los macd son de 96,208 y 72 para el largo y de 5,10 para el corto aplicados a un gráfico de 15 o de 30 M
El tema es que me estoy iniciando en programar sistemas y estoy intentando automatizar esta estrategia. He hecho un código que simula lo anterior y el bactest con una buena muestra de datos y da buenos resultados hasta que realizo el walkforward normal, el sistema no da buenos resultados.
El caso es que la idea parece buena, tiene su lógica y además bastante gente afirmaba que le iba bien por lo que no se que pasa. Quizas sea el código. Ya digo que estoy empezando.
Yo creo que mi fallo puede estar en el money management del código. Le puse un stopLoss y un takeprofit fijos asi como un trailing
Aquí dejo el código en EasyLanguage de la plataforma Tradestation por si alguien se anima a mirarlo y comentar:
Código: Seleccionar todo
inputs: FastLenghLargo(96),SlowLenghLargo(208),MacdLenghLargo(72),FastLenghCorto(12),SlowLenghCorto(26),TamañoPos(10000),
NumPips(600),StopAmount(0.002),ProfitAmount(0.006);
variables: MacdLargo(0),MacdCorto(0),cc1(False),cc2(False),cc3(False),cc4(False),cv1(False),cv2(False),cv3(False),cv4(False),
MacdAvgLargo(0),MP(0),TT(0),PosHigh(0),PosLow(0),PipsCalc(0);
MacdLargo=Macd(Close,FastLenghLargo,SlowLenghLargo);
MacdCorto=Macd(Close,FastLenghCorto,SlowLenghCorto);
MacdAvgLargo=XAverage(MacdLargo,MacdLenghLargo);
PipsCalc=(MinMove/PriceScale)*NumPips;//para el cálculo de los pips del trailing
MP=marketposition;
TT=Totaltrades;
cc1=MacdLargo>0;//condición principal de compra
cc2=MacdAvgLargo < MacdLargo;//Señal de macd por debajo del macd (ó macd por encima de la señal
cc3=MacdLargo<0 and MacdAvgLargo<MacdLargo;//macd debajo de cero pero señal cruza under. SEGUNDA POSIBILIDAD DE COMPRA
{Tener en cuenta que o se dan la cc1, la cc2 y la cc4 o bien se da la cc3 y la cc4}
cc4=MacdCorto>MacdCorto[1];//tigger
cv1=MacdLargo<0;//condicion principal de venta
cv2=MacdAvgLargo>MacdLargo;//señal de macd por encima del macd (ó macd por debajo del macd)
cv3=MacdLargo>0 and MacdAvgLargo>MacdLargo;//macd encima de cero y señal cruza over. SEGUNDA POSIBILIDAD DE VENTA
{Tener en cuenta que o se dan la cv1, la cv2 y la cv4 o bien se da la cv3 y la cv4}
cv4=MacdCorto<MacdCorto[1];//tigger
If MP<>1 and ((cc1 and cc2 and cc4) or (cc3 and cc4)) then
buy ("compra") next bar TamañoPos shares at market;
SetStopShare;
SetStopLoss(StopAmount);
SetProfitTarget(ProfitAmount);
if MP = 1 then
begin
if TT <> TT[1] or MP[1] <> 1 or High > PosHigh then
PosHigh = High ;
Sell ( "fincompra" ) next bar at PosHigh - PipsCalc stop ;
end
else
Sell ( "fincompra2" ) next bar at High - PipsCalc stop ;
If MP<>-1 and ((cv1 and cv2 and cv4) or (cv3 and cv4)) Then
SellShort ("venta") next bar TamañoPos shares at market;
SetStopShare;
SetStopLoss(StopAmount);
SetProfitTarget(ProfitAmount);
if MP = -1 then
begin
if TT <> TT[1] or MP[1] <> -1 or Low < PosLow then
PosLow = Low ;
Buy To Cover ( "finventa" ) next bar at PosLow + PipsCalc stop ;
end
else
Buy To Cover ( "finventa2" ) next bar at Low + PipsCalc stop ;