Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 384

 
Fuk! Entschuldigung!
Wie behalten Sie die eindeutige Auftragsnummer im Auge, wenn der Disponent sie festlegt? Wie kann man es ändern?
 
Link_x:

In meinem Beispiel: zufällige Auftragsnummer, Volumen - 5, zum Schlusskurs, mit Slippage 0, kein Pfeil.
Im Beispiel des Dokuments: Berechnung der Auftragsnummer nach order_id, Volumen 1, nach Schlusskurs, mit Slippage 3, Pfeil ist rot.

Clever wie die Hölle, aber es gibt eine Sache, siehe hervorgehoben, Sie schreiben Symbol().

Und der Code, "Wie?", ist einfach.

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);
       }
    }    
Etwa so
 
r772ra:
Irgendwie

Wow! Jetzt schließt er die Positionen, aber sofort. So geht's:
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);
}
}   
}

Und erhalten Sie einen Code, mit dem Sie alle Positionen mit einem potenziellen Gewinn von 50 $ schließen können.
Herzlichen Dank!
Jetzt ist alles klar!
Super! :)
 
Hallo zusammen! Helft mir, kluge Leute. Ich stelle Profit=10 Pips ein (d.h. wenn ich einen Gesamtgewinn von zwei Paaren in Höhe von 10 Pips erhalte), sollten beide offenen Geschäfte geschlossen werden. Meine Geschäfte werden jedoch nicht geschlossen. Wo liegt der Fehler?
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);
}

Wohlgemerkt, ich verstehe, dass, wenn ich zu schließen, die EA nur nicht sehen, die Aufträge auf das Symbol und die meigic, dass es zu schließen muss. Und das war's............

Ja, es gab auch eine Variante davon. Nur ein Auftrag wurde geschlossen, und die Gewinnbedingung von 10 Pips wurde nicht erfüllt. Kurz gesagt, es war Blödsinn.

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


 
Hallo, könnten Sie mir bitte sagen, wie man einen Pfeil auf dem Diagramm auf dem aktuellen Balken und auf dem aktuellen Preis erscheinen lässt, wenn bestimmte Bedingungen erreicht werden und ein Alert einmal ausgelöst wird, der eine Nachricht gibt? Zum Beispiel: Wenn ein bewegliches Ziel einen Pfeil von unten nach oben mit der Meldung "Kaufen" und einen Pfeil von oben nach unten mit der Meldung "Verkaufen" kreuzt. Vielen Dank im Voraus.
 
alexey1979621:
Hallo zusammen! Helft mir, kluge Leute. Ich stelle Profit=10 Pips ein (d.h. wenn ich einen Gesamtgewinn von zwei Paaren in Höhe von 10 Pips erhalte), sollten beide offenen Geschäfte geschlossen werden. Meine Geschäfte werden jedoch nicht geschlossen. Wo liegt der Fehler?

Wohlgemerkt, ich verstehe, dass, wenn ich zu schließen, die EA nur nicht sehen, die Aufträge auf das Symbol und die meigic, dass es zu schließen muss. Und das war's............

Ja, es gab noch eine weitere Variante. Es wurde nur eine Position geschlossen, während die Bedingung des Gewinns von 10 Punkten nicht erfüllt war. Wie auch immer, es war Blödsinn.


1. Wir sollten die Position zum Geld- oder Briefkurs des Instruments schließen, für das sie eröffnet wurde.

nicht wie bei OrderClosePrice()

Schreiben Sie es so

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);
         }
      }   
   }
Etwa so
 
Es besteht die Möglichkeit, dass ein Halt ausgelöst wird und die Flaggen dann wieder in ihren ursprünglichen Zustand zurückgesetzt werden müssen. Lässt sich dieses Problem lösen , indem man den EA aus dem Diagramm entfernt?
 
r772ra:

1. Wir schließen die Position mit dem asc oder bid des Instruments, für das sie eröffnet wurde

nicht wie bei OrderClosePrice()

Schreiben Sie es so

Etwa so:

Erledigt, aber das löst das Problem in Bezug auf die oben genannte Eule nicht. Ich denke, dass der EA beim Schließen einfach nicht die Aufträge auf dem Symbol und den Majors sieht, die er zum Schließen benötigt.
 
alexey1979621:
Hallo zusammen! Helft mir, kluge Leute. Ich stelle Profit=10 Pips ein (d.h. wenn ich einen Gesamtgewinn von zwei Paaren in Höhe von 10 Pips erhalte), sollten beide offenen Geschäfte geschlossen werden. Meine Geschäfte werden jedoch nicht geschlossen. Wo liegt der Fehler?

Wohlgemerkt, ich verstehe, dass, wenn ich zu schließen, die EA nur nicht sehen, die Aufträge auf das Symbol und die meigic, dass es zu schließen muss. Und das war's............

Ja, es gab auch eine solche Option. Das Geschäft wurde nur einmal geschlossen und die Gewinnbedingung von 10 Pips wurde nicht eingehalten. Kurz gesagt, es war Blödsinn.

Fehler auf Fehler. Vielleicht klappt es ja damit:

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:
Erledigt, aber das löst nicht das Problem mit der Eule oben. Ich denke, beim Schließen sieht der EA einfach nicht die Aufträge auf dem Symbol und den Majors, die er schließen muss.


Es sollte weder Symbol noch Magie zu sehen sein, alles ist korrekt in Ihrem EA. Schauen Sie sich die Protokolle an, um zu sehen, welche Art von Fehler er produziert.
Grund der Beschwerde: