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

 

DiPach , nochmals vielen Dank für Ihre Hilfe. Ich habe Ihre Beispiele analysiert. Ich habe einige Änderungen an meinem Startup-Code vorgenommen. Das Ergebnis ist folgendes:

void OnStart()
  {
int awd1[];
ArrayResize(awd1,6,7);
   for(int i=0;i<=5;i++)
   {
   awd1[i]=i+10;
   Print("awd1[", i, "]=", awd1[i]);
   }
   Alert("awd1[0]=", awd1[0], ", awd1[1]=", awd1[1], ", awd1[2]=", awd1[2], 
   ", awd1[3]=", awd1[3], ", awd1[4]=", awd1[4], ", awd1[5]=", awd1[5]);
  }

Was wurde geändert:

1. Ich habe die Zeile mit der Array-Deklaration int awd1[]; in die Funktion OnStart() verschoben

2. Die Funktion ArrayResize(awd1,6,7) wurde hinzugefügt;

3. Das Skript funktioniert.

Ich werde versuchen, einige Schlussfolgerungen zu ziehen. In Skripten ist es korrekt, Arrays innerhalb der Funktion OnStart() zu deklarieren. Nachdem das Array deklariert wurde, muss seine Größe unbedingt mit der Funktion ArrayResize() definiert werden; andernfalls wird der Compiler fluchen. Sind meine Schlussfolgerungen richtig? Wenn nicht, geben Sie bitte die richtige Interpretation an.

 
silachara:

DiPach , nochmals vielen Dank für Ihre Hilfe. Ich habe Ihre Beispiele analysiert. Ich habe einige Änderungen an meinem Startup-Code vorgenommen. Das Ergebnis ist folgendes:

Was wurde geändert:

1. die Zeile mit der Array-Deklaration int awd1[]; innerhalb der Funktion OnStart() verschoben

2. Die Funktion ArrayResize(awd1,6,7) wurde hinzugefügt;

3. Das Skript funktioniert.

Ich werde versuchen, Schlussfolgerungen zu ziehen. In Skripten ist es korrekt, Arrays innerhalb der Funktion OnStart() zu deklarieren. Nachdem das Array deklariert wurde, muss seine Größe unbedingt mit der Funktion ArrayResize() festgelegt werden; andernfalls wird der Compiler einen Fehler erzeugen. Sind meine Schlussfolgerungen richtig? Wenn nicht, geben Sie bitte die richtige Interpretation an.

Im Großen und Ganzen, ja. Und es wird funktionieren, zumindest leise, aber sehr gut. :)

Ich werde nur die folgenden Punkte nennen:

1. Wenn Sie normale Variablen und Arrays deklarieren, sollten Sie überlegen, was das Skript (oder der EA/Indikator) tun soll und wofür diese Variablen/Arrays gedacht sind.

Ihr angehängter Skript-Workflow ermöglicht die Deklaration von Variablen nicht auf globaler Programmebene, sondern lokal. Das heißt, das Array wird einmal deklariert. Und es gibt keine Notwendigkeit für wiederholte (geschleifte) Deklarationen im Start()-Körper, z.B. vor dem Start der for()-Schleife und z.B. wenn wir eine weitere Variablendeklaration nach for() {} benötigen:


Dementsprechend wird das Array nicht auf der Ebene der globalen Variablen des Programms deklariert, sondern im Körper von OnStart() vor der Anweisung der for()-Schleife - das ist in diesem Schema der Programmausführung durchaus akzeptabel.

Meiner Meinung nach sollten wir, wenn es nicht notwendig ist, etwas auf der Ebene der globalen Variablen in einem Programm zu deklarieren, diese Gelegenheit nutzen und alles, was wir können, lokal deklarieren.

2. Was den Code anbelangt, so möchte ich mich klar ausdrücken:

void OnStart()
  {
   int awd1[];
   ArrayResize(awd1,6,7);
   for(int i=0;i<6;i++)
     {
      awd1[i]=i+10;
      Print("awd1[",i,"]=",awd1[i]);
     }
   string text=StringConcatenate("awd1[0]=",awd1[0],", awd1[1]=",awd1[1],", awd1[2]=",awd1[2],
                                 ", awd1[3]=",awd1[3],", awd1[4]=",awd1[4],", awd1[5]=",awd1[5]);
   Alert(text);
  }

Das heißt:

  • Sie sollten das <=-Zeichen (weniger als gleich) in for nicht verwenden. Ich meine, wo sie war (i=0;i<=5;i++). Setzen Sie einfach <(weniger als) und die Zahl 6 anstelle von 5 ein:
for(int i=0;i<6;i++)

Das ist die Art und Weise, für die 5 angemessen wäre:

for(int i=5;i>=0;i--)
  • Ich erinnere mich, dass ich schon einmal auf die Information gestoßen bin, dass die Funktion Stringconcatenate zur schnelleren Verarbeitung von langem Text beiträgt. Deshalb verwende ich sie normalerweise in meinem Code. Ich habe es auch hier hinzugefügt, nur für den Fall.


P./S.: Eine weitere Klarstellung, nur für den Fall, mit ArrayResize() - für dynamische Arrays. In der Dokumentation zu dieser Funktion gibt es Informationen, wenn diese Funktion die Größe dynamischer Arrays nicht ändern kann.

 
Best_ATS:
Warum kann ich keine Freunde hinzufügen?
Und wie stellt man sich einen Freund vor, wenn man ihn oder sie nicht persönlich aus dem Leben, aus der Arbeit kennt?
 

Hallo! Wie kann ich erreichen, dass der neue Preis zuerst angezeigt wird und der vorherige Preis nach unten fällt usw.? Ich habe ein Beispiel angeführt, um es zu verdeutlichen.

double NN=0;
double NN1=0;
double NN2=0;
double NN3=0;
void OnTick()
  {
//---
if(Ask>NN)NN=Ask;
if(NN>NN1)NN1=NN;
if(NN1>NN2)NN2=NN1;
if(NN2>NN3)NN3=NN2;
        Comment(""       
             + "1.   "+"Buy: "" Max: " + DoubleToStr(NN,5)
             + "\n"  
             + "2.   "+"Buy: "" Max: " + DoubleToStr(NN1,5)
             + "\n"  
             + "3.   "+"Buy: "" Max: " + DoubleToStr(NN2,5)
             + "\n"  
             + "4.   "+"Buy: "" Max: " + DoubleToStr(NN3,5)
             + "\n"
             + "------------------------------------------------" );
           
  }
 
abeiks:

Hallo! Wie kann ich erreichen, dass der neue Preis zuerst angezeigt wird und der vorherige Preis nach unten fällt usw.? Das wäre ein klar gemachtes Beispiel.

Ich habe ein Beispiel gemacht, und mit den Bedingungen können Sie es mehr oder weniger selbst herausfinden:

double bda_Price[4];
void OnTick()
{
      int li_int;
//---
    if (Ask > bda_Price[0])
    {
        ArrayInitialize (bda_Price, 0.);
        bda_Price[0] = Ask;
        double lda_Price[3];
        ArrayCopy (lda_Price, bda_Price, 0, 1);
        for (int li_int = 1; li_int < 4; li_int++)
        {bda_Price[li_int] = lda_Price[li_int-1];}
    }
    string ls_txt;
    StringInit (ls_txt, 100);
    for (li_int = 0; li_int < 4; li_int++)
    {ls_txt = StringConcatenate (ls_txt, (string) li_int, ".   Buy:  Max: ", DoubleToStr (bda_Price[li_int], Digits), "\n");
    ls_txt = StringConcatenate (ls_txt, "------------------------------------------------" );
    Comment (ls_txt);
//---
}
 
TarasBY:

Ich habe ein Beispiel gemacht, und Sie können sich die Begriffe mehr oder weniger selbst erarbeiten:


Ich danke Ihnen!
 
abeiks:

Hallo! Wie kann ich erreichen, dass der neue Preis zuerst angezeigt wird und der vorherige Preis nach unten fällt usw.? Um dies zu verdeutlichen, habe ich ein Beispiel angeführt.

Hier ist ein völlig primitiver Code.

double Price1, Price2, Price3, Price4;

void OnTick()
  {
Price4=Price3;
Price3=Price2;
Price2=Price1;
Price1=Ask;
Comment(Price1, "\n", Price2, "\n", Price3, "\n", Price4);
  }
 
silachara:

Hier ist ein ganz primitiver Code gemacht.




Ich danke Ihnen!
 

Hallo zusammen. Der Versuch, mit einem rudimentären Skript einen Handelsauftrag im Strategietester zu eröffnen, schlug fehl.

int start()

{

//----

int res;

double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point;

res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,",0,0,Blue);

if(res>-1)Alert("Open BUY order with ticket ",res);

//----

zurück(0);

}

Ich habe das Skript auf dem Tester-Chart im Visualisierungsmodus platziert, aber der Handelsauftrag öffnet sich im MT4-Terminal.

Ich kann auch keine Informationen über offene Aufträge im Strategietester mit SimpleFXTester_v2.ex4 erhalten.

Bitte helfen Sie mir, dies zu verstehen.

 
kosmos0975:

Hallo zusammen. Der Versuch, mit einem rudimentären Skript einen Handelsauftrag im Strategietester zu eröffnen, schlug fehl.

int start()

{

//----

int res;

double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point;

res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,",0,0,Blue);

if(res>-1)Alert("Open BUY order with ticket ",res);

//----

zurück(0);

}

Ich habe das Skript auf dem Tester-Chart im Visualisierungsmodus platziert, aber der Handelsauftrag öffnet sich im MT4-Terminal.

Ich kann auch keine Informationen über offene Aufträge im Strategietester mit SimpleFXTester_v2.ex4 erhalten.

Bitte helfen Sie mir, dies zu verstehen.

Die Skripte im Strategy Tester funktionieren nicht.
Grund der Beschwerde: