Um bug na função OrderSend() ?

 

Já faz quatro dias que estou lutando e não consigo implementar uma coisa aparentemente simples. Já fiz coisas semelhantes antes com diferentes indicadores e castiçais. Não posso fazer isso com um relógio de pulso.

A essência é primitiva! Assim que o preço se aproxima da máscara de um certo período a uma certa distância do i_thresholdFromMa (neste EA é apenas um!), um pingente é colocado. Eu já removi todas as funções e filtros que costumavam estar disponíveis.

Aqui está a função Comprar:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
   
   if ((ND(OOP) - Ask) >= g_stopLevel)             // Проверка цену открытия на стоплевел          
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           Print("Bid = ", Bid);
           Print("Ask = ", Ask);
           Print("fastMa = ", fastMa);
           Print("Цена покупки = ", fastMa + buyHear * pt);
           Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}

Podemos ver que o OrderSend( ) tem um preço de abertura igual à soma das variáveis fastMa + buyHear * pt

Na imagem da tela, podemos ver que NÃO existe tal preço!

A junta está no mashka

Você também pode ver que não há entradas, onde o preço tocou o fastMa (marcador vermelho)

Tomei deliberadamente o 1º tampão, ou seja, a penúltima barra, para saber com certeza que a penúltima barra já fechou e não haverá outro fechamento... Quero evitar que a última barra zero não seja regravada.

Então esta é a mensagem do pedido:

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);

É OOP:

double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
Como isso é possível?
Arquivos anexados:
test_ma_1.mq4  9 kb
 
hoz:

Estou lutando há 4 dias e parece que não consigo implementar uma coisa aparentemente simples. Já fiz coisas semelhantes antes com diferentes indicadores e castiçais. Não posso fazer isso com um relógio de pulso.

A essência é primitiva! Assim que o preço se aproxima da máscara de um certo período a uma certa distância do i_thresholdFromMa (neste EA é apenas um!), um pingente é colocado. Eu já removi todas as funções e filtros que costumavam estar disponíveis.

Aqui está a função Comprar:

Podemos ver que o OrderSend( ) tem um preço de abertura igual à soma das variáveis fastMa + buyHear * pt

Na imagem da tela, podemos ver que NÃO existe tal preço!

Você também pode ver que não há entradas, onde o preço tocou o fastMa (marcador vermelho)

Tomei deliberadamente o 1º tampão, ou seja, a penúltima barra, para saber com certeza que a penúltima barra já fechou e não haverá outro fechamento... Eu queria evitar que a última 0ª barra fosse regravada.

Portanto, aqui está a mensagem do pedido:

UM OOP:

Como isso é possível?

Você ainda não vai trazer os troncos?
 
Vinin:

Você ainda não vai me dar os troncos?


Aqui está o que está nos troncos:

2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: open #3 buy stop 0.10 EURUSD at 1.31074 ok
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.3107
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: fastMa = 1.3097
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Ask = 1.3099
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Bid = 1.3099
2013.02.06 17:54:05     2011.01.12 14:32  Tester: order #2, buy 0.10 EURUSD is opened at 1.29876
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: open #2 buy stop 0.10 EURUSD at 1.29876 ok
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2988
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: fastMa = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Ask = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Bid = 1.2978
2013.02.06 17:54:05     2011.01.12 12:11  Tester: order #1, buy 0.10 EURUSD is opened at 1.29953
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: open #1 buy stop 0.10 EURUSD at 1.29953 ok
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2995
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: fastMa = 1.2985
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Ask = 1.2987
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Bid = 1.2986
2013.02.06 17:54:04     test_Ma_1 inputs: i_TF=0; i_fastMaPeriod=10; i_magic=3333021; i_thresholdFromMa=5; buyHear=10; SellHear=10; 

Ou seja, se você acredita nos troncos, a compra é onde deveria estar. Se você olhar para a captura de tela, ela não está lá... A foto acima mostra que a ordem pendente está no lugar errado. 10 do fastMa não está nem perto...

 

Olá, Victor! Ela se abre para mim, mas vaza. E se abre quando eu afinei um pouco uma linha:

   if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread))// Проверка цену открытия на стоплевел          
Acrescente o mesmo para o shopping! Boa sorte!
 
borilunad:

Olá, Victor! Ela se abre para mim, mas vaza. E se abre quando eu afinei um pouco a linha:

Eu gostaria de acrescentar o mesmo para o shopping! Boa sorte!


Olá, Boris. Bem, ela abre nos mesmos lugares que antes. Onde não se abriu, ainda não se abre. Funciona de forma muito estranha no H1.

Mudei para M15 e coloquei a máscara para MODE_OPEN na barra 0(zero).

Em geral, se o observarmos, as ordens pendentes são colocadas onde necessário (quero dizer na M15 TF ), mas as ordens pendentes não são colocadas onde deveriam obviamente abrir. Aqui está uma captura de tela, por exemplo:

Uma articulação com as pausas

borilunad:

Olá Victor! Tenho-o aberto, mas isso me irrita.

Boris, e ele vai... É apenas a primeira etapa... É um longo caminho até a linha de chegada. Todas as condições virão mais tarde, e serão decididas gradualmente. Por enquanto, só precisamos trabalhar as nuances atuais.
 
hoz:


Oi Boris. Bem, ela abre nos mesmos lugares que antes. Onde não se abriu, ainda não se abre. Funciona de forma muito estranha no H1.

Mudei para M15 e ajustei o pulso para MODE_OPEN na barra 0(zero).

Em geral, se o observarmos, as ordens pendentes são colocadas onde for necessário (quero dizer na M15 TF ), mas as ordens pendentes não são colocadas nos locais onde obviamente devem ser abertas. Por exemplo, aqui está uma captura de tela:

Boris, e ele vai... É apenas a primeira etapa... É um longo caminho até a linha de chegada. Todas as condições virão mais tarde, e serão decididas gradualmente. Por enquanto, só precisamos trabalhar as nuances atuais.

Victor, devemos estudar os indicadores e métodos de seu uso na EA. Parece-me que você quer algo que não sabe como implementar.

E outra coisa, você não deve ficar preso a condições muito rígidas, porque o preço certamente não se comportará da maneira que você quer em metade dos casos. Portanto, você tem que imaginar o que poderia fazer nos piores casos.

Francamente falando, ainda não entendo por que é importante que você entre neste bar e não no outro. Na minha opinião, o principal é identificar e utilizar a tendência que começou a tempo, em vez de um certo ponto de entrada. Tente comparar Mashkeys diferentes, e depois aprenda a usá-los como filtros de entradas indesejadas em vez de sinais para entrar, o que muitas vezes falha, e outros indicadores não são melhores!

 
Tente traçar o valor de i_thresholdFromMa e t e observe no testador, e o resultado da comparação também pode ser traçado lá
 
hoz:


Eis o que está nos troncos:

Ou seja, se você acredita nos troncos, a compra é onde deveria estar. Se você olhar para a captura de tela, ela não está lá... Acima eu dei uma captura de tela, você pode ver que a ordem pendente está no lugar errado. O 10 do fastMa está longe de estar lá...


A julgar pelo log, a função OrderSend() coloca o pedido corretamente, ao preço que você o passou
 

PapaYozh:



A julgar pelo log, a função OrderSend() coloca o pedido corretamente, ao preço que você o passa

Sim!!!

10 do fastMa não está nem perto de lá...

Você tem um conjunto de 100 pips.

Mais capturas de tela, está correto.

 
r772ra:

Sim!!!

10 do fastMa não está nem perto de lá...

Você tem um conjunto de 100 p's.

outra captura de tela, é só isso.


Em relação aos 4 dígitos, é 10pp. E nos 5 dígitos, são 100pp. O que há de errado com isso?
 
PapaYozh:

A julgar pelo log, a função OrderSend() coloca o pedido corretamente, pelo preço que você passa para ele


A julgar pelo registro, é correto. Mas se você tentar fazer isso no testador com as mesmas configurações, os pedidos não estão sendo colocados corretamente periodicamente, o que eu já disse. Foi o que eu escrevi. Li o diário de bordo, está tudo bem e claro. Olhando para a captura de tela... (Quando olho para o gráfico,noto que a entrada de compra é inferior à entrada de compra... e isto é contrário à condição.

Mas também é estranho que eu não tenha notado isto no M5, MAS tem sido notado que algumas entradas não foram recebidas.