Ein Fehler in der Funktion OrderSend() ? - Seite 10

 
Roger:
Das können Sie nicht tun. Wenn Sie die Bedingung nicht auf Anhieb richtig erfüllen, ist die ganze Stunde umsonst gewesen.


Auf H1 dauert die Bedingung 60 Minuten, d.h. bis zum nächsten Balken

//+------------------------------------------------------------------+
//|                                                     чернoвик.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

static datetime LastTime = 0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(NewBar()==true)
       {
        
           int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-250*Point,Ask+250*Point," ",16384,0,Green);
        
       }
  Comment ("LastTime   ",LastTime,"   NewBar   ",NewBar());  
//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar() 
    {
       
       if (iTime(NULL,0,0) != LastTime) 
       {
          LastTime = iTime(NULL,0,0);      
          return (true);
       } 
       else
          return (false);
     
    }

Schauen Sie sich den Kommentar im Tester an.

 
pako:


nur eine Position auf jedem Balken offen halten

Pako, ich bin erstaunt! Sie haben mich in diesem Thread immer wieder mit "albanischem Code" angesprochen, aber was haben Sie angeboten? :) Das Gleiche, nur von der Seite! Schließlich haben Sie die gleiche Funktion wie eine neue Leiste, die nur primitiver eingesetzt wird. Und dann die Funktion, den Auftrag zu senden, wobei alle Signale umgangen werden und so weiter und so fort. Und die Lösung des Problems war nicht da! Sie haben also den Albaner.

Swan:
Taki dann
nur, wenn die Order auf dem aktuellen Bar eröffnet wird. d.h. diese Zeile in der Funktion OpenBuy/Sell verschiebt





Swan, ich danke dir! Das ist es, was getan werden musste! Wenn der Zeitpunkt des neuen Taktes in der Auftragseröffnungsfunktion zugewiesen wird, dann keine Lücken. Ich habe es bereits überprüft und kann nicht fassen, wie gut alles funktioniert. Mein Expert Advisor funktioniert genau so, wie er sein sollte.

Ich habe noch eine Frage. Warum hat das vorherige Beispiel nicht funktioniert? Das vorige Beispiel hatte auch diese Bedingung:

// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);

Ich dachte, der Code liest sich wie folgt... wenn die FunktionTrade(signal) false zurückgibt, dann verlasse die Funktion... und bevor die VariablelastBarTime in der Zeile aktualisiert wird:

lastBarTime = iTime(NULL, 0, 0);

wird nicht aktualisiert. Aber wie sich herausstellt, ist es nicht so. Darf ich Sie bitten, diesen Punkt zu erläutern? Es ist sogar sehr interessant. Ich bin neugierig.

 
hoz:

Swan, ich danke dir! Das ist es, was getan werden musste! Wenn die neue Taktzeit in der Funktion für offene Aufträge zugewiesen wird, dann . keine Auslassungen. Ich habe es bereits überprüft und kann nicht fassen, wie gut alles funktioniert. Mein Expert Advisor funktioniert genau so, wie er sein sollte.

Eine Frage bleibt. Warum hat die letzte Option nicht funktioniert? Auch hier gab es eine Bedingung:

Ich dachte, der Code liest sich so... wenn die FunktionTrade(signal)) false zurückgibt, dann verlasse die Funktion... und bevor die VariablelastBarTime in der Zeile aktualisiert wird:

wird nicht aktualisiert. Aber wie sich herausstellt, ist es nicht so. Darf ich Sie bitten, diesen Punkt zu erläutern? Es ist sogar sehr interessant. Ich bin neugierig.

Ja, aber wenn
signal == SIGNAL_NO

beim ersten Tick eines neuen Balkens wird lastBarTime aktualisiert...


vielleicht ohne...

   if (signal != SIGNAL_NO)
wird es wie vorgesehen funktionieren... Der Code ist schwer zu lesen, Sie müssen ihn überprüfen)
 
hoz:

Pako, ich bin erstaunt! Sie haben mich in diesem Thread immer wieder mit dem "albanischen Code" konfrontiert, aber was haben Sie vorgeschlagen? :) Das Gleiche, nur von der Seite! Schließlich haben Sie die gleiche Funktion wie eine neue Leiste, die nur primitiver eingesetzt wird. Und dann gibt es noch die Funktion, einen Auftrag zu senden, wobei alle Signale umgangen werden und so weiter und so fort. Und die Lösung des Problems war nicht da! Sie sind also der Albaner.

pako:
Wenn es Ihnen nichts ausmacht, die ToR erneut zu formulieren, warum müssen Sie dann eine neue Leiste kontrollieren?


hoz:
Formulieren und einfach! Ich habe noch nicht an 1 Punkt gedacht, aber ich werde das Ganze erklären.

Die Anzahl der Aufträge sollte nicht begrenzt sein. D.h. es können Aufträge in beliebiger Menge eröffnet werden... ... es spielt keine Rolle, wie viele wir haben, aber wir brauchen nur 1 Auftrag, der in der aktuellen Leiste geöffnet wird. Das war's.

D.h., es wird ein neuer Balken eröffnet, so dass wir in diesem Balken 1 Auftrag eröffnen können, aber nicht mehr als 1 Auftrag im aktuellen Balken. Der nächste Auftrag kann nur zum nächsten Takt eröffnet werden, nicht früher.

Ist das jetzt klar?

Ich habe in den ToR geschrieben, dass eine Position bei einem neuen Bar eröffnet wird

Ich sehe in der Geschäftsordnung nichts anderes.

Viel Glück für Sie

Grund der Beschwerde: