[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 394

 

Alles klar!!!! Wenn es keine gewünschten Aufträge gibt, bleibt X gleich Null mit der gewünschten magischen Zahl und die Aufträge werden eröffnet. Wenn es welche gibt, ist X gleich 2 und es werden keine weiteren Aufträge eröffnet.

Wo liegt sonst das Problem?

- Im allerersten Moment wählen Sie mit der Funktion OrderSelect einen Auftrag aus, der noch nicht existiert.

in der ersten Schleife for(int Uy=OrdersTotal();Uy<=-1;Uy--) So was, gut der Zyklus läuft mehr für die Hoffnung, dann änderte ich es auf 0, gibt es keine Änderung in der Arbeit, das sind alles keine Fehler, sie nicht ändern, ich entschuldige mich.

 
Es wurde ein Alert eingefügt, um die Arbeit des Zyklus zu verfolgen. Ich verstehe gar nichts. Die Variable, die in der Schleife ist, nur einmal, am Anfang, mit einem Wert von 0, und dann verkaufen Stop 0 und kaufen Stop 130, die auch überraschend ist, sind sie symmetrisch!!!! Und nach 2,5 m der Inschrift sagt bereits Fehler 148 (Broker verbietet viele Aufträge)
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Oh, was für ein Unsinn. Und am Anfang stimmt jedes Mal das Datum nicht, etwa 49 Mal. Ja!!!! X bleibt immer bei 0 und es wird gut geschrieben. In 2 Aufträgen.

 
PRICE_OPEN !!!! - Sie können diesen Preis nicht verwenden! Sie funktioniert nur bei Indikatoren. Verwenden Sie Bid oder Ask.
 
Dimka-novitsek:

Alles klar!!!! Wenn es keine gewünschten Aufträge gibt, bleibt X gleich Null mit der gewünschten magischen Zahl und die Aufträge werden eröffnet. Wenn es welche gibt, ist X gleich 2 und es werden keine weiteren Aufträge eröffnet.

Wo liegt sonst das Problem?

- Im allerersten Moment wählen Sie mit der Funktion OrderSelect einen Auftrag aus, der noch nicht existiert.

in der ersten Schleife for(int Uy=OrdersTotal();Uy<=-1;Uy--) So was, die Schleife läuft mehr für die Hoffnung, dann änderte ich es auf 0, gibt es keine Änderung in der Arbeit, das sind keine Fehler, sie nicht ändern, ich entschuldige mich.

Wie kann sie länger laufen als ?

Unabhängig davon, wie viele Aufträge offen sind, ist die Bedingung Uy<=-1 nicht sofort erfüllt, da die Anzahl der Aufträge sofort größer oder gleich Null ist

 

Helfen Sie mir, einen Fehler zu finden,

Dankeschön

void TrailPositions()
{
//-----
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


Wenn die Ticks laufen, das Icon von EA "lächelt", EA sollte Geschäfte machen (d.h. die Bedingungen dafür erscheinen), aber er macht sie nicht, dann ist es notwendig, zu debuggen.

Ordnen Sie den Befehl price() im Code des EA, insbesondere an den Stellen, an denen verglichen wird, und sehen Sie nach, was genau verglichen wird. Vielleicht haben Sie einen Vergleich über die Gleichheit von Variablen mit dem Typ double und das Ergebnis des Vergleichs ist immer falsch, während Sie davon ausgehen, dass die Variablen gleich sind.

Vielen Dank für die Tipps!!! Ich habe mein Problem gelöst. Es stellte sich heraus, dass der Broker, den ich brauchte, um eine Marktorder zu platzieren, d.h. gemäß den Bedingungen, nicht die Möglichkeit hat, gleichzeitig Stop Levels zu platzieren. Jetzt werden die Aufträge ohne Stopp-Levels platziert, und ich setze die Stopp-Levels unmittelbar nach jedem Auftrag. Ich habe dabei ein Problem: Nur ein sehr kleiner Teil der Aufträge wird geändert, während die meisten Aufträge in der Sektion "Expert Advisors" die folgenden Ergebnisse anzeigen:

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: öffnen #30906670 verkaufen 0.01 CLM1 bei 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: ungültiges Ticket für OrderModify-Funktion
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: offen #30906787 kaufen 0.01 ESM1 bei 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: Ungültiges Ticket für OrderModify-Funktion

Hier ist der Text des Codes:

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
zurück(0);

}

Und es ist der erste Auftrag, der nach dem Start des Expert Advisors geändert wird!

Natürlich habe ich die Reihenfolge im Code falsch geändert... Bitte um Rat!

 
Kann mir jemand mit einer Funktion helfen, die die letzten beiden Extremwerte von ZZ anzeigt?
 
Liebe Programmierer, ich bitte um einen Vorschlag zur Verbesserung des Expert Advisors: Es gibt eine offene Position und nach einiger Zeit gibt es ein Wiedereröffnungssignal in dieselbe Richtung. Ich möchte das zweite Signal nur ausfüllen, wenn der erste Auftrag bereits im Gewinn ist. Ich habe dies durch den Vergleich von Kontostand und Eigenkapital umgesetzt (wenn das Eigenkapital höher ist als der Kontostand, ist der eröffnete Auftrag im Plus).
Können Sie einen Code vorschlagen, um den Gewinn/Verlust des letzten offenen Auftrags zu ermitteln?
 
Am zuverlässigsten ist die Messung in Pips.
 
Roger:
Am zuverlässigsten ist die Messung in Pips.
Können Sie mir einen Code geben?