[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 591

 
vik-777:

Ajude-me a resolver um problema

Eu recolho amostras de todos os itens fechados

para (int i=0; i<OrdersHistoryTotal(); i++)// Para todas as encomendas
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==verdadeiro)

depois filtrar por número mágico

se (OrderMagicNumber()==12)

O filtro satisfaz 3 posições, mas preciso apenas da última fechada

não consegue descobrir como deixar apenas o último?

Obrigado

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
O que é relevante para sua pergunta é sublinhado.
 

Mais uma vez, muito necessário.

Ajude-me a resolver o problema.

Estou selecionando por todas as posições fechadas

para (int i=0; i<OrdersHistoryTotal(); i++)// em todas as ordens do terminal
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)===verdadeiro)

depois filtrar por número mágico

se (OrderMagicNumber()==12)

o filtro corresponde a 3 posições, mas só preciso da última fechada

Não consegue descobrir como deixar apenas o último?

Obrigado

 
- É bom ser burro! Tumtz-tumtz (letra de uma canção)
 

Por favor, ajude! Preciso dele para abrir o pedido imediatamente após fechar o antigo, a preço de Tp ou SL.

#direitos autorais "Copyright © 2010, MetaQuotes Software Corp.
#link da propriedade "http://www.metaquotes.net"
#property show_confirmar
externo int MaxRisk=3;
bool externo Comprar=falso; // para abrir um pedido de compra
bool externo Sell=true; // para abrir uma ordem de venda.
número mágico externo interno=7749;
TP externo=210;
externo inttern SL=420;

{
double point=MarketInfo(Symbol(),MODE_POINT);//ponto de solicitação
duplo Free=AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
lote duplo =MathFloor(Livre*MaxRisk/100/One_Lot/Step)*Step;
int pos,total=OrdensTotal();
//----

if(Buy===true && OrderTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point, "777"+ Symbol(), MagicNumber, 0, DarkGreen);

Comprar=falso;
}
if(Sell===true && OrderTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point, "4949"+ Symbol(), MagicNumber, 0, DarkGreen);

Sell=false;
}

para (pos=0; pos<total; pos+++)
if(OrderSelect(pos,SELECT_BY_POS )==verdadeiro)

if(OrdersTotal()==OP_BUY)
if(PRICE_CLOSE==OrderTakeProfit()) Buy=true;
if(PRICE_CLOSE===OrderStopLoss()) Sell=true;

}
}

if(OrderSelect(pos,SELECT_BY_POS )==verdadeiro)
se (OrderTotal()==OP_SELL)
{
if(PRICE_CLOSE==OrderStopLoss()) Buy=true;
if(PRICE_CLOSE===OrderTakeProfit()) Sell=true;

}
} }

//----
retorno(0);
}
//+------------------------------------------------------------------+




 

Pessoal, aqui vai uma pergunta, um EA tenta abrir um pedido, mas o preço muda e exibe um preço errado, como posso contorná-lo, então ele tenta comprar até comprar?

void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
   if (error==-1) //неудачная покупка OK
   {  
      ShowERROR(error,0,0);
   }

Costumava ser.

Bid,3,CLR_NONE

Acrescentei 30 porque tenho um sinal de 5, mas é inútil.

 
vik-777:

Mais uma vez, muito necessário.

Ajude-me a resolver o problema.

Estou recolhendo amostras de todos os itens fechados.



Comece no final, depois o primeiro a combinar é o primeiro.

for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==verdadeiro)


 
Craft:

Ainda há mais um incômodo, há seções onde há apenas um fechamento de uma posição e não uma inversão, embora as condições para uma parada e abertura de uma nova posição sejam as mesmas.


Estas situações podem ocorrer porque as condições de compra e venda no Expert Advisor não são mutuamente exclusivas. Tente rastrear os valores das variáveis requeridas no testador de acordo com

if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
   Print("переменная=", значение);
}
 
Pyxlik2009:

Pessoal, aqui vai uma pergunta, um EA tenta abrir um pedido, mas o preço muda e exibe um preço errado, como posso contorná-lo, então ele tenta comprar até comprar?

Costumava ser.

Acrescentei 30 porque tenho um sinal de 5, mas é inútil.

Faça um pedido enquanto(true), verifique 135 erros e depois RefreshRates(). Veja, há scripts com exemplos no pacote com o terminal, tudo é explicado lá.
 
alsu:

Isto precisa ser investigado em detalhes, tais situações podem surgir porque as condições de abertura de compra e venda na EA não são mutuamente exclusivas. Tente rastrear os valores das variáveis requeridas no testador de acordo com as linhas de

OK, em que parte do código deve ser inserida, como aplicar na prática?
 
SergNF:

O que é relevante para sua pergunta é sublinhado.
então seleciono a última ordem fechada e preciso da última fechada com o mágico, por exemplo, são as linhas 3,6 e 9, portanto preciso da linha 3, pois é a última fechada com o mágico
Razão: