[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 134

 
klyuchnikk:

Hallo zusammen.

Ich habe einen Expert Advisor, der mit der Historie (zur Analyse) arbeitet. Ich habe darin manuell einen Parameter eingestellt - die Zeit (Stunden, Minuten) der Auftragserteilung. Ich lasse den EA innerhalb des festgelegten Datumsbereichs laufen, ändere die Bestellzeiten und lasse ihn erneut laufen. Ich mache das 96 Mal (nach 15 Minuten) pro Tag. Wie kann ich eine Schleife einrichten, damit sie dies von selbst tut?

Kann ich Ihnen helfen?
 
artmedia70:
Ich frage noch einmal: Wann genau wollen Sie den Auftrag erteilen? Antworten Sie nicht mit Ihrem Code (ich will ihn nicht verstehen - wir haben genug eigene Codes zur Analyse), sondern nur mit Worten,

z.B.: Ich möchte eine Pause über/unter dem MA in diesem Abstand machen, vorausgesetzt, dass ... ...bla bla bla ...

Zum zweiten Mal bitte ich Sie um eine Erklärung. Wir hätten Ihr Problem schon längst gelöst.


Im Moment ist das Problem folgendes: fastMa kreuzt slowMa auf... ...also suchen wir, wo wir kaufen können. Dann warten wir, bis der Preis d.h. Ask (da wir den Kauf in Betracht ziehen) fastMa erreicht ( nun, ich denke, es gibt keinen exakten Wert, wir brauchen +- einige Abweichung, es wird umbenannt in i_thresholdFromMa) und sobald der Preis fastMa +- i_thresholdFromMa erreicht, sollte Expert Advisor BUYSTOP bei (fastMa + buyHear * pt) setzen.

Was ich mir ausgedacht habe, funktioniert nicht in einem Terminal und nicht immer in einem anderen. Irgendetwas stimmt generell nicht.

Die letzte Variante der buyHear-Funktion hier:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;
   
   if ((ND(OOP) - Ask) >= g_stopLevel)           
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}
Hier sind die Eingabeparameter:
extern double i_thresholdFromMa = 5;                           // Отступ от МА
extern double buyHear = 10,                                    // Расстояние от МА до отложки на бай

int init()
{
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
}

Die Fehler sind auf dem Screenshot zu sehen (in OrderSend() wird der Preis oberhalb der roten Perle gefüttert, während die Order, wie auf dem Screenshot zu sehen, unter .... liegt):

Eröffnungspreis gemeinsam

artmedia70:
Und noch etwas: Wenn Sie fastMA und slowMA als global definiert haben, warum übergeben Sie sie dann an Funktionen? Alle Funktionen können sie ohnehin sehen, ohne ihre Parameter an die aufgerufene Funktion zu übergeben.

Und bevor sie nicht global waren, wurden sie in bestimmten Funktionen deklariert, nicht in start. Aber da sie in keiner der Funktionen verwendet wurden, war es irgendwie, sagen wir mal, ein Zeichen von "schlechten Manieren als Programmierer" und es ist nicht angenehm, identische Codezeilen in verschiedenen Funktionen zu haben.

Artyom, glaubst du, dass ich am Anfang das richtige Handgelenk erwische? Ich meine, dass bei jedem Ticken der Wert empfangen wird. Ist das nicht zu teuer? Da ich kein ausgebildeter Programmierer bin, stelle ich mir diese Fragen manchmal...

 
Tincup:

Die Antwort ist mir nicht ganz klar, also frage ich noch einmal. Habe ich Sie richtig verstanden, dass bei der Festlegung der Handelsbedingungen

Sie sollten den MA-Wert für die entsprechende Anzahl von Balken rückwärts verwenden, aber nicht den Wert, der in der Abbildung mit einem gelben Pfeil markiert ist.

Ich habe die Figur so gezeichnet, wie ich Ihre Antwort verstanden habe.



Eigentlich ist die Frage ein bisschen daneben. Es geht nicht um die Verschiebung der Kurve, sondern um den Wert, den der Expert Advisor aus dem Puffer holen muss. Das ist es, was verstanden werden muss. Und es gibt KEINE Entsprechung zwischen der Vorspannung und dem Abrufen des Wertes aus dem Puffer.
 

hallo

erste Frage


A=true

wenn der Imacd-Wert(Hauptleitung) vor 15 Minuten kleiner als vor 30 Minuten ist

 
Claus084:

hallo

erste Frage

A=true

wenn der Imacd-Wert (Hauptleitung) vor 15 Minuten kleiner als vor 30 Minuten ist

Nein, besser vorwärts!
 
double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Berechnung des Indikators für die Konvergenz/Divergenz der gleitenden Durchschnitte. In den Systemen, in denen der OMA als MACD-Histogramm bezeichnet wird, wird dieser Indikator als zwei Linien gezeichnet. Im Client-Terminal wird die Konvergenz/Divergenz der gleitenden Durchschnitte als Histogramm gezeichnet.
Parameter:
Symbol - Symbolname des Symbols, auf dessen Daten der Indikator berechnet wird. NULL bedeutet aktuelles Symbol.
Zeitrahmen - Zeitraum. Kann eine der Perioden des Diagramms sein. 0 bedeutet den Zeitraum des aktuellen Diagramms.
fast_ema_period - Mittelungszeitraum für die Berechnung des schnellen gleitenden Durchschnitts.
slow_ema_period - Mittelungszeitraum für die Berechnung eines langsamen gleitenden Durchschnitts.
signal_period - Mittelungszeitraum für die Berechnung der Signallinie.
angewandter_Preis - Verwendeter Preis. Kann eine der Preiskonstanten sein.
Modus - Index der Indikatorlinie. Kann einer der Bezeichnerwerte der Indikatorzeile sein.



Die Frage lautet


, wenn ich sie richtig verstehe
- Index des aus dem Indikatorpuffer empfangenen Wertes (Verschiebung relativ zum aktuellen Takt um die angegebene Anzahl von Perioden zurück).


Anzahl von welchen Zeiträumen?
oder wie erhalte ich den Wert des macd aus dem vorherigen Balken anstelle des aktuellen?

int start ()
{
bool A=trueif
(iMACD(NULL,15,12,26,9,PREIS_SCHLIESSEN,MODE_MAIN,1)<iMACD(NULL,15,12,26,9,PREIS_SCHLIESSEN,MODE_SIGNAL,2)) { A==true; } return; }


 

Klicken Sie auf diePerioden im Diagramm und sehen Sie, was die Perioden sind! Und finden Sie den vorherigen Takt(Shift = 1) zum aktuellen Takt(Shift = 0) an letzter Stelle:

double MA0 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,0);//текущий бар
double MA1 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,1);//предыдущий бар


Oder noch besser, beginnen Sie mit dem Studium des Lehrbuchs von S. Kovalev!
 
Wird im Testmodus "Offene Preise" nur der Eröffnungskurs oder auch der Eröffnungs-, Schluss-, Höchst- und Tiefstkurs verwendet?
 
xant:

Hallo noch mal.

Bitte teilen Sie mir mit, wie ich das folgende Problem lösen kann.

Es gibt einen Indikator in kompilierter Form. Der Code ist nicht verfügbar. Der Indikator spiegelt die Preisniveaus im Hauptdiagrammfenster wider. Ich möchte diese Ebenen für meinen EA verwenden, aber es ist unmöglich, den Indikator mit der Funktion iCustom() aufzurufen - die angezeigten Ebenen sind grafische Objekte. Ist es möglich, die Daten auf andere Weise zu lesen, zum Beispiel über die Objektnamen und die Uhrzeit? Die Namen aller Ebenen sind bekannt (verfügbar in den Einstellungen des Indikators), die Objekte werden einmal pro Woche aktualisiert.

Ich möchte gleich sagen, dass ich nicht sehr erfahren in der Programmierung bin, ich wäre sehr dankbar für eine nützliche Antwort.

Das ist eine gute Idee. Grafische Objekte werden anhand ihres Namens erkannt. Pegel können durch zwei (grundlegende) Arten von grafischen Objekten angegeben werden: OBJ_TREND (Trendlinie) und OBJ_HLINE (horizontale Linie). So wie ich es verstehe, benötigen Sie zwei Eigenschaften dieser Objekte (Preis und möglicherweise Zeit):

    //---- Уровень для горизонтальной линии
    double ld_Level = ObjectGet (Name, OBJPROP_PRICE1);
    //---- Уровень для трендовой линии на текущем баре
    ld_Level = ObjectGetValueByShift (Name, Bar);
    datetime ldt_Time = ObjectGet (Name, OBJPROP_TIME1);
Etwa so.
 
Sancho77:
Hinweis: Verwendet der Tester im Testmodus "offene Preise" nur die offenen, geschlossenen, hohen und niedrigen Preise?

Ja, nur offene Preise, deshalb ist es wichtig, sie bei der Analyse des EA zu berücksichtigen. Wenn z. B. das Ende der Kerze Ihren Kanal durchbricht, wird der EA dies möglicherweise nicht bemerken, aber Sie können dies in die Programmlogik schreiben und das Problem lösen.