Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 384

 
Fuk! Scusa!
Come si fa a tenere traccia del numero d'ordine unico se il t.p. lo imposta? Come si fa a cambiarlo?
 
Link_x:

Nel mio esempio: numero di ordine casuale, volume - 5, al prezzo di chiusura, con slippage 0, nessuna freccia.
Nell'esempio del documento: calcolo del numero di ordine per order_id, volume 1, per prezzo di chiusura, con slippage 3, la freccia è rossa.

Intelligente come l'inferno, ma c'è una cosa, Vedi evidenziato, si scrive Symbol().

E il codice, "Come?", è semplice.

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);
       }
    }    
Qualcosa del genere
 
r772ra:
In qualche modo

Ora chiude le posizioni, ma istantaneamente. Facciamo così:
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 ottenere un codice che chiude tutte le posizioni con un profitto potenziale di 50 dollari.
Grazie mille!
Ora tutto è chiaro!
Fico! :)
 
Ciao a tutti, aiutatemi, persone intelligenti. Sto impostando Profit=10 pips (cioè quando ottengo un profitto totale di due coppie pari a 10 pips) entrambe le operazioni aperte dovrebbero essere chiuse. Tuttavia, i miei trade non vengono chiusi. Dov'è l'errore?
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);
}

Intendiamoci, capisco che quando chiudo, l'EA semplicemente non vede gli ordini sul simbolo e il meigico che deve chiudere. E questo è tutto............

Sì, c'era anche una variante di questo. Solo un ordine è stato chiuso e la condizione di profitto di 10 pips non è stata soddisfatta. In breve, era una stronzata.

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);
  }
 }
}


 
Salve, potreste dirmi come far apparire una freccia sul grafico alla barra corrente e al prezzo corrente quando si raggiungono certe condizioni e si attiva un allarme una volta, dando un messaggio? Per esempio: quando un bersaglio mobile incrocia una freccia dal basso verso l'alto con il messaggio "comprare" e una freccia dall'alto verso il basso con il messaggio "vendere", rispettivamente. Grazie in anticipo.
 
alexey1979621:
Ciao a tutti, aiutatemi, persone intelligenti. Sto impostando Profit=10 pips (cioè quando ottengo un profitto totale di due coppie pari a 10 pips) entrambe le operazioni aperte dovrebbero essere chiuse. Tuttavia, i miei trade non vengono chiusi. Dov'è l'errore?

Intendiamoci, capisco che quando chiudo, l'EA semplicemente non vede gli ordini sul simbolo e il meigico che deve chiudere. E questo è tutto............

Sì, c'era un'altra variante. Un trade stava chiudendo solo una posizione, mentre la condizione di profitto di 10 punti non era soddisfatta. Comunque, era una stronzata.


1. Chiudiamo la posizione utilizzando l'asc o bid dello strumento, a cui è stata aperta

non come si fa con OrderClosePrice()

scrivilo in questo modo

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);
         }
      }   
   }
Qualcosa del genere
 
C'è la possibilità che uno stop venga innescato e che quindi le bandiere debbano essere riportate al loro stato originale. Questo problema si risolve rimuovendo l'EA dal grafico?
 
r772ra:

1. Chiudiamo la posizione utilizzando l'asc o bid dello strumento per il quale è stata aperta

non come si fa con OrderClosePrice()

scrivilo in questo modo

Qualcosa del genere

Fatto, ma questo non risolve il problema applicato al gufo di cui sopra. Penso che quando si chiude, l'EA semplicemente non vede gli ordini sul simbolo e le major di cui ha bisogno per chiudere.
 
alexey1979621:
Ciao a tutti! Aiutatemi, persone intelligenti. Sto impostando Profit=10 pips (cioè quando ottengo un profitto totale di due coppie pari a 10 pips) entrambe le operazioni aperte dovrebbero essere chiuse. Tuttavia, i miei trade non vengono chiusi. Dov'è l'errore?

Intendiamoci, capisco che quando chiudo, l'EA semplicemente non vede gli ordini sul simbolo e il meigico che deve chiudere. E questo è tutto............

Sì, c'era anche un'opzione come questa. L'affare è stato chiuso solo una volta e la condizione di 10 pips di profitto non è stata osservata. In breve, era una stronzata.

Errore su errore. Forse questo farà funzionare qualcosa:

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:
Fatto, ma questo non risolve il problema del gufo di cui sopra. Penso che quando si chiude, l'EA semplicemente non vede gli ordini sul simbolo e le major di cui ha bisogno per chiudere.


Non dovrebbe vedere né simbolo né magik, tutto è corretto nel tuo EA. Guardate i log per vedere che tipo di errore produce.
Motivazione: