[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 141

 
artmedia70:

IMHO ist es besser, Ihren Auftrag zu finden und zu sehen, ob er im Markt ist oder geschlossen wurde, und wie er geschlossen wurde, mit Take, Stop oder manuell. Von hier aus sollten Sie anfangen, in verschiedene Richtungen zu tanzen.

Dann wird alles korrekt sein. Aber globale Variablen können verloren gehen...


Was meinen Sie mit "Variablen verlieren"? Meinen Sie, es so zu finden, dass der EA dies auch überprüft?
 
Begemot7:
Bitte klären Sie, was Sie mit Variablen verlieren meinen? Meinen Sie, es auch zu finden, so dass der EA es überprüft?

In allen EAs für den Real- und Demohandel speichere ich keine wichtigen Daten über Aufträge und Positionen in Variablen. Maximal kann ich die Daten, die für die Logik des EAs notwendig sind, in den Auftragskommentar schreiben. Wenn ich herausfinden möchte, ob es Positionen gibt, wie viele es sind, ob es Aufträge gibt, geschlossene Positionen, wie sie geschlossen wurden, führe ich eine Schleife über Marktpositionen/Aufträge oder historische Daten aus, finde den Auftrag, den ich brauche, und rufe die benötigten Informationen ab. Daher speichere ich nicht alle wichtigen Informationen in Variablen, da sie bei einem unerwarteten Herunterfahren des Computers verloren gehen können. Sie kann später immer wieder abgerufen werden. Ich habe versucht, sie in den globalen Variablen des Terminals zu speichern - es hat sich herausgestellt, dass die Informationen nicht immer dort gespeichert werden, wenn der Computer abstürzt/hinkt. Und für mich ist die ständige Überwachung des Schreibens von neuen Informationen zu viel Aufwand... Ich finde es einfacher, das, was ich brauche, in dem Moment zu finden, in dem ich es brauche.
 
PapaYozh:

Sie können die Koordinaten des Punktes, auf dem der Indikator abgesetzt wurde, mit Hilfe der Funktionen ermitteln:

WindowXOnDropped()

WindowYOnDropped()

Preis und Zeit:

WindowPriceOnDropped()

WindowTimeOnDropped()


Ich werde versuchen, sie einzubauen. Ein Beispiel wäre ähnlich...
 

Ich befinde mich in einer seltsamen Situation. Könnten Sie mir bitte sagen...

Es gibt drei selbst geschriebene EAs. Die Strategie ist die gleiche, nur die Umsetzung ist je nach Instrument unterschiedlich. Paare: EURUSD, EURGBP und USDJPY. Mit den ersten beiden habe ich eine gute Arbeitsbeziehung, aber mit dem letzten funktioniert es nicht. Der Broker ist FX-Trend. Mein Konto ist ein Minikonto mit dem Mindestlot 0,01 (es wurde bisher für Tests verwendet).

Gleichzeitig gilt: Auf einem Demokonto ist alles in Ordnung. Wenn ich es im Testprogramm ausführe, werden die Geschäfte auf demselben realen Konto im Testprogramm eröffnet. Aber sie tun es nicht beim realen Handel. Die Marker für die Auftragseröffnung (und alle anderen Marker) werden erfolgreich platziert. In den Protokollen ist absolut nichts zu finden.

Es läuft alles auf einem VPS.


Ich denke, das sind alle Informationen. Ich wäre für jeden Hinweis dankbar, in welche Richtung ich graben sollte.

 
Sepulca:

Besser so (für den Fall, dass der EA neu gestartet wird):



Wenn es nur einen Auftrag gibt, können wir auf ihn verzichten.


if(AufträgeSumme()<1)

{

}

......

 
artmedia70:
Ich speichere keine wichtigen Daten über Aufträge und Positionen in Variablen in allen EAs für Real und Demo. Die Daten, die ich für die EA-Logik benötige, kann ich maximal in den Bestellkommentar schreiben. Wenn ich herausfinden möchte, ob es Positionen gibt, wie viele es sind, ob es Aufträge gibt, geschlossene Positionen, wie sie geschlossen wurden, führe ich eine Schleife über Marktpositionen/Aufträge oder historische Daten aus, finde den Auftrag, den ich brauche, und rufe die benötigten Informationen ab. Auf diese Weise speichere ich nicht alle wichtigen Informationen in Variablen, da sie bei einem unerwarteten Herunterfahren des Computers verloren gehen können. Sie kann später immer wieder abgerufen werden. Ich habe versucht, sie in den globalen Variablen des Terminals zu speichern - es hat sich herausgestellt, dass die Informationen nicht immer dort gespeichert werden, wenn der Computer abstürzt/hinkt. Und für mich ist es zu anstrengend, ständig zu überwachen, ob neue Informationen geschrieben werden... Ich finde es einfacher, das, was ich brauche, in dem Moment zu finden, in dem ich es brauche.

Das ist richtig... ...um besonders beruhigt zu sein. Das Richtige ist natürlich, alle Aufträge durchzugehen. Aber dies ist ein besonderer Fall. Wenn wir GlobalVariables verloren haben, sollten wir dieses Maklerunternehmen verlassen. Die GlobalVariablen werden nicht auf Ihrem Computer, sondern in der Maklerfirma bis zu drei Monate gespeichert, wenn Sie sie unangetastet lassen. Oder liege ich da falsch?
 
Sieht aus, als hätte ich es selbst herausgefunden :). Es stimmt, was man sagt - die Hauptsache ist, dass man es formuliert. Wenn wir auf dem Markt handeln, setzen wir in der Regel den Stop und nehmen die Positionen auf Null. Und dann stellen wir es richtig ein. Vielleicht findet es ja jemand nützlich...
 
Sepulca:
Das ist richtig... zusätzliche Beruhigung. Es ist natürlich richtig, alle Aufträge durchzugehen. Aber dies ist ein besonderer Fall. Und wenn GlobalVariables verloren geht, sollten wir dieses Maklerunternehmen verlassen.

Was meinen Sie - macht diese Maklerfirma das mit Absicht? Mir wurde gesagt, dass MT4 ein Terminal ist, das leicht von Brokern kontrolliert werden kann und daher kann es eine Menge Betrug geben, wer hat davon gehört?
 
Begemot7:

Ich meine, macht der DC das mit Absicht? Mir wurde gesagt, dass MT4 ein Terminal ist, das leicht von einem Makler kontrolliert werden kann und daher eine Menge Betrug möglich ist, wer hat davon gehört?


Das verstehe ich nicht ganz. Welchen Sinn hat es, wenn DC Ihre globalen Variablen vernichtet, es sei denn, Sie haben einen x...... Haufen davon aufgebaut. Zitat aus der Dokumentation:
"Globale Variablen des Client-Terminals sollten nicht mit Variablen verwechselt werden, die im globalen Bereich des MQL4-Programms deklariert sind. Globale Variablen existieren im Client-Terminal für 4 Wochen seit dem letzten Zugriff, danach werden sie automatisch gelöscht. Ein Zugriff auf eine globale Variable ist nicht nur das Setzen eines neuen Wertes, sondern auch das Lesen des Wertes der globalen Variable. globale Variablen des Client-Terminals sind gleichzeitig von allen MQL4-Programmen zugänglich, die im Client-Terminal gestartet werden. "Wenn Sie mit 0,01 oder 0,1 Lot arbeiten, werden Sie nicht bedrängt, denn es ist eine Kleinigkeit. .... Aber wenn Sie 100 Lose auf dem echten Konto eröffnet haben, sollten Sie bereit sein, um Ihr Geld zu kämpfen.

 

Brauche Hilfe von den Profis!!! Ich habe mir schon den Kopf über diesen Code zerbrochen... Es gibt 4 Puffer, von denen 2 korrekt funktionieren (Puffer & Puffer2), die anderen 2 jedoch nicht. Wenn eine bestimmte Bedingung eintritt, wird der Puffer gefüllt. Wenn dieser Wert für einen Puffer nach oben und für den zweiten nach unten geht, werden die Puffer entfernt (auf Null gesetzt), aber die verbleibenden 2 Puffer hängen noch im Diagramm. Können Sie mir sagen, wie man das beheben kann?

      //--- Функция расчета буферов CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer1[], double& ExtMapBuffer2[], double& ExtMapBuffer3[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,lastlow1,lasthigh1;
   int count = iBars(pair,tf)-ExtDepth;

   for(shift=count; shift>=0; shift--)
     {
     //--- Расчитываем буфер BuferUp
      val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
       
          ExtMapBuffer[shift]=val;
      //--------------------------------------------------------------------    
          
     //--- Расчитываем буфер BuferUp2
      if (ExtMapBuffer[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMin(val,MathMin(iHigh(pair,tf,shift+1),iHigh(pair,tf,shift-1)));}
      if(ExtMapBuffer[shift+back]==0.0) ExtMapBuffer1[shift+back]=0.0;
      } 
          ExtMapBuffer1[shift]=val;
      //--------------------------------------------------------------------    
          
      //--- Расчитываем буфер BuferDn
      val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
     
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer2[shift]=val;
      //-------------------------------------------------------------------
      
      //--- Расчитываем буфер BuferDn2
      if (ExtMapBuffer2[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMax(val,MathMax(iLow(pair,tf,shift-1),iLow(pair,tf,shift+1)));}
      if(ExtMapBuffer2[shift+back]==0.0) ExtMapBuffer3[shift+back]=0.0;
      }
      ExtMapBuffer3[shift]=val;
      //-------------------------------------------------------------------
      
     }
           
   // Отсееваем ненужные значения
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=count; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=iBars(pair,tf)-1; shift>=0; shift--)
   {
      if(shift>=count) ExtMapBuffer[shift]=0.0;
         else
         {
            res=ExtMapBuffer2[shift];
            if(res!=0.0) ExtMapBuffer2[shift]=res;
         }
   }
}