Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)
Olá. Tenho 2 robôs com diferentes configurações de médias e adx.
queria saber como posso ter os 2 modelos de execução dentro de uma única estratégia onde eu possa clicar em propriedades da estratégia e ligar ou desligar um indicador ou mesmo alterar os valores.
obrigado pela ajuda.
Olá @falcaotrader!
Basta você criar parâmetros no seu robô. Os parâmetros podem ser do tipo booleano, inteiro ou até string (não recomendo).
Nos parâmetros você também pode colocar a quantidades de períodos das médias. Daí é só fazer a lógica no código, o que vai depender de quanto cada modelo de execução tem em comum. Por exemplo:
input pModeloExecucao(0); pQtdePeriodosMedia(9); var fMedia: float; begin //0 significa modelo de execução XPTO if pModeloExecucao = 0 then begin //coloca todo o modelo de execução de XPTO aqui! end else //1 significa modelo de execução BLA if pModeloExecucao = 1 then begin //coloca todo o modelo de execução de BLA aqui! end; end.
abs!
oi ainda não consegui. poderia dar uma olhada no código e me ajudar desvendar o erro ?
@masker Segue o código.
Em resumo eu queria poder ligar e desligar os indicadores como por ex o macd e o hilow.
e se possível melhorar a finalização de ordem ao final do dia . como eu uso o renko, sempre fica uma posição em aberto para o próximo dia.
agradeço a sua ajuda .
Input
HInicio (0900) ;
HFim (1800) ;
Reversao (False);
Ganho (100) ;
Stop (100) ;
Var
mme5,mme10: Float;
vMACD, vHiLo : Float;
CondicaoCompra,CondicaoVenda : Integer;
BEGIN
mme5 := MediaExp(5,Close);
mme10 := MediaExp(10,Close);
vMACD := MACD(55,14,81)|1|;
vHiLo := HiloActivator(8);
//CONDIÇÃO DE COMPRA
IF (Trades > 0)
AND (Close > Open)
AND (Close > mme5)
AND (mme5 > mme10)
AND (Close > vHiLo)
AND (vMACD > 0) THEN
CondicaoCompra := 1
//CONDIÇÃO DE VENDA
ELSE
CondicaoCompra := 0;
IF (Trades > 0)
AND (Close < Open)
AND (Close < mme5)
AND (mme5 < mme10)
AND (Close < vHiLo)
AND (vMACD < 0) THEN
CondicaoVenda := 1
ELSE
CondicaoVenda := 0; IF
//COLORAÇÃO POR HORÁRIO
(Time >= HInicio) AND (Time < HFim) THEN
BEGIN
IF (CondicaoCompra = 1) THEN
PaintBar(CLlime)
ELSE IF (CondicaoVenda = 1) THEN
PaintBar(clRed);
END
ELSE
PaintBar(clbranco);
//ESTRATÉGIA DE EXECUÇÃO HORÁRIO
IF (Time >= HInicio) AND (Time < HFim) THEN
BEGIN
IF NOT (IsBought) AND NOT (IsSold) THEN
BEGIN
IF NOT (IsBought) AND (CondicaoCompra[1] = 0) AND (CondicaoCompra = 1) THEN
BuyAtMarket
ELSE IF NOT (IsSold) AND (CondicaoVenda[1] = 0) AND (CondicaoVenda = 1) THEN
SellShortAtMarket;
END;
END;
IF (Reversao = True) THEN ///CÓDIGO PARA ALCANÇAR ALVO GANHO
BEGIN
IF (IsBought) AND (Close < Open) THEN
ClosePosition
ELSE IF (IsSold) AND (Close > Open) THEN
ClosePosition;
END
ELSE IF (Reversao = False) THEN
BEGIN
IF (IsBought) AND (Close < Open)
THEN
ClosePosition
ELSE IF (IsSold) AND (Close > Open)
THEN
ClosePosition
ELSE IF (IsBought) THEN
SellToCoverStop(BuyPrice + Ganho,BuyPrice + Ganho);
SellToCoverStop(BuyPrice -Stop,BuyPrice - Stop);
IF (IsSold) THEN
BuyToCoverStop(SellPrice + Stop,SellPrice + Stop);
BuyToCoverStop(SellPrice - Ganho,SellPrice - Ganho);
END;
//ZERAR POSIÇÃO NO FINAL DO DIA
IF (Time >= 1800) THEN
BEGIN
ClosePosition;
CondicaoCompra := 0;
CondicaoVenda := 0;
END;
END;
Olá,
Quanto ao melhorar a finalização de ordem ao final do dia, você pode diminuir o tempo de encerramento de operações nos parâmetros do seu robo, (atualmente está 18:00) além de fazer essa edição.
Localize a linha:
IF (Time >= 1800) THEN
Troque para:
IF (Time >= HFim) THEN
Para poder ligar e desligar os indicadores, imagino que seja apenas mostrar ou não no gráfico, né? Pois se desativar algum deles na lógica, sua estratégia não irá funcionar como esperado.
Então você pode fazer o seguinte:
Incluir após o Input:
AtivarMedia(true);
Incluir antes do último end;
if AtivarMedia then Plot(mme5);
Dessa maneira, você poderá optar por mostrar ou não a média móvel de 5 no gráfico através das configurações do robo e estender para os demais indicadores.
Entendi.na verdade queria poder ligar e desligar o adx ou até mesmo o hilow activator . pois são 2 robos separados que eu resolvi fundir eles num só.
como não fico na frente do pc o tempo todo, dependendo do cenário do dia eu poderia ligar um filtro como por ex o hilow activator
isso é uma idéia minha não sei se seria viável ou não .
@falcaotrader Ah entendi. É possível criar um parâmetro que permita vc 'ligar ou desligar' indicadores em sua estratégia. Isso pode ser feito usando uma variável booleana ou um parâmetro de entrada, porém no seu código não tem ADX. O cálculo está se baseando em valores de médias exponenciais, Hilo e Macd.
Olá @falcaotrader!
Depois que você postou o código fica mais fácil sugerir uma alteração. Vamos lá, vou propor uma adaptação bem pontual para que você possa ativar/desativar o uso dos indicadores HiLo e MACD nos sinais de compra e venda.
IF (Trades > 0) AND (Close > Open) AND (Close > mme5) AND (mme5 > mme10) //AND (Close > vHiLo) AND ( ( (Close > vHiLo) and pAtivarHiLo) or (not pAtivarHiLo) ) //AND (vMACD > 0) AND ( ( (vMACD > 0) and pAtivarMACD) or (not pAtivarMACD) ) THEN CondicaoCompra := 1
IF (Trades > 0) AND (Close < Open) AND (Close < mme5) AND (mme5 < mme10) //AND (Close < vHiLo) AND ( ( (Close < vHiLo) and pAtivarHiLo) or (not pAtivarHiLo) ) //AND (vMACD < 0) AND ( ( (vMACD < 0) and pAtivarMACD) or (not pAtivarMACD) ) THEN CondicaoVenda := 1
Espero ter ajudado!
Grande abs!