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

 
Dozol:


Roger, eu não consigo entender!

Lançou uma linha horizontal no gráfico, fixou seu preço, apagou a linha - não é mais necessária. Imediatamente estabelecemos um pedido a esse preço.

Qual é o erro? E por que uma Sell Stop não abre?

Por que continuar seguindo o preço se eu só preciso do valor do preço da linha horizontal?

Explique!!! Socorro! Mais detalhes, por favor!

A Sellstop estava errada, ela vai abrir.

Agora sobre as linhas. Quando eu negocio ao vivo, olho para o gráfico e coloco uma linha horizontal, as condições são apropriadas, a linha é apagada e o pedido é aberto. Como isso é melhor do que um simples hotkey script? No testador, para traçar a linha, você tem que permitir a visualização e observar o gráfico. Não entendo nem mesmo porque devemos adicioná-lo ao testador.

 
borilunad:
Desculpe! Então suba para o penico e vá dormir! Tenha um bom dia! ;)
Certo. Eu mesmo vou descobrir, não é um enigma tão insolúvel. Mas até agora só consigo pensar em muletas. O método da muleta não é um bom método...
 
Boas pessoas, podem me dizer o que está errado. Em um comércio de venda, que se abre no primeiro tick da barra 0, o stop loss deve ser colocado 30 pips (5 dígitos) acima do alto da primeira vela. Escreveu assim, mas a parada de perda não está definida de forma alguma.
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

E em seus dedos? Como o tempo e o preço podem dizer a você para fechar o processo? Eu mesmo posso pensar nisso, mas são 7,43 da manhã e ainda não fui para a cama.


Se for 7,43 e eu não tiver ido para a cama... Então, vou assumir que é graal!
 
alexey1979621:
Boa gente, diga-me o que está errado. Em um comércio de venda, que se abre no primeiro tick da barra 0, o stop loss deve ser colocado 30 pips (5 dígitos) acima do alto da primeira vela. Escreveu assim, mas não se deixa de perder nada.

StopLoss = iHigh(Symbol(),0,1)+30*Point;

Este é o nível de stop loss que você quer, por exemplo, 1.5000+30*0.00001 = 1.5003.


SL= Price + StopLoss*Point; 
Por que você acrescentaria StopLoss*Point ao preço(1.5003*0.00001=0.000015). SL torna-se quase igual ao preço, é por isso que nenhum StopLoss é definido.
 
O stop loss ainda não está definido, mas o take profit funciona. Pare com as perdas e pegue o código de lucro anexado
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1. Procure a última posição fechada (MODE_HISTORY).
2. Se fechou no (ou perto do) takeaway --> Lembre-se de seu tempo aberto -->
3. Olhe todas as posições abertas (MODE_TRADES) e compare seu tempo aberto com o tempo lembrado (a partir do ponto 2) --> Se o tempo lembrado de abertura da posição fechada pela marca (a partir do ponto 2) for o mais longo desde o tempo de abertura de outras posições abertas --> Isso significa que a última posição aberta foi fechada pela marca -->
4. Cortar/eliminar todo o resto.


Hm. Parece estar escrito. Mas o resultado não é o mesmo.

Eis o que saiu para mim:

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
Boas pessoas, podem me dizer o que está errado. Em um comércio de venda, que se abre no primeiro tick da barra 0, o stop loss deve ser colocado 30 pips (5 dígitos) acima do alto da primeira vela. Escreveu desta forma, mas o fim da perda não é de forma alguma colocado.

O que você tem aqui não é nada. Vamos começar com o fato de que o short fecha sempre na ASC, não na BID.
 
alexey1979621:
O stop loss ainda não está definido, mas o take profit funciona. Pare com as perdas e pegue o código de lucro anexado

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


Hmm. Parece ter sido escrito. Mas a saída está errada...

Isto é o que eu tenho:

Ao procurar a última ordem fechada, a mais recente deve ser encontrada primeiro, mas a verificação para fechá-la na tomada deve ser retirada do laço, caso contrário, ela verifica cada ordem fechada para fechar na tomada e, se for o caso, lembra a hora da primeira fechada na tomada, não a mais recente.
Razão: