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 384

 
Fuk! Desculpe!
Como você mantém registro do número de pedido único se o número de pedido único é definido pelo t.p.? Como você muda isso?
 
Link_x:

No meu exemplo: número de ordem aleatório, volume - 5, a preço próximo, com deslize 0, sem seta.
No exemplo do documento: cálculo do número de pedido por order_id, volume 1, por preço fechado, com slippage 3, a seta é vermelha.

Esperto como o inferno, mas há uma coisa, Veja destacado, você escreve Symbol().

E o código, "Como?", é simples.

for(int i=OrdersTotal()-1;i>=0;i--)  //
    {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
     if(OrderType()==OP_BUY) price=Bid;
     else                    price=Ask;
     OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
       }
    }    
Algo como isto
 
r772ra:
De alguma forma

Uau! agora fecha posições, mas instantaneamente. Vamos fazer isto:
if(AccountProfit() > 50)
{
for(int i=OrdersTotal()-1;i>=0;i--) 
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType()==OP_BUY) price=Bid;
else                    price=Ask;
OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
}
}   
}

E obter um código que fecha todas as posições com um lucro potencial de 50 dólares.
Muito obrigado!
Agora tudo está claro!
Legal! :)
 
Olá a todos! Ajudem-me, pessoas inteligentes. Estou definindo Lucro=10 pips (ou seja, quando eu tiver um lucro total de dois pares iguais a 10 pips) ambos os negócios abertos devem ser fechados. No entanto, meus negócios não estão sendo fechados. Onde está o erro?
extern double lotAU=0.01;
extern double lotEA=0.01;
extern double Profit=10;
extern string Сomment           = "KVAZ_EURAUD_AUDUSD";
extern int Magic                = 1111;

int EASell, EABuy, AUSell, AUBuy;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
 }
}

double LineEA = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1); // Первый инструмент
double LineAU = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент

if(NumberOfPositions("EURAUD")==0 && LineEA > 0.1 && LineAU < -0.1)
    {
       EASell = OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("AUDUSD")==0 && LineEA > 0.1 && LineAU < -0.1)
    {
       AUSell = OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("EURAUD")==0 && LineEA < -0.1 && LineAU > 0.1)
    {
       EABuy = OrderSend(symEA,OP_BUY,lotEA,bidEA,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("AUDUSD")==0 && LineEA < -0.1 && LineAU > 0.1)
    {
       AUBuy = OrderSend(symAU,OP_BUY,lotAU,bidAU,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
    
  return(0);
  }
//+------------------------------------------------------------------+

int NumberOfPositions(string sy="", int op=-1, int mn=1111) {      //|  Параметры:                                                                |
                                                                  //|    sy - наименование инструмента   (""   - любой символ,                   |
                                                                  //|                                     NULL - текущий символ)                 |
                                                                  //|    op - операция                   (-1   - любая позиция)                  |
                                                                  //|    mn - MagicNumber                (-1   - любой магик)                    
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}

Mas, ao fechar, eu entendo que a EA simplesmente não vê as ordens no símbolo e o meigo que precisa fechar. E é isso............

Sim, também havia uma variante disto. Apenas um pedido foi fechado, e a condição de lucro de 10 pips não foi atendida. Em resumo, era uma besteira.

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!= Symbol()  || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}


 
Olá, você poderia me dizer como fazer uma seta aparecer no gráfico na barra atual e ao preço atual quando certas condições são atingidas e um alerta é acionado uma vez, dando uma mensagem? Por exemplo: quando um alvo em movimento cruza uma seta de baixo para cima com a mensagem "comprar" e uma seta de cima para baixo com a mensagem "vender", respectivamente. Obrigado de antemão.
 
alexey1979621:
Olá a todos! Ajudem-me, pessoas inteligentes. Estou definindo Lucro=10 pips (ou seja, quando eu tiver um lucro total de dois pares iguais a 10 pips) ambos os negócios abertos devem ser fechados. No entanto, meus negócios não estão sendo fechados. Onde está o erro?

Mas, ao fechar, eu entendo que a EA simplesmente não vê as ordens no símbolo e o meigo que precisa fechar. E é isso............

Sim, havia mais uma variante. Um comércio estava fechando apenas uma posição, enquanto a condição de lucro de 10 pontos não era cumprida. De qualquer forma, era uma besteira.


1. Fechamos a posição utilizando o pedido ou licitação do instrumento, no qual ele é aberto

não como você faz com OrderClosePrice()

escreva desta forma

if(prof>=Profit)
   {
  for(int i=OrdersTotal()-1;i>=0;i--) 
      {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
     double AS=MarketInfo(OrderSymbol(), MODE_ASK);
     double BI=MarketInfo(OrderSymbol(), MODE_BID);

       if(OrderType()==OP_BUY) price=BI;
       else                    price=AS;

       OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
         }
      }   
   }
Algo como isto
 
Há a possibilidade de uma parada ser acionada e então as bandeiras precisam ser repostas ao seu estado original. Este problema é resolvido retirando a EA do quadro?
 
r772ra:

1. Fechamos a posição usando o asc ou o lance do instrumento para o qual ele é aberto

não como você faz com OrderClosePrice()

escreva desta forma

Algo parecido com isto

Feito, mas isso não resolve o problema como aplicado à coruja acima. Acho que ao fechar, a EA simplesmente não vê as ordens sobre o símbolo e as majors que precisa fechar.
 
alexey1979621:
Olá a todos! Ajudem-me, pessoas inteligentes. Estou definindo Lucro=10 pips (ou seja, quando eu tiver um lucro total de dois pares iguais a 10 pips) ambos os negócios abertos devem ser fechados. No entanto, meus negócios não estão sendo fechados. Onde está o erro?

Mas, ao fechar, eu entendo que a EA simplesmente não vê as ordens no símbolo e o meigo que precisa fechar. E é isso............

Sim, também havia uma opção como esta. O negócio foi fechado apenas uma vez e a condição de lucro de 10 pips não foi respeitada. Em resumo, era uma besteira.

Erro no erro. Talvez isto faça algo funcionar:

extern double lotAU=0.01;
extern double lotEA=0.01;
extern double Profit=10;
extern string EXP_Comment           = "KVAZ_EURAUD_AUDUSD";
extern int Magic                = 1111;

int EASell, EABuy, AUSell, AUBuy;
string gsa_SMB[2];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[0] = "EURAUD";
  gsa_SMB[1] = "AUDUSD";
   return (0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
    int    li_N;
    double prof = 0., ld_Price = 0.;

    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        OrderSelect (i,SELECT_BY_POS);
        li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB);
        if (li_N < 0) continue;
        if (OrderMagicNumber() != Magic) continue;
        prof += OrderProfit();
        Print ("Profit=", prof);
    }
    if (prof>=Profit)
    {
        for (i=OrdersTotal()-1; i>=0; i--)
        {
            OrderSelect (i, SELECT_BY_POS);
            li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB);
            if (li_N < 0) continue;
            if (OrderMagicNumber() != Magic) continue;
            if (OrderType() == OP_BUY) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID);
            else if (OrderType() == OP_SELL) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK);
            OrderClose (OrderTicket(), OrderLots(), ld_Price, 5);
        }
    }
    double bidEA = MarketInfo ("EURAUD", MODE_BID),
           askEA = MarketInfo ("EURAUD", MODE_ASK),
           bidAU = MarketInfo ("AUDUSD", MODE_BID),
           askAU = MarketInfo ("AUDUSD", MODE_ASK),
           LineEA = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1), // Первый инструмент
           LineAU = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент

    if (NumberOfPositions (gsa_SMB[0], -1, Magic) == 0)
    {
        if (LineEA > 0.1) if (LineAU < -0.1)
        {EASell = OrderSend (gsa_SMB[0], OP_SELL, lotEA, bidEA, 3, 0, 0, EXP_Comment, Magic, 0, Red);}
        if (LineEA < -0.1) if (LineAU > 0.1)
        {EABuy = OrderSend (gsa_SMB[0], OP_BUY, lotEA, askEA, 3, 0, 0, EXP_Comment, Magic, 0, Blue);}
    }
    if (NumberOfPositions (gsa_SMB[1], -1, Magic) == 0)
    {
        if (LineEA < -0.1) if (LineAU > 0.1)
        {AUBuy = OrderSend (gsa_SMB[1], OP_BUY, lotAU, askAU, 3, 0, 0, EXP_Comment, Magic, 0, Blue);}
        if (LineEA > 0.1) if (LineAU < -0.1)
        {AUSell = OrderSend (gsa_SMB[1], OP_SELL, lotAU, bidAU, 3, 0, 0, EXP_Comment, Magic, 0, Red);}
    }
    return (0);
}
//+------------------------------------------------------------------+
int fGet_NumSymbol (string fs_Symbol, string ar_SMB[])
{
    for (int li_IND = 0; li_IND < 2; li_IND++)
    {if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (-1);
}
//+------------------------------------------------------------------+

???

 
alexey1979621:
Feito, mas isso não resolve o problema com a coruja acima. Acho que ao fechar, a EA simplesmente não vê as ordens sobre o símbolo e as majors que precisa fechar.


Não deve ver nem símbolo nem magik, tudo está correto em sua EA. Olhe para os registros para ver que tipo de erro produz.
Razão: