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

 
yosuf:
Es wird eine Option beschrieben, mit der die Ausführung der Aufgabe gestoppt werden kann. Ich weiß nicht, ob die Plattform dadurch abgeschaltet wird, aber ich werde es ausprobieren.
Ich werde nichts über die Plattform sagen (ich weiß es nicht), aber das Terminal wird (theoretisch) abgeschaltet. :)))
 
Können Sie mir sagen, wie ich das Termingeld berechnen kann?
 
Roman.:

" Ich möchte das tun, um nicht dieselben Daten in verschiedenen F-Funktionen zu erhalten. Die gleichen Masken in 2 oder mehr f-Funktionen zu berechnen, ist meiner Meinung nach nicht sinnvoll. Es ist einfacher, einmal zu rechnen und das war's. Warum zusätzliche Ressourcen dafür verschwenden?

Tun Sie, was in der Dokumentation steht, und erfinden Sie das Rad nicht neu.

Was hat dieser Zyklus mit irgendetwas zu tun?

 for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }

Gehen Sie selbst die Schritte durch, was passiert, wenn Sie es verlassen und was machen Sie dann damit? Das ist Unsinn.

Sie tun es wie im Tutorial - alle Handelssignale in dieser Definition von Handelskriterien - in Serie (Sie können sie in verschiedenen Funktionen verpacken und mit ihnen arbeiten, wenn Sie überprüfen, ob diese Handelskriterien funktionieren), dann erhalten Sie Bedingungen für ihre Arbeit.

Was den Zyklus betrifft, so werde ich die Schnittmenge der Indikatorparameter überprüfen. Es ist alles elementar hier. Ich habe es gelesen, und es ist so geschrieben, wie ich es denke.

Das Lehrbuch im Allgemeinen https://book.mql4.com/ru/build/conditions ist sehr unübersichtlich. Ich habe MACD und Stochastik in einer Funktion, ich brauche sie nicht.

Vielmehr sollten alle Indikatorwerte in der Verknüpfung an die entsprechenden Funktionen übergeben werden. Warum nicht? Das ist logisch.

 
TarasBY:
Was man erzählt und was man "zeichnet" - ZWEI GROSSE UNTERSCHIEDE!!! :))

Ich bin schon ein bisschen verwirrt. Hier sind 3 Funktionen, von denen jede ein bestimmtes Signal für einen bestimmten Indikator empfängt.

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

Diese Funktion empfängt allgemeine Signale von allen Indizes und trifft die Entscheidung zum KAUF oder VERKAUF.

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

Dies ist die Hauptfunktion, die das allgemeine Signal empfängt; hier erhalten wir die Werte der Indizes durch die Schleife, um durch alle Balken zu gehen, natürlich... Und dann werden die erhaltenen Werte per Verweis an die entsprechenden Funktionen weitergegeben, wo diese Werte benötigt werden, d. h. an die Funktionen:

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)

int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)

void GetMomentumSignal() kann im Prinzip auch dort platziert werden.

Somit werden alle Berechnungen der Indizes in einer einzigen Hauptfunktion der Signalgewinnung zusammengefasst. Hier ist alles logisch.

 

Unmittelbar nach dem Anhängen an das Diagramm startet das Programm die Funktion init(). Die Funktion init() des angehängten Advisors oder benutzerdefinierten Indikators startet sofort nach dem Start des Client-Terminals und dem Laden (betrifft nur Advisors und nicht Indikatoren) von historischen Daten, nach einer Änderung des Symbols und/oder der Chart-Periode, nach der Neukompilierung des Programms in MetaEditor, nach einer Änderung der Eingabeparameter aus dem Einstellungsfenster des EA oder benutzerdefinierten Indikators. Der Expert Advisor wird auch nach einem Kontowechsel initialisiert.

Können Sie erklären, wie das funktioniert? Im Hintergrund, oder lässt sich das irgendwie nachverfolgen? Oder die Init-Funktion im Indikator, wenn ich das Terminal nach einer langen Leerlaufzeit starte, startet überhaupt nicht?

 
fore-x:

Unmittelbar nach dem Anhängen an das Diagramm startet das Programm die Funktion init(). Die Funktion init() des angehängten Advisors oder benutzerdefinierten Indikators startet sofort nach dem Start des Client-Terminals und dem Laden (betrifft nur Advisors und nicht Indikatoren) von historischen Daten, nach einer Änderung des Symbols und/oder der Chart-Periode, nach der Neukompilierung des Programms in MetaEditor, nach einer Änderung der Eingabeparameter aus dem Einstellungsfenster des EA oder benutzerdefinierten Indikators. Der Expert Advisor wird auch nach einem Kontowechsel initialisiert.

Können Sie erklären, wie das funktioniert? Im Hintergrund, oder lässt sich das irgendwie nachverfolgen? Oder wird die Init-Funktion im Indikator beim Start des Terminals nach einer langen Leerlaufzeit gar nicht gestartet?

Die Init-Funktion ist für die Speicherung von Daten gedacht, die während der gesamten Laufzeit des EA nicht verändert werden. Dabei kann es sich um Daten handeln, die nur einmal berechnet werden, nachdem das Programm geladen wurde, und keine weitere Neuberechnung erforderlich ist. So habe ich es verstanden.

Und wenn die Werte von Variablen neu berechnet werden müssen, z. B. bei jeder Ankunft eines neuen Balkens, dann sollten wir solche Variablen nicht in der init-Funktion deklarieren, da sie dort nicht neu berechnet werden.

Um das Verständnis zu erleichtern, kann und sollte in init Folgendes deklariert werden:

   Tick = MarketInfo(Symbol(), MODE_TICKSIZE);                         // минимальный тик    
   Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point);                 // текущий спрэд
   StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);  // текущий уровень стопов
   MinLot = MarketInfo(Symbol(), MODE_MINLOT);    // минимальный разрешенный объем сделки
   MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);   // максимальный разрешенный объем сделки
   LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);          // шаг приращения объема сделки

Dabei handelt es sich um eine Sammlung von Daten aus dem Markt, und diese Daten werden nicht verändert. Obwohl es eine Frage mit Spread-Variable ist... wenn Spread nicht fest ist, ist es besser, es in separate Funktionen zu setzen.

 
hoz:

Die init-Funktion wird verwendet, um Daten zu speichern, die während der Lebensdauer des EA nicht geändert werden...

Sie antworten mal wieder off-topic - die init()-Funktionwird nach demLaden vonhistorischen Daten gestartet(dies gilt nur für Expert Advisors, nicht für Indikatoren) - wie verstehen Sie das (ich möchte es fühlen)?


Einen Bauern bei einem Pass nehmen - ich weiß, dass es eine solche Regel gibt, aber ich weiß nicht, wie man sie anwendet (sie ist klarer)?

 
Ich habe oben so geantwortet, wie ich es verstanden habe. Ich habe Ihren Standpunkt nicht wirklich verstanden. Vielleicht wird es jemand anderes tun.
 

Guten Tag zusammen. Bitte helfen Sie mir, ich habe eine Kombination von Candlesticks und ich möchte, dass sie auf verschiedenen Zeitskalen funktionieren. Ein Beispiel

if(iHigh("EURUSD",PERIOD_M5,1)>iLow("EURUSD",PERIOD_M5,1)+8*kio*Point)

{

go_s=true;

}

Ich dachte, ich könnte meine Kombination mit iHigh, iLow, iOpen usw. binden. Aber beim Test auf dem M5 zeigt es ein Ergebnis, aber auf anderen Zeitrahmen ein anderes. Bitte helfen Sie mir, was ich falsch mache. Ich danke Ihnen!

 
hoz:

...

Das Lehrbuch https://book.mql4.com/ru/build/conditions ist völlig überfrachtet. Er hat MACD und Stochastik in einer Funktion, die ich so nicht brauche.

Und tatsächlich sollten alle Indikatorwerte über die Verknüpfung an die entsprechenden Funktionen übergeben werden. Warum nicht? Das ist logisch.

Es stellt sich also heraus, dass alle Berechnungen von Indizes in einer einzigen f-Funktion enthalten sind, um das Signal zu erhalten. Es macht alles Sinn.

Es tut mir leid, aber es sieht so aus, als stünden Sie immer noch ganz am Anfang der Nahrungskette, also genau dort, wo "alles logisch ist". :-)

Machen Sie es wie ein STUDIENBUCH und ein DOKUM, und verpacken Sie es dann in separate Funktionen und erhalten Sie ein Handelskriterium im Ergebnis.

Im Tutorial wird alles auf einmal in die Resultante eingetragen, Sie können Ihre Optionen separat eintragen, und das ERGEBNIS wird wie im Tutorial gezeichnet! Hier ist keine Schleife oder Parameterwertübertragung per Referenz erforderlich!

P.S. Und im Allgemeinen, zunächst zerlegen die Code-Expos - alle in der Anleitung und ein paar in kodobase - nur alles fällt an seinen Platz.

Grund der Beschwerde: