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

 
Code:


OK, versuchen wir es auf eine andere Art zu betrachten.

vteor12 kann geschrieben werden als (dVolumen+vback1)/k1 (Faktor 1)

vrealUP12 kann geschrieben werden als (dVolumen+vback1)/k2 (Koeffizient 2)

Wie ich versucht habe, den Indikator Ideologie zu beschreiben, besteht er aus dem Vergleich einiger theoretischer und tatsächlicher Ebenen. Um diese Werte zu erhalten, vergleiche (d.h. teile) ich den gleichen Wert (dVolumen+vback1) mit einem theoretischen Wert (k1) und einem tatsächlichen Wert (k2). Es ist klar, dass k1 ich mir das nur ausdenke, um die Dinge beim Namen zu nennen. Oder, wenn Sie so wollen, eine Vermutung anstellen. Das muss mit etwas verglichen werden. Nichts ist in diesem Fall objektiver und wahrer als die Grafik selbst. Ich nehme also die Eröffnungs- und Schlussdifferenzen und betrachte sie als das Endergebnis eines bestimmten Zeitraums. Und die einzige Aufgabe besteht darin, sie auf die gleiche Zahl zu bringen, weshalb sie mit 1000 multipliziert wird.

Versuchen Sie, verschiedene Varianten von Nachbarschaftskerzenleuchtern auf einem Taschenrechner zu berechnen, und Sie werden von der Vielfalt der Ergebnisse nach dieser sehr einfachen Formel überrascht sein.

Und in Bezug auf die schulische Logik haben Sie Recht. Ich füge Volumen + Volumen/Preis hinzu, das kann man in der Schule nicht machen. :))

Ich verzichte... :)))

Hatten Sie nicht ursprünglich ein Problem mit dem Display? Haben Sie das Problem gelöst?

 
MaxZ:

Ich verzichte... :)))

Hatten Sie anfangs nicht ein Problem mit dem Display? Haben Sie das Problem gelöst?


Ja, das habe ich übrigens. Ich habe nicht bedacht, dass es sich um eine Linie und nicht um ein Histogramm handelt. Die Linie sollte 2 Punkte haben. Da der Code nicht alle Varianten beschreibt, sondern nur 2 steigende Kerzen in Folge, würde der Indikator in dem Fall, dass nach der zweiten steigenden Kerze eine fallende Kerze folgt, nichts zeichnen. Und es war richtig. Als ich das herausfand, habe ich es in ein Histogramm geändert.

Übrigens, nehmen Sie sich meine Überlegungen zu den Regeln der Addition und Subtraktion nicht zu Herzen. :)))

Und ich wäre Ihnen sehr dankbar, wenn Sie mir helfen könnten, den Code fortzusetzen. Das war der eigentliche Anfang. Nach zwei Kerzenständern in einer Reihe möchte ich nach dem gleichen Prinzip 3, 4 usw. Kerzenständer in einer Reihe zählen. Offensichtlich sollte der Code in einer Schleife laufen, mit der Suche nach Candlesticks, richtig? Ich kann es noch nicht tun. Aber lassen Sie sich nicht davon irritieren, was durch was geteilt wird. :)))

 

Portiert von

VladimirR 29.07.2011 23:02 am Korrektur | löschen

Hallo. Ich habe endlich meinen ersten EA geschrieben! Ich verstehe nicht ganz, wie das funktioniert. Der EA setzt 2 schwebende Aufträge, wenn bestimmte Bedingungen erfüllt sind. Der Stop-Loss für beide Orders ist gleich dem High[1] (Low[1]) für die Pending Sell(Buy)-Order und der Take-Profit ist immer gleich den Pips für den Stop-Loss. Mir ist im Strategietester aufgefallen, dass der Gewinn nicht immer dem Stop-Loss in Pips entspricht. Bitte teilen Sie mir mit, wie das passieren kann. Dies ist der Code, in dem Stop-Orders berechnet werden (es gibt keine andere Stelle im Programm, an der Stops geändert werden)

//-2-анализ на установку buystop---------------------------------------------------------------------------------+
  if(Close[1]>=MA_17 && MA_3<=MA_17)
   {
    deposit_order=true;
    type_order =4;
    open_price =High[1];
    stop_loss  =Low[1];
    take_profit=NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
    if(Lot==0) Lot=MarketInfo(symb,MODE_MINLOT);
   }
 //-3-анализ на установку sellstop-------------------------------------------------------------------------------+  
  if(Close[1]<=MA_17 && MA_3>=MA_17)
    {
     deposit_order=true;
     type_order   =5;
     open_price   =Low[1];
     stop_loss    =High[1];
     take_profit  =NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
     if(Lot==0)Lot=MarketInfo(symb,MODE_MINLOT);
    }

 
nadya:
Hallo! Können Sie mir bitte sagen, ob es möglich ist, mehreren globalen Variablen innerhalb einer Funktion Werte zuzuweisen, und wo müssen diese Variablen in diesem Fall deklariert werden?

Sie können.

Deklarieren Sie Variablen global - vor der Funktion start(). Innerhalb der EA-Funktionen können Sie deren Werte nach Belieben ändern - nach der Rückkehr aus der Funktion haben diese Variablen die Werte, die Sie ihnen innerhalb Ihrer Funktionen zugewiesen haben, bis Sie sie irgendwo wieder ändern.

 
nadya:
Guten Tag! Könnten Sie mir bitte sagen, ob es möglich ist, mehreren globalen Variablen innerhalb einer Funktion einen Wert zuzuweisen, und wo müssen diese Variablen in diesem Fall deklariert werden?

Beispiel. Innerhalb der myfunction weisen wir zwei globalen Variablen einen Wert zu. Sie können auf diese Weise auch drei, vier oder n Variablen einen Wert zuweisen.

int global1 = 1;
int global2 = 2;

void myfunction(int g1, int g2)
{
   global1 = g1;
   global2 = g2;
}

int start()
{
   // До выполнения функции:     global1=1, global2=2   <---  то что объявили в начале кода
   
   myfunction(3, 4);
   
   // После выполнения функции:  global1=3, global2=4   <---  то что присвоили в функции
}

Aber ich glaube, Ihre Frage hat einen Haken...

 
Code:


Ja, übrigens, ich habe das selbst geregelt. Ich habe nicht bedacht, dass es sich um eine Linie und nicht um ein Histogramm handelt. Und die Linie erfordert 2 Punkte. Da der Code nicht alle Varianten beschreibt, sondern nur 2 steigende Kerzen hintereinander, hat der Indikator in dem Fall, dass nach der zweiten steigenden Kerze eine fallende Kerze kam, nichts gezeichnet. Und es war richtig. Als ich das herausfand, habe ich es in ein Histogramm umgewandelt.

Übrigens: Nehmen Sie sich meine Überlegungen zu den Regeln der Addition und Subtraktion nicht zu Herzen, sondern betrachten Sie sie als Experiment. :)))

Und ich wäre Ihnen sehr dankbar, wenn Sie mir helfen könnten, den Code fortzusetzen. Das war der eigentliche Anfang. Nach zwei Kerzenständern in einer Reihe möchte ich nach dem gleichen Prinzip 3, 4 usw. Kerzenständer in einer Reihe zählen. Offensichtlich sollte der Code in einer Schleife laufen, mit der Suche nach Candlesticks, richtig? Ich kann es noch nicht tun. Aber lassen Sie sich nicht davon irritieren, was durch was geteilt wird. :)))

Ja. Aber die beste Lösung für dieses Problem ist die Verwendung einer Schleife mit Nachbedingung "while" anstelle einer Schleife mit Zähler "for". Denn Sie wissen nicht, wie viele bullische oder bearische Candlesticks Sie hintereinander sehen werden.

Beginnen Sie mit einem einfacheren Problem, wenn Sie es so schwierig finden. Zeigen Sie zum Beispiel die Zahlen von a bis b in Schritten von s an. Oder finden Sie die Fakultät von n mit einer Schleife.

Und zum Üben lösen Sie diese Aufgaben mit beiden Arten von Schleifen ("for" und "while"). Dann können Sie beginnen, Ihren Indikator zu verbessern.

 

In der Sprache gibt es keine Post-While-Schleifen, MaxZ.

Ihr Wunsch, anderen zu helfen, ist lobenswert, aber Sie müssen die Sprache selbst noch besser beherrschen.

 
Mathemat:
In der Sprache gibt es keine Post-While-Schleifen.

Wenn Sie die Schleife wie folgt organisieren, erhalten Sie genau die richtige Nachbedingung:

int i = 0;
while (True)
{
   i++;
   if (i == 10) break;
}

Aber ich akzeptiere Ihre Korrektur. Ich danke Ihnen. Da es in MQL4 tatsächlich zwei Schleifentypen gibt: "for" (mit einem Zähler) und "while" (mit einer Vorbedingung). Die dritte Art (mit einer Nachbedingung) kann nur absichtlich organisiert werden.


Mathemat:

Ihr Wunsch, anderen zu helfen, ist lobenswert, aber Sie müssen die Sprache selbst noch besser beherrschen.

Was ich nicht weiß, mache ich auch nicht.

Und alle anderen Fehler wurden versehentlich gemacht. Ich war in letzter Zeit etwas abgelenkt... Ich möchte den Menschen einfach nur helfen.

 

MaxZ: Единственная проблема состоит в том, что если советник с данным кодом запустить в тестере, а переменной PERIOD присвоить значение PERIOD_M1, то обе функции iBarShift возвращают -1, т.е. функции не удалось найти в истории бар на ТФ M1 с таким временем... Почему так происходит, не знаю.

Höchstwahrscheinlich ist diese Funktion im Tester nicht modelliert (habe es nicht überprüft). Zumal exact (der vierte Funktionsparameter) standardmäßig auf false gesetzt ist.
 
Mathemat:
Diese Funktion wird im Tester wahrscheinlich nicht simuliert (habe es nicht überprüft). Zumal exact (der vierte Funktionsparameter) standardmäßig auf false gesetzt ist.
Ich habe es bereits herausgefunden... Das Problem lag in der Geschichte. In dem untersuchten Zeitraum gab es keine M1-Balken in der Vergangenheit.