Resposta

Diga à EA para parar de negociar por esse dia se um Lucro ou Perda em Pips for alcançado?

14 respostas

birdy70

Assinante, bbp_participante, comunidade, 25 respostas.

Perfil da visita

11 anos atrás #112314

Olá Mark,

 

Em qual bloco estratégico eu poderia digitar a regra, quando eu quisesse parar de negociar para aquele dia, se o lucro ou perda diária fosse atingido +/- 100 Pips, por exemplo?

 

Obrigado por seu feedback,

Birdy70

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

11 anos atrás #125178

Olá,

 

O EA Wizard não tem função que devolve PL para um dia atual, mas você pode adicioná-lo.

 

1. Abra {EA Wizard}/code/CustomFunctions.mq4 e adicione ali o seguinte código:

 
duplo sqGetPLInPipsToday() {
   string todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   plToday duplo = 0;
 
   for(int i=0;i<OrdersHistoryTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==verdadeiro && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLLIMIT || OrderType() == OP_SELLSTOP) {
            // pular ordens pendentes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == hojeTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            {} else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
 
   para (int cc = OrderTotal() - 1; cc >= 0; cc-) {
      if (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Símbolo()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLLIMIT || OrderType() == OP_SELLSTOP) {
            // pular ordens pendentes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == hojeTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            {} else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }         
         }
      }
   }
   
   return(plToday*gPointPow);
}
 
 
2. então em sua regra você pode chamar esta nova função, a regra poderia ser :
SE(suas outras regras)
e (Função Personalizada: sqGetPLInPipsToday() < 100) <- isto significa que PL hoje é menor que 100 pips
 
ENTÃO

Marcar
EstratégiaQuant arquiteto

0

birdy70

Assinante, bbp_participante, comunidade, 25 respostas.

Perfil da visita

11 anos atrás #125205

Olá Mark,

 

onde eu tenho que digitar este código? Se eu abrir em meu PC a pasta C:StrategyQuant/SQEAWizard/Code, encontro um arquivo chamado CustomFunctions.mql4. Se eu abrir esse arquivo, o Editor do MT4 abrirá com a janela CustomFunctions. Quando copio seu código nessa janela, recebo 6 mensagens de erro após compilar este código!

 

Por favor, me ajude.

 

Birdy70

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

11 anos atrás #125244

Olá,

 

você tem que copiar esta função para este arquivo, mas não compilá-lo, ele não é uma EA completa.

O conteúdo deste arquivo é anexado a cada EA gerada pelo EA Wizard, portanto, é um lugar onde podemos colocar funções personalizadas.

 

Portanto, basta abrir o EA Wizard, carregar sua estratégia, adicionar a função personalizada lá e exportar para o EA. Então, deve ser compilado sem problemas.

Marcar
EstratégiaQuant arquiteto

0

birdy70

Assinante, bbp_participante, comunidade, 25 respostas.

Perfil da visita

10 anos atrás #126130

Olá Marc,

 

Sinto muito, mas não entendo! Em minha Pasta EAW encontro o arquivo CustomFunctions.mql4. Eu poderia abrir este arquivo com o Editor MT4 (em MT4) e poderia colar suas Condições de Negociação que você me disse no início. Se eu abrir meus detalhes de estratégia EAW, poderei ver na caixa de diálogo em "Funções" o arquivo "Custom Function" (Função Personalizada)! Mas como digitar sua Regra de Negociação nesta Janela. 

 

Talvez você possa me dizer passo a passo, como eu poderia usar esta Regra na EAW ou me dizer outra Regra de Negociação, que diz à EA "pare de negociar por aquele dia, depois que um lucro ou perda de 100 Pips ou 100 Euros for alcançado"!

 

Isto seria muito bom.

 

Sob o botão "Opções de estratégia", vejo algumas regras como:

Soma de P/L fechado (Número mágico / Contagem de pedidos)

TotalProfits 

Perdas totais

P/L fechado em Pips (Número Mágico e comércios atrás)

Fechado P/L em dinheiro (Número Mágico e negócios atrás)

 

Não é possível criar com estas opções uma Regra como esta:

 

SE

A soma das ordens de compra/venda fechadas é > 100 Pips ou 100 Euros (por exemplo)

 

Depois

Pare de negociar por esse dia

 

Obrigado por sua ajuda! Espero que seja possível, criar uma Regra Comercial como esta.

 

Melhores cumprimentos

Birdy70

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

10 anos atrás #126137

Olá,

 

quando você copiou esta função para o arquivo CustomFunctions.mq4 ela será anexada a cada nova EA, para que você possa utilizá-la em suas condições.

 

Como fazer isso - normalmente abre sua estratégia no EA Wizard. Clique para adicionar uma nova regra comercial, depois vá para Funções -> Função Personalizada e no campo Função escreva: sqGetPLInPipsToday()

Adicione < 100 de comparação e clique em OK para fechar o diálogo.

 

Isso é tudo, agora salve esta estratégia como EA e ela deve funcionar.

Marcar
EstratégiaQuant arquiteto

0

jastejp

Assinante, bbp_participante, comunidade, 8 respostas.

Perfil da visita

10 anos atrás #129459

Olá Marc,

 

Comprei recentemente o EA Wizard depois de tê-lo comparado com outros construtores de EA, e estou muito satisfeito com ele, pois inclui tantas funções pré-construídas para usar - acho que isto o diferencia de seus concorrentes, portanto, por favor, continue o bom trabalho.

 

Infelizmente, não consigo obter a função sqGetPLInPipsToday() customizada aqui para trabalhar tendo passado o dia todo trabalhando nela. O problema é que o comércio ainda continua depois de ter atingido minha meta de lucro diário e não sei por que depois de ter seguido suas instruções com muito cuidado. Se você olhar para o gráfico anexo, poderá ver claramente que a primeira negociação atinge a meta diária de 20 pips, mas a EA ainda continua a negociar para aquele dia. Poderia gentilmente dar uma olhada nos arquivos anexos para determinar o problema, por favor.

 

Muito obrigado.

Cumprimentos,

 

Jamie

Arquivo: EURUSDM15.pngEURUSDM15.png

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

10 anos atrás #129552

ok, encontrei o problema, houve um erro em minha função, abaixo está o correto.

 

 

duplo sqGetPLInPipsToday() {
   string todayTime = TimeToStr( TimeCurrent(), TIME_DATE);
   plToday duplo = 0;
 
   for(int i=0;i<OrdersHistoryTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==verdadeiro && OrderSymbol() == Symbol()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLLIMIT || OrderType() == OP_SELLSTOP) {
            // pular ordens pendentes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == hojeTime) {
         Log("Comparing ", TimeToStr( OrderOpenTime(), TIME_DATE), " = ", todayTime);
            if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            {} else {
               plToday += OrderOpenPrice() - OrderOpenPrice();
            }
         }
      }
   }
 
   para (int cc = OrderTotal() - 1; cc >= 0; cc-) {
      if (OrderSelect(cc, SELECT_BY_POS) && OrderSymbol() == Símbolo()) {
 
         if(OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLLLIMIT || OrderType() == OP_SELLSTOP) {
            // pular ordens pendentes
            continuar;
         }
 
         if(TimeToStr( OrderOpenTime(), TIME_DATE) == hojeTime) {
            if(OrderType() == OP_BUY) {
               plToday += sqGetBid(OrderSymbol()) - OrderOpenPrice();
            {} else {
               plToday += OrderOpenPrice() - sqGetAsk(OrderSymbol());
            }
         }
      }
   }
 
   return(plToday*gPointPow);
}

Marcar
EstratégiaQuant arquiteto

0

jastejp

Assinante, bbp_participante, comunidade, 8 respostas.

Perfil da visita

10 anos atrás #129560

Olá Mark,

 

Muito obrigado.

Vou tentar o novo código e informá-lo-ei dos resultados. Espero que alguns testes posteriores mostrem que o problema é o comércio e que o roteiro conserte isso.

 

Jamie

0

jastejp

Assinante, bbp_participante, comunidade, 8 respostas.

Perfil da visita

10 anos atrás #129888

Olá Mark,

 

Desculpe pelo atraso na volta para cá. 

 

Está trabalhando e fazendo exatamente o que eu quero. Bom trabalho!

 

Permita-me sugerir que você coloque um código útil como este e outros em um tópico pegajoso do fórum, para que possam ser facilmente encontrados.

 

Obrigado,

Jamie

0

Brignac Roofing

Assinante, bbp_participant, comunidade, cliente, 91 respostas.

Perfil da visita

10 anos atrás #130754

Eu experimentei seu fio acima e fiz exatamente como você explicou, mas ele continua negociando após o número de pips alcançados. O que estou fazendo de errado com esta simples criação da ea?

0

Brignac Roofing

Assinante, bbp_participant, comunidade, cliente, 91 respostas.

Perfil da visita

10 anos atrás #130768

Gente,

  Trabalhei literalmente durante a noite como podem ver pelos meus poucos postos de tempo e simplesmente não consigo entender isto... Alguém pode me explicar em detalhes o que estou fazendo de errado?

 

Tudo o que eu procuro é uma estratégia simples para aprender. Digamos, vá longe quando EMA 10> EMA 20 E CURTO QUANDO EMA10 < EMA 20... Tudo o que eu quero fazer é parar o lucro no $10 e começar o próximo dia de negociação... Estou exausto de trabalhar durante a noite e apreciaria se isto pudesse ser feito o mais rápido possível...

0

boraucak

Assinante, bbp_participante, comunidade, 14 respostas.

Perfil da visita

9 anos atrás #135674

Olá, 

antes de tudo, obrigado por todo este grande apoio ao EA Wizard,

 

esta função é ótima e eu precisava desesperadamente dela. 

Mas uma pequena correção é necessária para este código. 

 

        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            {} else {
               plToday += OrderOpenPrice() - OrderOpenPrice();
 
este código deve ser:
 
        if(OrderType() == OP_BUY) {
               plToday += OrderClosePrice() - OrderOpenPrice();
            {} else {
               plToday += OrderOpenPrice() - OrderClosePrice();
 
Por favor, me corrija se eu estiver errado já que não sou um codificador e eu o encontrei ao tentar (algumas horas) :/
 
obrigado novamente pelo apoio. 
melhor 

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

9 anos atrás #135684

Sim, isso é correto. Esse mesmo OrderOpenPrice() precisa ser substituído por PedidoFecharPreço()

0

Jack Archer

Cliente, bbp_participant, community, sq-ultimate, 6 respostas.

Perfil da visita

8 meses atrás #287831

Olá, existe alguma maneira de definir uma meta de lucro diário ou um stop loss diário no StrategyQuant. Não consigo encontrar uma configuração ou um bloco personalizado que possa fazer isso para mim. Muito obrigado!

0

Visualizando 14 respostas - 1 até 14 (de um total de 14)