Pergunta lógica no código de saída comercial
Results 1 to 5 of 5

Thread: Pergunta lógica no código de saída comercial

  1. #1
    Qual afirmação lógica é a codificação preferível?


    if (OrderType() == OP_BUY (iOpen(NULL,1,1) iClose(NULL,1,1) lt; NormalizeDouble(OrderOpenPrice()-StopLoss),3)) )
    resultado = OrderClose( OrderTicket(), OrderLots(), Bid, 50, Red );

    ou

    if (OrderType() == OP_BUY (iOpen(NULL,1,1) lt; NormalizeDouble(OrderOpenPrice()-StopLoss),3))
    (iClose(NULL,1,1) lt; NormalizeDouble(OrderOpenPrice()-StopLoss),3)))
    resultado = OrderClose( OrderTicket(), OrderLots(), Bid, 50, Red );


    Estou usando o primeiro acima muito bem (pelo menos ele compila e executa negociações bem), mas queria saber se o segundo é melhor ou seria executado de forma diferente? Alguma opinião sobre as diferenças lógicas entre os dois?

  2. #2
    por que você usa normalizeddouble para preços? Não faz sentido (por que você quer normalizar bid/ask/orderopenprice/ordercloseprice/etc.?), veja também
    http://forum.mql4.com/45425Veja também
    http://forum.mql4.com/45425#564188se você quiser normalizar os preços, você pode usar a seguinte função:/O preço de abertura para a ordem pendente deve ser ajustado para ser um múltiplo do ticksize, não do ponto, e em metais eles não são os mesmos. Código inserido double NormalizePrice(string symbol, double price) { if (price==0.00000000) return(0.0); double ts = MarketInfo(símbolo,MODE_TICKSIZE); return(MathRound(preço/ts)*ts ); } mesmo para tamanhos de lote:/O tamanho do lote deve ser ajustado para ser um múltiplo de lotstep, que pode não ser uma potência de dez em alguns corretores/veja também a função original de WHRoeder,
    http://forum.mql4.com/45425#564188, fxdaytrader Código inserido double NormalizeLots(string symbol, double lot) { if (MathAbs(lots)lt;MarketInfo(symbol,MODE_MINLOT)) return(MarketInfo(symbol,MODE_MINLOT)); if (MathAbs(lotes)gt;MarketInfo(símbolo,MODE_MAXLOT) ) return(MarketInfo(símbolo,MODE_MAXLOT)); double ls = MarketInfo(símbolo,MODE_LOTSTEP); lotes=MathRound(lotes/ls)*ls; return(MathMin(MarketInfo(symbol,MODE_MAXLOT),Math Max(MarketInfo(symbol,MODE_MINLOT),lots)));/verifica se lotes gt;= min. lotes lt;= max. lotes, fxdaytrader }//double NormalizeLots(símbolo de string, lotes duplos) {

  3. #3

    Qual afirmação lógica é a codificação preferível? if (OrderType() == OP_BUY (iOpen(NULL,1,1) iClose(NULL,1,1) lt; NormalizeDouble(OrderOpenPrice()-StopLoss),3)) ) result = OrderClose( OrderTicket(), OrderLots( ), Licitação, 50, Vermelho); ou if (OrderType() == OP_BUY (iOpen(NULL,1,1) lt; NormalizeDouble(OrderOpenPrice()-StopLoss),3)) (iClose(NULL,1,1) lt; NormalizeDouble(OrderOpenPrice()-StopLoss ),3))) resultado = OrderClose( OrderTicket(), OrderLots(), Bid, 50, Red ); Estou usando o primeiro acima muito bem (pelo menos ele compila e executa negócios bem), ...
    Eu não acredito que seu primeiro funcionará corretamente Pessoalmente, eu faria isso Código Inserido if (OrderType()==OP_BUY MathMax(iOpen(NULL,1,1),iClose(NULL,1,1))lt; NormalizeDouble(OrderOpenPrice()-StopLoss,3))

  4. #4

    {quote} Eu não acredito que seu primeiro funcionará corretamente Pessoalmente, eu faria isso se (OrderType()==OP_BUY MathMax(iOpen(NULL,1,1),iClose(NULL,1,1))lt ;NormalizeDouble(OrderOpenPrice()-StopLoss,3) )
    O primeiro está trabalhando em negociação ao vivo, só não tenho certeza ainda se está realmente verificando os dois valores antes de fechar, mas está compilando perfeitamente e fechando negócios em torno dos preços sugeridos. Eu só preciso esperar e verificar para ambos. Estou tentando eliminar possíveis picos de preços errôneos apenas na abertura ou no fechamento da barra, o que criaria estragos com este EA que possui várias posições abertas. Sua sugestão de mathmax parece interessante. Eu posso fazer uma cópia massiva, repastando e testando com ele. Pensando bem depois de um minuto ou dois, o mathmax não vai fazer o que eu quero que ele faça. Eu quero que ele verifique os valores duas vezes em um minuto e o preço esteja abaixo acima ou abaixo em ambas as instâncias, não apenas na instância máxima. Obrigado de qualquer maneira pela sugestão, acho que tenho que tentar testar com minha segunda versão do código para ver quaisquer diferenças nas negociações de saída.

  5. #5

    por que você usa normalizeddouble para preços? Não faz sentido (por que você quer normalizar bid/ask/orderopenprice/ordercloseprice/etc.?), veja também
    http://forum.mql4.com/45425{
    Pelo que li nos posts acho que a sugestão é normalizar antes de enviar os pedidos. Existem razões pelas quais eu normalizaria um preço, por exemplo, quando o preço é calculado em preço variável. Acho que o que você está dizendo é que normalizar o bid/ask/price puro baseado no servidor é redundante. Mas se o cálculo do preço do EA for bid/ask/open mais um valor variável com casas decimais excessivas, normalizar para o tamanho de lote/passo de lote equivalente para o corretor é a única maneira de enviar o pedido corretamente. Se eu estiver enganado na minha lógica aqui, por favor me avise.

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.