[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 129

 

Saudações a todos, eu baixei Owl, no testador tudo é normal e vende e compra, eu coloco na demonstração em Alpari, só compra.....

Talvez algo esteja faltando lá? Eu não sei como funcionaria....

/* descompilados apagados */

 

Quero que meu consultor especializado compre quando o preço estiver próximo do preço da máscara + travessãoi_thresholdFromMa. Escrevi-o desta forma para uma posição longa:

bool OpenBuy(double fastMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   if (High[0] == fastMa || Low[0] == fastMa)
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

O valor dofastMa é passado através dos parâmetros da função. Depois comparo os valores da corrente alta e baixa com o valor dofastMa fast stroke.

Se o valor alto ou baixo for igual ao valor da válvulafastMa fast, então logicamente uma ordem deve ser aberta pelo preço (valor da válvulafastMa fast + offset da mesmai_thresholdFromMa).

A função não funciona. Qual é a razão? O consultor especializado não envia nenhum erro para a revista.

 
hoz:

Quero que meu consultor especializado compre quando o preço estiver próximo do preço da máscara + travessãoi_thresholdFromMa. Escrevi-o desta forma para uma posição longa:

O valor dofastMa é passado através dos parâmetros da função. Depois comparo os valores da corrente alta e baixa com o valor dofastMa fast stroke.

Se o valor alto ou baixo for igual ao valor da válvulafastMa fast, então logicamente uma ordem deve ser aberta pelo preço (valor da válvulafastMa fast + offset da mesmai_thresholdFromMa).

A função não funciona. Qual é a razão? O consultor especializado não envia nenhum erro para a revista.

Boa noite, você está no meio da noite!

Nunca serão fixadas frações iguais entre elas! Os carrapatos escorregarão e não haverá sinal. É por isso que é melhor assim:

   if (High[0] >= fastMa && Low[0] <= fastMa)
 

Concordo com Boris, mas gostaria de acrescentar que qualquer comparação de preços é melhor feita da seguinte forma

não Bid>fastMA mas Bid-fastMA>Zero

Não High[0]>=fastMA , mas High[0]-fastMA>-Zero , e assim por diante:)

Na seção global:

#define Zero 0,00000001 , ou algo semelhante.

 
tara:

Concordo com Boris, mas gostaria de acrescentar que qualquer comparação de preços é melhor feita da seguinte forma

não Bid>fastMA mas Bid-fastMA>Zero

Não High[0]>=fastMA , mas High[0]-fastMA>-Zero , e assim por diante:)

Na seção global:

#define Zero 0,00000001 , ou algo semelhante.

E eu concordo com Alexei, mas não entrei em detalhes, apenas corrigi a incorreção óbvia! O resto será encontrado verificando, provando ao seu próprio gosto.
 

Alexey e Boris agradecem por seu valioso comentário.

#define Zero 0.00000001 , eu acho que seria muito pequeno :) Suponho que você pode colocar com segurança meio ponto aqui ou um ponto de propagação.

 
hoz:

Alexey e Boris agradecem por seu valioso comentário.

#define Zero 0.00000001 , eu acho que seria muito pequeno :) Suponho que você pode colocar com segurança meio ponto aqui ou um ponto de propagação.

Tente colocar uma variável em vez de Zero e é assim que você determina o espaçamento necessário! E muito provavelmente você terá que deixá-lo, pois seu valor irá mudar dependendo do estado do mercado.
 
borilunad:
Tente colocar uma variável em vez de Zero e é assim que você define a autorização necessária! E o mais provável é deixá-lo, pois seu valor mudará dependendo do estado do mercado.


Sim, se houver uma variável, devemos testá-la e observar os resultados do mercado. Nesse meio tempo, estou escrevendo-o para executá-lo no testador e identificar os pontos fortes e fracos do meu TS.

Esta é a minha lógica:

bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   //if (High[0] == fastMa || Low[0] == fastMa)
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

Por enquanto coloquei 1 no lugar da autorização variável para o teste, e depois o colocarei no externo.

Como eu entendo, será a variante mais correta. Se o preço tocar a barra ou não, será importante obter um sinal. O castiçal tem duas extremidades (alta e baixa). Isso significa que verificamos por seus 2 extremos. É por isso que escrevi a lacuna para ser menor do que 1.

Mas eu me pergunto se ela se abre à distância doi_thresholdFromMa(travessão), ou seja, não do pulso, mas do extremo da vela.

Pedirei que não prestem atenção à condição para entrar na função de abertura, é claro que a incluirei na função de sinal.

Aqui está uma captura de tela, por exemplo,

Tela do momento

A bola vermelha é fastMA.i_thresholdFromMa(travessão da ondulação) é 5 em variáveis externas. Todas as outras condições são de compra. Aqui vemos 2 ordens de parada azuis abaixo do fastMa vermelho. Não vejo nenhuma lógica aqui. O pedido é enviado precisamente ao preçoND(fastMa + i_thresholdFromMa * pt) e eu posso vê-lo na função dada...

 
hoz:


Sim, se variável, ela deve ser testada e observada no mercado, que tipo de resultados ela apresenta. Enquanto isso, estou escrevendo isto para fazer o teste e identificar os pontos fortes e fracos do TS.

Esta é a minha lógica:

Por enquanto coloquei 1 no lugar da autorização variável para o teste, e depois o colocarei no externo.

Como eu entendo, será a variante mais correta. Se o preço tocar a barra ou não, será importante obter um sinal. O castiçal tem duas extremidades (alta e baixa). Isso significa que verificamos por seus 2 extremos. É por isso que escrevi a lacuna para ser menor do que 1.

Mas eu me pergunto se ela se abre à distância doi_thresholdFromMa(travessão), ou seja, não do pulso, mas do extremo da vela.

Pedirei que não prestem atenção à condição para entrar na função de abertura, é claro que a incluirei na função de sinal.

Aqui está uma captura de tela, por exemplo,

A marca de verificação vermelha é fastMA.i_thresholdFromMa(travessão da ondulação) é 5 em variáveis externas. Em todas as condições, o resto é comprado. Aqui vemos 2 ordens de parada azuis abaixo do fastMa vermelho. Não vejo nenhuma lógica aqui. O pedido é enviado exatamente ao preçoND(fastMa + i_thresholdFromMa * pt) e eu posso vê-lo na função dada...

Se você quiser que a posição abra mais cedo, no meio de um bar, você precisa especificar Barra baixa para o Bai e barra alta para o Sall.

   if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла
   
 
borilunad:

Se você quiser que a posição abra mais cedo, no meio de um bar, você deve especificar Barra baixa para o Bai e barra alta para o Sall.

if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла


Bem, você não precisa fazer isso antes. Eu não sei de que lado a vela se aproxima da máscara. Em cima ou em baixo. Essa é a questão. É por isso que é inapropriado. Não é?

De qualquer forma, o preço aberto em minha função OrderSend( ) é diferente e de qualquer forma é mais alto do que a máscara:

Aqui eu imprimo os valores na função:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
   {
       if ((fastMa + i_thresholdFromMa * pt) > Ask)            // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
      Print("fastMa = ", DoubleToStr(fastMa,Digits));
      Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
      Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
   }
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

Isto é o que o registro mostra:

2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #110 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #109 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #108 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:14     D_Aleks_first_pattern EURUSD,H1: loaded successfully

É óbvio, que o preço de abertura deve ser fixado por mim. Você está sendo calculado. Uma lacuna é adicionada ao valor da máquina. E você pode vê-lo na impressão...

Razão: