A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias
Primeiramente, ao John, parabéns pelo canal no youtube e pelo site, top demais...
Estou tentando uma lógica que aumenta a mão após uma quantidade x de loss, no backtest meu código funcionou, qnd ploto "estratégia de execução" nográfico, tbm funciona, mas qnd coloco no módulo "automação de estrategias" (pra valer), não funciona, não aumenta a mão ou aumenta na sequência errada. Tentei algumas formas de fazer funcionar, por isso tem partes "bloqueadas" com "//"
Ex.:
qnt inicial = 1 ctr (contarto)
se tomar um loss, qnt aumenta para 2 ctrs
se tomar outro loss na sequência, qnt aumenta para 3 ctrs
assim por diante, de acordo com os parâmetros definidos de limite de aumento.
se der um gain, qnt retorna para qnt inicial = 1
Obs.: Peço desculpa pq axo q meu código talvez seja um pouco confuso, sou iniciante e não sei exatamente as "regras" para organizar de uma forma padrão.
Const OffSetEntrada = 100; OffSetStop = 500; Input pontos (30); gain (30); Loss (65); horaini (0910); horafim (1800); horaEncerraDia (1720); QntGains(3333); // 2 4 // novas definições inicio_aumento_mao(1); // 1 mao_maxima_operavel(3); // 3 m_rap (12); // m_lenta (26); // m_sinal (26); // m_media (9); // var Alvo,Stop,entrada : real; Qnt_Contratos : integer; compra,venda: boolean; hoje : float; contgain : inteiro; contlos : inteiro; indice:inteiro; contloss:inteiro; sAgAcum,agS : Real; i,a,b,mov : Inteiro; Agress_Compra_Max : float; Agress_Compra_Min : float; Agress_Compra_Saldo : float; Agress_Venda : float; Agress_Venda_Saldo : float; Histo_Agress_Compra : float; Histo_Agress_Venda : float; Agress_Saldo_ok : boolean; Agress_Compra_ok : boolean; Agress_Venda_ok : boolean; Money_Flow_Compra_ok : boolean; Money_Flow_Venda_ok : boolean; Histo_Agress_Compra_ok : boolean; Histo_Agress_Venda_ok : boolean; scompra: boolean; svenda:boolean; begin // PaintBar(clWhite); /////////// Formula HISTOGRAMA AGRESSÃO /////////// Inicio Se (AgressionVolBalance > 0) entao agS := agS + AgressionVolBalance senao agS := 0 ; fim; /////////// PARAMETROS DO HISTOGRAMA AGRESSÃO /////////// Histo_Agress_Compra := 5000 ; Histo_Agress_Venda := 1000; Histo_Agress_Compra_ok := (agS >= Histo_Agress_Compra) e (close>close[1]) ; Histo_Agress_Venda_ok := (mov = 0) e (sAgAcum >= Histo_Agress_Compra) ; // CALCULOS DA AGRESSÃO Agress_Compra_Min := 1000 ; Agress_Compra_Max := 2000000 ; Agress_Compra_Saldo := 1000 ; Agress_Venda := 10000 ; Agress_Venda_Saldo := -1000 ; Agress_Compra_ok := (AgressionVolBuy >= Agress_Compra_Min) and (AgressionVolBuy <= Agress_Compra_Max) and (AgressionVolBalance >= Agress_Compra_Saldo) // and (AgressionVolBalance > AgressionVolBalance[1]) ; Agress_Venda_ok := (AgressionVolSell >= Agress_Venda) and (AgressionVolBalance <= Agress_Venda_Saldo) ; compra := (Agress_Compra_ok) ; venda := Agress_Venda_ok // (Close < Media(media_maior,low)) e (Close < Media(media_menor,low)) // e (Ifr_Venda_ok) // e (Didi_Venda_ok) // e (MACD_Linha_Venda_ok) // e ; { /////////// REGRA DE COLORAÇÃO /////////// if(compra) then begin PaintBar(clVerde); end; } se(contloss-inicio_aumento_mao>=mao_maxima_operavel) entao // ZERAR CONTADOR SE ATINGIR MÃO MAX. inicio contloss:=0; fim; if(hoje<>Date) entao // comentar esta parte se não quiser que ele zere diariamente o contador inicio // comentar esta parte se não quiser que ele zere diariamente o contador // contloss := 0; contlos:=0; // comentar esta parte se não quiser que ele zere diariamente o contador contgain:=0; hoje:=date; // comentar esta parte se não quiser que ele zere diariamente o contador fim; // comentar esta parte se não quiser que ele zere diariamente o contador /////////// ENTRADA NA COMPRA /////////// if (IsBought = false) and (time >= horaini) and (time < horafim) then if (compra) then begin Entrada := close ; Stop := close - loss ; Alvo := close + gain ; if (contgain < QntGains) and (contloss < inicio_aumento_mao) then begin BuyAtMarket(1); end; se (contloss >= inicio_aumento_mao) entao // SE A CONTAGEM FOR MAIOR QUE O VALOR DE INÍCIO inicio // RODAR O LOOP DE ENTRADAS para indice:= 0 ate (contloss - inicio_aumento_mao+1) faca inicio BuyAtMarket(1) ; fim; fim; { if (contloss = 0) then begin // BuyLimit(close, contloss +1); BuyAtMarket(1); end else if (contloss = 1) then begin // BuyLimit(close, 2); BuyAtMarket(2); // BuyAtMarket; end else if (contloss = 2) then begin // BuyLimit(close, 3); BuyAtMarket(3); // BuyAtMarket; // BuyAtMarket; end else if (contloss = 3) then begin // BuyLimit(close, 4); BuyAtMarket(4); // BuyAtMarket; // BuyAtMarket; // BuyAtMarket; end; } end; /////////// SAÍDA DA COMPRA /////////// if (IsBought) then begin SellToCoverLimit(Buyprice + gain, Buyposition); /// É possível aumentar o gain até 60pts /// SellToCoverStop(Stop, Stop, Buyposition); if (close > Entrada) then begin alvo := close; contloss :=0; contgain := contgain + 1; contlos := 0; end senao if (close < Entrada) then begin Stop := close ; contloss := contloss + 1; contlos := 1; contgain := 0; end; { SellToCoverLimit(alvo , Buyposition); SellToCoverStop(open - 30, Stop-OffSetStop, Buyposition); } end; /////////// SAÍDA PELO HORÁRIO /////////// if (Time >= horaEncerraDia) then ClosePosition; end;
Oi @carlospqf! Tudo bem!?
Obrigado, cara! Eu geralmente peço o seguinte, para otimizar nosso tempo.
Me indique um ativo, tempo gráfico, Data e hora, o que deveria acontecer e o que aconteceu de errado.
Com base nessas informações, você me ajuda a entender seu código mais rapidamente e eu consigo te ajudar de maneira mais efetiva.
Fico aguardando o retorno.
Abs!
@admin Obrigado pelo retorno Johnathas, seguem os dados:
Ativo: WING23 (ou série atual)
Tempo gráfico: Renko 7r (30 pts)
Data e hora: não consigo informar, pois o problema é exatamente pq nos backtests o código funciona perfeitamente, qnd ploto "estrategia de execução, ybm fica perfeito, porém qnd coloco na automação, não faz o q deveria.
O que acointece é que no backtest e na plotagem no gráfico, qnd ocorre um LOSS, há um incremento na quantidade de contratos, ex.:
passo 1: estrategia inicia com 1 ctr;
ocorre um LOSS
passo 2: Proxima entrada vai com 2 ctrs;
ocorre outro LOSS
passo 3: Proxima entrada vai com 3 ctrs;
ocorre outro LOSS
passo 4: Proxima entrada vai com 4 ctrs;
e assim sucessivamente, como for definido nas variaveis:
// novas definições
inicio_aumento_mao(1); // 1
mao_maxima_operavel(3); // 3
O problema é que na automação não acontece o "aumento de mão", ou qnd acontece é fora de ordem, qnd ocorre um loss ao invés de incrementar mais um contrato já entrata com 3 ou 4 contratos ou então não incrementa nenhum e mantém 1 contrato.