Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 225

 

Boa noite!

Há muito tempo que utilizo o sistema com comentários para distinguir se modifiquei uma posição mais cedo ou não...

Como posso distinguir correctamente, por exemplo, o facto de que depois de ter colocado uma ordem de compra, mudei SL e TP na posição? Existem alguns campos ou funções específicas de cada posição?

 
websafe25:

Boa noite!

Há muito tempo que utilizo o sistema com comentários para distinguir se modifiquei uma posição mais cedo ou não...

Como posso distinguir correctamente, por exemplo, o facto de que depois de ter colocado uma ordem de compra, mudei SL e TP na posição? Existem alguns campos ou funções específicas de cada posição?

É improvável.

Na minha opinião, não devemos confiar no estado actual da posição ou ordens. É muito mais fiável quando, após o reinício, o sistema forma o estado que deve estar na situação actual do mercado. E depois disso, ajustará a posição e a colocação da encomenda.

 
pronych:

Isto é improvável.

Na minha opinião, não devemos confiar no estado actual de uma posição ou ordens. É muito mais fiável quando o sistema forma o estado que deveria ter na situação actual do mercado após o reinício. E depois ajustará a posição e o gráfico de ordem.

Obrigado pela sua resposta.

Vou agora descrever a minha própria situação.

Quando a posição atinge, digamos, um lucro de 10 pips, quero transferi-la para um sem perdas, ou seja, movo as minhas paragens para o preço de abertura + 3 pips, por exemplo.

A seguinte situação está a acontecer neste momento.

if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        if(Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits)))
          {

Se o lucro numa troca é maior ou igual a 10 pips, eu mudo para. Olucro aumenta, e a modificação acontece uma e outra vez, constantemente. Preciso de mudar uma vez uma troca para sem perdas, e depois saltar por .....

Como é que eu me livro dele? Ou seria melhor não escrever <= mas =? Será possível que enquanto a EA atingir esta operação e começar a comparar o lucro numa troca, não será igual a 10 pips, e o lucro será mais, então não fechará sem perdas?

P.S.> Penso que ao obter uma posição basta observar a que nível do preço é SL, se acima do preço então já modificado...

Decidi desta forma:

if(PositionInfo.Select(_Symbol))
{
   if(PositionInfo.PositionType()==POSITION_TYPE_BUY)
     {
     if(PositionInfo.StopLoss() > PositionInfo.PriceOpen())
       {
         if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_BUY,Lot,PositionInfo.PriceOpen(),NormalizeDouble(SymbolInfo.Ask()+ModifyPips*_Point,_Digits)) >= PositionInfo.Profit())
          {
             Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()+ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()+TP*_Point,_Digits));
          }
       }
     }
   if(PositionInfo.PositionType()==POSITION_TYPE_SELL)
     {
     if(PositionInfo.StopLoss() < PositionInfo.PriceOpen())
       {
      if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits));
        }
       }
     }
}
 
websafe25:

P.S> Penso que ao obter uma posição basta olhar para que nível do preço é SL, se acima do preço então já modificado...

Decidiu desta forma:

O que escreveu depois de P.S. é bastante óbvio. (se precisar muito precisamente, até encontrar o nível de barras altas/baixas desde a última medição)))

Só seria desejável afastarmo-nos do conceito de "lucro" e voltarmo-nos para o conceito de "ponto".

E seria mais bonito considerar não o preço do último negócio(último) (e geralmente esquecer este tipo de preço), mas perguntar/licitar na variante vantajosa;))

 

Boa noite!

Infelizmente não consegui encontrar quaisquer instruções específicas sobre como utilizar um módulo de sinal, por exemplo o RSI. Ou seja, há um registo de como é inicializado, os parâmetros são definidos, mas como simplesmente verificar a condição para comprar na minha EA - não. O que se segue? Como posso verificar se existe uma condição de compra/venda?

/--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(100);
   signal.ThresholdClose(100);
   signal.PriceLevel(0.0);
   signal.StopLevel(SL);
   signal.TakeLevel(TP);
//--- Creating filter CSignalRSI
   CSignalRSI *filter0=new CSignalRSI;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodRSI(PeriodRSI);
   filter0.Applied(PRICE_CLOSE);
   filter0.Weight(0.8);
 
websafe25:

Boa noite!

Infelizmente não consegui encontrar quaisquer instruções específicas sobre como utilizar um módulo de sinal, por exemplo o RSI. Ou seja, há um registo de como é inicializado, os parâmetros são definidos, mas como simplesmente verificar a condição para comprar na minha EA - não. O que se segue? Como posso verificar se existe uma condição para comprar/vender?

O Módulo de Sinais está ligado ao seu Expert Advisor na fase de concepção. Cada módulo de sinais organiza a votação...

Em geral, este artigo é de leitura obrigatória:

Crie um robô comercial em 6 passos!

E finalmente

Gerador de Sinais Comerciais de Indicadores Personalizados

 

A propósito - sou eu o único que pensa que é incorrecto tomar a média aritmética dos sinais no módulo de votação?

double CExpertSignal::Direction(void)
  {
   long   mask;
   double direction;
   double result=m_weight*(LongCondition()-ShortCondition());
   int    number=(result==0.0)? 0 : 1;      // number of "voted"
//---
   int    total=m_filters.Total();
//--- loop by filters
   for(int i=0;i<total;i++)
     {
      //--- mask for bit maps
      mask=((long)1)<<i;
      //--- check of the flag of ignoring the signal of filter
      if((m_ignore&mask)!=0)
         continue;
      CExpertSignal *filter=m_filters.At(i);
      //--- check pointer
      if(filter==NULL)
         continue;
      direction=filter.Direction();
      //--- the "prohibition" signal
      if(direction==EMPTY_VALUE)
         return(EMPTY_VALUE);
      //--- check of flag of inverting the signal of filter
      if((m_invert&mask)!=0)
         result-=direction;
      else
         result+=direction;
// Вот тут бы       number+=filter.Weight();

      number++;
      }
//--- normalization
   if(number!=0)
      result/=number; // Вот туточки???
//--- return the result
   return(result);
  }
 
YAndrey:

A propósito - sou eu o único que pensa que é incorrecto tomar a média aritmética dos sinais no módulo de votação?

Tudo é lógico.

Leia mais artigoMQL5 Wizard: A Nova Versão e aqui está uma foto do artigo:

normalização

 
barabashkakvn:

Tudo isto faz sentido.

Leia mais artigoMQL5 Wizard: A Nova Versão e aqui está uma peça de desenho do artigo:

Será realmente lógico? Se os pesos são 1, então sim, é lógico.

Imaginemos que tenho 2 sinais de filtragem. Um é bom, gordo, em que confio e que estabelece o peso 1 para ele. O outro é pequeno, auxiliar de diversão, portanto o seu peso = 0,1.

O sinal grosso dá um sinal de compra igual a 100, e o pequeno dá um sinal de compra igual a 10. Qual será o sinal total? 50.5??? Não é estranho que o pequeno subestime a situação?

 
YAndrey:

Será que faz sentido? Se os pesos forem 1 cada, então sim, faz sentido.

Imaginemos que tenho 2 filtros de sinal. Um é bom, espesso, no qual confio e que estabelece o peso 1 para ele. Outro é pequeno, auxiliar para diversão, por isso o seu peso = 0,1.

O sinal grosso dá um sinal de compra igual a 100, e o pequeno dá um sinal de compra igual a 10. Qual será o sinal total? 50.5??? Não é estranho que o pequeno subestime tanto a situação???

1. o número total de votos. A sua principal característica é a direcção. A segunda característica é o valor final.
2. Se a sua estratégia desencadear dois sinais: um com força igual a 100*1, e o segundo com força igual a 10*0,1, então deverá rever a sua estratégia em termos de escolha de sinais.