[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 287

 
Werde ich also den richtigen Code sehen können?
 
sergeev:
Beim ersten Nicht-Kaufauftrag werden Sie das Konto mit Kaufaufträgen überschwemmen.


Ich danke Ihnen! Einen weiteren Fehler gefunden!

//+------------------------------------------------------------------+
//|                                                      OnlyBuy.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 lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (OrdersTotal()==0)
   OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() != OP_BUY)
       OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
     }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
icas:


Ich danke Ihnen! Einen weiteren Fehler gefunden!


Mm-hmm.

aber das vorherige Problem wurde nicht behoben.

Sie können einen Auftrag, der sofort eröffnet wird, nicht in eine Schleife einfügen. Sie müssen zuerst eine vollständige Schleife über die Aufträge machen und genau herausfinden, ob es einen Kauf gibt oder nicht.

Und erst danach, nach diesem Zyklus, setzen Sie einen Buy.

 
sergeev:

Mm-hmm.

aber die vorherige wurde nicht behoben.

Sie können einen Auftrag, der sofort eröffnet wird, nicht in eine Schleife einfügen. Sie müssen zuerst eine vollständige Schleife über die Aufträge machen und genau herausfinden, ob es einen Kauf oder ein Nein gibt.

Und erst danach sollten Sie einen Kauf tätigen, wenn er noch nicht da ist.



Richtig, ich habe einfach ein Stück aus meinem Programm posti genommen, ohne es neu zu machen. Ich werde es jetzt tun - fünf Minuten...
 
Aber auch dieser Code ist nicht korrekt! Es wird nur dann einen Kaufauftrag eröffnen, wenn keine anderen Aufträge für ein anderes Finanzinstrument vorliegen, und wenn es andere Aufträge gibt, wird es keinen Kaufauftrag eröffnen.
 
icas:

Richtig, ich habe einfach ein Stück aus meinem Programm posti genommen, ohne es neu zu machen. Ich werde es jetzt tun - fünf Minuten...
//+------------------------------------------------------------------+
//|                                                      OnlyBuy.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 lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() == OP_BUY) return(0);
     }
   }
  OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  Sleep(10000); //Пауза 10 сек. для исполнениея ордера
//----
   return(0);
  }
//+------------------------------------------------------------------+
Jetzt sofort, richtig?
 
icas:
Ist das jetzt der Fall?
Sleep(10000); //Пауза 10 сек. для исполнениея ордера

Was ist der Sinn dieser Pause?
 
kolyango:

Warum die Pause?

Der Auftrag wird nicht sofort ausgeführt. Wenn beim nächsten Tick keine Pause eingelegt wird, kann der Auftrag noch nicht geöffnet werden, und das Programm sendet einen weiteren Befehl, um ihn zu öffnen. Im MT5-Tester können Sie bereits die Ausführungsverzögerung eingeben.
 
icas:
Ist sie jetzt korrekt?

Haben Sie versucht, eine separate Funktion für die Suche nach dem Vorhandensein bzw. Nichtvorhandensein von Elementen einzurichten?

Zum Beispiel:

bool ExistPositions(int mn, string sy="", int op=-1) {
   if (sy=="") sy=Symbol();
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (op<0 || OrderType()==op)  
            return(True);
         }
      }
   return(False);
}

Magic - magische Zahl von EA (in den Einstellungen festgelegt oder von EA automatisch generiert). Dann sollte die Abwesenheit der Position Buy by current symbol überprüft werden:

if (!ExistPositions(Magic, Symbol(), OP_BUY)) {
   // ... Тут код для вызова функции открытия позиций ... 
   }

Hinweis: Es handelt sich nicht nur um einen Befehl zur Eröffnung eines Kaufauftrags, sondern um eine vollständige Funktion, die alle Parameter zur Eröffnung eines Auftrags und die vom Server zurückgegebenen Fehler behandelt.

Als Tester können wir jedoch darauf verzichten, die eingegebenen Parameter auf gültige Werte zu prüfen...

 
artmedia70:

Haben Sie versucht, eine separate Funktion für die Suche nach dem Vorhandensein bzw. Nichtvorhandensein von Elementen einzurichten?

Zum Beispiel:

Dann sollte geprüft werden, ob die Position Kaufen nicht durch das aktuelle Symbol geschrieben wird:

Hinweis: Es handelt sich nicht nur um einen Befehl zur Eröffnung eines Kaufauftrags, sondern um eine vollständige Funktion, die alle Parameter der Auftragseröffnung und vom Server zurückgegebene Fehler verarbeitet.

Der Prüfer kann jedoch darauf verzichten, die eingegebenen Parameter auf gültige Werte zu prüfen...



Im ersten Beitrag habe ich die Funktionen angegeben, und kolyango war damit nicht zufrieden. Außerdem arbeite ich nicht gerne mit Magiern zusammen.