[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 444

 
Elena56:

Durante o processo de otimização, eu verifico o item de visualização e começo a pressionar, após o que o testador de estratégia desaparece, a marca de visualização desaparece e o teste prossegue a um ritmo muito lento. O que isso significa? Eu estava carregando cotações e atualizando. (MT4)

Isto é otimização, não teste.
 

Cavalheiros, ajudem o plz. Eu tenho um problema - não quer escrever texto no final do pedido, me diga por que plz

   OrderSelect(otbH,SELECT_BY_TICKET);
   if(OrderSelect(otbH,SELECT_BY_TICKET)==true)
   { 
      Print("1");
      if(OrderCloseTime()>0)
      {
         Print("2");
         ObjectCreate("ndp"+OrderTicket(),OBJ_TEXT,0,0,0);
         ObjectSet("ndp"+OrderTicket(),OBJPROP_TIME1,TimeCurrent());
         ObjectSet("ndp"+OrderTicket(),OBJPROP_PRICE1,OrderClosePrice());
         ObjectSetText("ndp"+OrderTicket(),OrderProfit(),5,"Arial",Aqua);
      } 
   }    
   
   

otbH - este é o número do bilhete. O interessante é que o número "1" que imprime, mas o número "2" recusa... Não consigo descobrir a razão... porque ele seleciona a ordem. me explique...

 
CLAIN:

Cavalheiros, ajudem a plz. Eu tenho um problema - não quer escrever texto no final do pedido, me diga por que plz

otbH - este é o número do bilhete. O interessante é que o número "1" que imprime, mas o número "2" recusa... Não consigo descobrir a razão... porque ele seleciona a ordem. me explique...


O pedido está fechado ou não?
 

O pedido abre primeiro, depois fecha.

Este roteiro funciona a cada tique, portanto, em um determinado momento, será definitivamente fechado...

Eu seleciono o pedido primeiro pelo bilhete - OrderSelect(otbH,SELECT_BY_TICKET); - ele o selecionará, não importa onde esteja, certo?

E depois deve determinar se é fechado ou aberto. mas, por alguma razão, não...

 
CLAIN:

O pedido abre primeiro, depois fecha.

Este roteiro funciona a cada tique, portanto, em um determinado momento, será definitivamente fechado...

Eu seleciono o pedido primeiro pelo bilhete - OrderSelect(otbH,SELECT_BY_TICKET); - ele o selecionará, não importa onde esteja, certo?

E depois deve determinar se é fechado ou aberto. mas, por alguma razão, não...


Tente selecionar uma ordem fechada
 
Diga-me como, eu não sei como.
 
CLAIN:
Diga-me como, eu não sei como.

   int total=OrdersHistoryTotal();
   for (int i=total-1;i>=0;i--) 
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==MagicNumber )
            {
               // Ваши действия с ордером
            }
         }
      }
   }
 

A questão é - o preço de abertura é calculado na travessia de dois movimentos (exagerado), no teste - tudo está bem, mas quando se coloca na demonstração, as aberturas são falsas (porque durante a formação de um preço de barra dentro pulando de min para max), portanto a idéia de levar em conta a travessia somente quando a barra é formada, ou seja, a barra é formada (viu a travessia) e depois a próxima entrada no mercado, levando em conta a travessia.

 
DOCTORS:

A questão é esta: o preço de abertura é calculado cruzando dois controles deslizantes (exagerado), no teste tudo está OK, mas quando você coloca na demonstração, as aberturas são falsas (porque durante a criação de uma barra o preço dentro salta de min para max), portanto a idéia é considerar a travessia somente depois que a barra é formada, ou seja, a barra é formada (vimos a travessia) e então a próxima entrada no mercado é feita com a travessia.

É estranho por que está tudo bem no testador - no testador a barra de zero também não é formada e também haverá falsos cruzamentos.

Procure por crossovers na 1ª e 2ª barras. Se no segundo МА1 <= МА2, enquanto no primeiro МА1 > МА2, isso significa que МА1 cruzou МА2 de baixo para cima. Para cima para baixo, é o contrário.

Faça a comparação apenas por subtração:

   double MA1=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,1);
   double MA2=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,2);
   if (NormalizeDouble(MA1-MA2,Digits)<=0)
   if (NormalizeDouble(MA1-MA2,Digits)>0) {
      // MA1 пересекла MA2 снизу-вверх
      }

Para cima para baixo, vice versa.

Você pode compará-lo não a zero, mas a algum valor mínimo, por exemplo, 0,1*Ponto

 
artmedia70:

É estranho por que está tudo bem no testador - no testador a barra de zero também não é formada e também haverá falsos cruzamentos.

Procure por crossovers na 1ª e 2ª barras. Se no segundo MA1 <= MA2 e no primeiro MA1 > MA2, então MA1 cruzou MA2 de baixo para cima. Para cima para baixo, é o contrário.

Faça a comparação apenas por subtração:

Para cima para baixo, vice versa.

Você pode compará-lo não a zero, mas a algum valor mínimo, por exemplo, 0,1*Ponto


Muito obrigado!