Alguem conseguiu fazer a Automação fazer uma venda no rompimento de minima ou fechamento do candle anterior?
Ou então Compra no rompimento da maxima ou abertura do candle anterior?
Tambem estou tentando fazer a compra no topo do corpo do candle e venda na parte inferior do corpo de candle.
Olá. Tenho muito pouca experiência nesse tipo de programação mas até onde entendi, o código é executado apenas ao final de cada candle. Dessa forma, me parece que só será possível enviar uma ordem stop no preço desejado (p.ex. máxima/mínima de um candle anterior) e aguardar que ordem seja executada.
Postado por: @dfrobinson ↑ Olá. Tenho muito pouca experiência nesse tipo de programação mas até onde entendi, o código é executado apenas ao final de cada candle. Dessa forma, me parece que só será possível enviar uma ordem stop no preço desejado (p.ex. máxima/mínima de um candle anterior) e aguardar que ordem seja executada.
@dfrobinson foi direto na questão! É isso aí!
Eu fiz o código abaixo com entradas utilizando ordens stop para que você possa evoluir da maneira que entender ser melhor (recomendo assistir esse vídeo, no qual eu explico um roteiro para melhor implementações). Observe que a estratégia tem 3 parâmetros.
OBS:
1) Devido a forma como o Módulo de Automação funciona, peço que configure a quantidade máxima da posição 2 vezes o valor da sua posição. Ex: se vai fazer operações com apenas 1 contrato, deixe na configuração da automação o valor de 2 na quantidade máxima de posição. Isso é para garantir que a ordem de takeprofit vai aparecer corretamente no primeiro candle após a abertura (momento no qual é necessário cancelar a ordem stop de abertura que não foi executada).
2) Não esqueça de configurar também o parâmetro de pModuloAutomacao para true na hora de criar a automação.
Abs e boa programação ai!
input pRiscoGanho(3.0); pTriggerEmTicks(2); pModuloAutomacao(false); var fPrecoAlvo, fPrecoStop, fPrecoStopOffset: float; fPrecoVenda, fPrecoCompra: float; fRange: float; begin if not hasPosition then begin fPrecoVenda := Low - pTriggerEmTicks*MinPriceIncrement; fPrecoCompra := High + pTriggerEmTicks*MinPriceIncrement; fRange := Range; SellShortStop(fPrecoVenda); BuyStop(fPrecoCompra); end; if isBought then begin fPrecoStop := buyPrice - fRange; fPrecoStopOffset := fPrecoStop - 10*MinPriceIncrement; fPrecoAlvo := buyPrice + pRiscoGanho*fRange; CancelPendingOrders; if pModuloAutomacao then begin SellShortStop(fPrecoStop, fPrecoStopOffset); SellShortLimit(fPrecoAlvo); if isBought and (Close <= fPrecoStopOffset) then ClosePosition; end else begin SellToCoverStop(fPrecoStop, fPrecoStopOffset); SellToCoverLimit(fPrecoAlvo); if isBought and (Close <= fPrecoStopOffset) then ClosePosition; end; end; if isSold then begin fPrecoStop := sellPrice + fRange; fPrecoStopOffset := fPrecoStop + 10*MinPriceIncrement; fPrecoAlvo := sellPrice - pRiscoGanho*fRange; CancelPendingOrders; if pModuloAutomacao then begin BuyStop(fPrecoStop, fPrecoStopOffset); BuyLimit(fPrecoAlvo); if isSold and (Close >= fPrecoStopOffset) then ClosePosition; end else begin BuyToCoverStop(fPrecoStop, fPrecoStopOffset); BuyToCoverLimit(fPrecoAlvo); if isSold and (Close >= fPrecoStopOffset) then ClosePosition; end; end; end;
@admin Bom dia! nessa estratégia pode me ajudar como faço para definir um alvo de ganho de 2 pontos e um preçode Stop loss de 5 pontos? sera que é possível? Obrigado.
@admin Bom dia. Como poderia plotar uma reta no valor do máximo e outra no mínimo do candle que gerou o range usado como referência para as ordens até o próximo candle referência?
Bom dia @alexandre-ferreira-cardoso! Tudo bem?
O código seria simples...seria até melhor já inserir no seu código direto...mas vou explicar aqui a ideia, pra você incluir aí:
É isso! Grande abs!
Bom dia @anaxmando!
Vou te falar dois ajustes bem pontuais para fazer o que deseja. Mas recomendo sempre ter uma relação risco/ganho maior do que um. A sua elaboração por construção já tem uma relação de risco/ganho de 0,4...o que vai exigir que sua estratégia tenha um alto nível de acerto para ser lucrativa.
const fRange = 2;
input pRiscoGanho(2.5);
Assim, seu stop será de dois pontos atrás da entrada e o take profit 2.5 vezes o stop, ou seja, 5 pontos.
Abs e bons trades!
@admin Na realidade seria o inverso o meu Stop seria de 5 pontos e o meu ganho de 2 pontos... sabe me informar como poderia configurar dessa forma? Gratidão.
@admin Valeu! Consegui fazer seguindo os passos. Só que começa a plotar defasado, Eu já vi em algum lugar plotar a partir do próprio candle, como na figura da direita. Alguma idéia de como fazer isso?
E aí, @anaxmando!
O raciocínio é análogo. Bastaria configurar fRange para 5 (que seria o stop) e a relação pRiscoGanho para 0.4.
Só reforço que projetar uma estratégia com risco ganho menor que 1 não é interessante...você vai ter que compensar com uma taxa de acerto alta para a estratégias ser lucrativa.
Abs!
Boa tarde! Estou começando nesse meio da programação.
Eu criei uma estrategia... mas gostaria que a estratégia funcionasse como se estivesse uma ordem OCO apregoada, para que eu possa ter uma estatística, saberia informar o que poderá modificar na estratégia abaixo para conseguir deixar fixo o alvo de Stop gain e Stop Loss, do jeito que esta... só rompe máxima e mínima, mas não coloca a saída... se conseguir ajudar ficarei muito grato.
InputAlvo(2.0);Stop(5.0);ct(1);
Inicio//Pergunta se esta compradoSe (Isbought) entaoInicio//Buscar o alvobuylimit(ct);SellToCoverLimit(buyprice+alvo,ct); //Alvo da compraSellToCoverStop(buyprice-stop, buyprice-stop-1,ct); //Alvo do Stop
Fim;//Pergunta se esta vendidoSe (IsSold) entaoInicioBuyToCoverLimit(sellprice-alvo,ct); //Alvo da Vendabuytocoverstop(sellprice+stop, sellprice+stop+1,ct); //Alvo do Stop
Fim;
InicioSe (HasPosition = False) entaoInicioBuyStop(maxima+0.5, maxima+0.5+1);Fim;Se (HasPosition = False) entaoInicioSellShortStop(Minima-0.5, minima-0.5-1);Fim;Se (Hasposition = true) entaoCancelPendingOrders;Fim;Fim;
@anaxmando veja se assim funciona como vc gostaria:
Input Alvo(2.0); Stop(5.0); ct(1); Inicio Se (Isbought) entao Inicio buylimit(ct); SellToCoverLimit(buyprice+alvo); SellToCoverStop(buyprice-stop, buyprice-stop-1); Fim; Se (IsSold) entao Inicio BuyToCoverLimit(sellprice-alvo); buytocoverstop(sellprice+stop, sellprice+stop+1); Fim; Inicio Se (HasPosition = False) entao Inicio BuyStop(maxima+0.5, maxima+0.5+1); Fim; Se (HasPosition = False) entao Inicio SellShortStop(Minima-0.5, minima-0.5-1); Fim; Se (Hasposition = true) entao CancelPendingOrders; Fim; Fim;
Resumindo, nunca teremos ordens executadas antes da finalização de um Candle? É isso?
Complicado...
Principalmente pros stops. Podemos ter slippages enormes que inviabilizam os referidos robôs
Abs
Oi @mfpublicos! Seu resumo não está correto...
Ordens de alvo e stop, que são consideradas ordens OCO, uma vez criadas serão executadas quando forem acionadas (e não no fechamento do Candle). Ou seja, podem ser acionadas durante a formação da barra porque já estão lá colocadas quando se abre a posição e seu código trata isso de maneira adequada.
A atualização das ordens OCO ocorrem só no fechamento do candle/barra.
Grande abs!
@admin boa tarde, gostaria de fazer ao contrario, abrir uma compra no rompimento da minima do candle e uma venda no rompimento da maxima do candle, onde teria que inverter no código?