[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 87

 
FOReignEXchange:


Quem gosta do que gosta. A caligrafia de cada um é diferente. Talvez você tenha acertado, mas eu acho que é desleixado.

Eu não o faria dessa maneira.

Primeiro, não sei bem por que devo declarar uma variável ali e qual é o objetivo nela, também não entendo.

Em segundo lugar, a linha PriceBuy = Ask; está localizada logo após a função OrderSend. E, tanto quanto sei, os cálculos são imediatamente passados para a linha seguinte, assim que esta função termina sua execução. Eu não acho que o preço Ask possa mudar. Tento escrever tudo da maneira mais simples possível, reduzindo o número de caracteres, se isso não interferir no funcionamento normal do programa. Eu posso atribuir um valor da mesma forma que você, não vejo aqui nenhum problema. Eu escrevi o que foi a primeira e mais fácil coisa que me veio à mente.

Uma vez escrevi um Pips Expert Advisor e participei de um concurso no qual o lucro mínimo a ser levado em conta é de 5 pips. Eu defini TP=5, SL=10 no meu EA e fui dar uma caminhada. Cheguei em casa à noite e olhei para o terminal e fiquei desapontado. Meu consultor especializado em Pips fechou a maioria dos meus negócios com lucro, mas o lucro de alguns deles foi de 4 pontos e até 3, e não 5, o que eu precisava. A propósito, o SL às vezes não era 10, mas 11 ou 12 pontos.

Por quê? Tenho certeza de que você sabe a resposta! :D

Aqui está a situação real, na qual parei de contar os preços Ask e Bid como preços de abertura dos pedidos. Se 1-2 pontos não for significativo para você, tudo bem. Para mim, são as pequenas coisas que são importantes.

 
MaxZ:

Por que não? Tenho certeza de que você sabe a resposta! :D

Nah. Primeiro pensei que era porque o spread não era contado.

Houve algum negócio em que o lucro foi de 6-7 pips?

 
FOReignEXchange:
Nah. Primeiro pensei que era porque o spread não tinha sido calculado.

Merda... Para citar a mim mesmo:

MaxZ:

Terceiro: se o Slippage for especificado na função OrderSend trade e quisermos abrir uma ordem de compra, a ordem não será necessariamente aberta exatamente ao preço Ask, já que leva um certo tempo para executar uma ordem de compra dada pela função OrderSend e o preço pode se afastar deste valor.

E a que valor de preço estamos amarrando TP e SL? Para perguntar... O preço mudou, mas TP e SL não se mudaram para lugar algum.

 
MaxZ:

A que valor de preço vamos fixar TP e SL? Para perguntar... O preço mudou, mas TP e SL não se mudaram para lugar algum.

Não posso garantir que minha ortografia esteja absolutamente correta. Mas eu o faço sempre assim quando preciso. Não notei nada de errado com isso.

Não posso dizer nada sobre seu caso, onde você teve uma fixação de lucro inferior a 5 pips, porque eu não vi o código.

 

Foi:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL =  Ask-StopLoss*Point;
   TP =  Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      Alert("Открыт ордер Buy ", Ticket, ".");
      Opn_B = False;
   }
   else
      Alert("Ошибка: ", GetLastError());
}

Tornou-se:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL = Ask-StopLoss*Point;
   TP = Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         
         if (NormalizeDouble(OrderOpenPrice()-OrderStopLoss(), Digits) != NormalizeDouble(StopLoss*Point, Digits))
         {
            SL = OrderOpenPrice()-StopLoss*Point;
            TP = OrderOpenPrice()+TakeProfit*Point;
            
            Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
            if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
               Alert("Ордер Buy ", Ticket, " модифицирован.");
            else
               Alert("Ошибка: ", GetLastError());
         }
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}

O princípio é este. Mas na verdade é um pouco mais complicado que isso...

Quantas linhas? Sério? :)))

 
MaxZ:

Foi:

Tornou-se:

O princípio é este. Mas na verdade é um pouco mais complicado que isso...

Quantas linhas? Sério? :)))


??? Eu não entendo. Onde estão o SL e TP no primeiro exemplo?
 
FOReignEXchange:

??? Eu não entendo. Onde estão o SL e TP no primeiro exemplo?

Eu só mostrei o princípio. Muito bem, então. Adicionado.

MaxZ:

O princípio é este. Mas na verdade é um pouco mais complicado que isso...

Se o pedido não abrir pelo preço indicado, pode haver um erro ao modificarmos o pedido e nós nos depararemos com o mesmo ancinho... É por isso que realmente tentamos modificar o pedido mais de uma vez se ele tiver um Ticket positivo. Nós simplesmente não queremos copiar todo o código. É incômodo. Mas o princípio é explicado.
 
Ah, estou vendo. SL e TP estão de pé diante da função OrderSend. Talvez esse tenha sido o problema?
 
FOReignEXchange:
Ah, estou vendo. SL e TP estão de pé diante da função OrderSend. Talvez esse tenha sido o problema?
Qual poderia ser o problema? Quando SL e TP forem calculados, o preço terá tempo para mudar? ;)))
 
MaxZ:
Qual poderia ser o problema com isso? Quando o SL e TP forem calculados, o preço terá tempo para mudar???? ;))

Eu lhe disse que enquanto a função OrderSend estiver funcionando, o preço pode mudar. Portanto, temos que atribuí-lo depois, quando já tiver mudado.