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

 
Guten Tag, bitte helfen Sie, es ist eine einfache Idee, einen Alert()-Aufruf zu implementieren, wenn drei MAs sich schneiden.
Beschreibung des Schnittpunkts im Programm. Es scheint zu funktionieren, aber nicht so, wie es sollte. Ich runde die Variablen auf eine Stelle, damit
die Schnittmenge erfasst. Und dieses Alert() trommelt mich zusammen, solange die Mittel an der gleichen Stelle sind. Wie schaffe ich es, dass er einmal, also bis zu 5 Mal, aufgerufen wird?
//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;

//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD()
      {
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          Alert("Cигнал на ПОКУПКУ паре EURUSD");
          return(11); // 11 - на первой паре сигнал на покупку.
         }
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          Alert("Cигнал на ПРОДАЖУ паре EURUSD");
          return(10); // 20 - на первой паре сигнал на продажу.
         }     
      }
int start()

   {

//+------------------------------------------------------------------+
//| Блок работы с EURUSD                               |
//+------------------------------------------------------------------+
   if(EURUSD() != 11 || EURUSD() != 10)
      {
         // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
         MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
  
         SMA_Blue_EURUSD = MA_Blue_EURUSD;
     // Преобразование int в string
         SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, '');     // Округление до х.хххх
         SMA_Green_EURUSD = MA_Green_EURUSD;   // Преобразование int в string
         SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, '');   // Округление до х.хххх
         SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
         SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх

      }

     }

int deinit(){return(0);}




Wenn alles an der Wurzel falsch ist, schlagen Sie Methoden vor, um die Kreuzung zu verfolgen. Danke.
 
Zherart:
Guten Tag, bitte helfen Sie, es ist eine einfache Idee, einen Alert()-Aufruf zu implementieren, wenn drei MAs sich schneiden.
Beschreibung des Schnittpunkts im Programm. Es scheint zu funktionieren, aber nicht so, wie es sollte. Ich runde die Variablen auf eine Stelle, um
um die Kreuzung zu erreichen. Und dieses Alert() trommelt für mich, solange die Mittel an der gleichen Stelle sind. Wie schaffe ich es, dass es einmal, ja bis zu 5 Mal aufgerufen wird, wenn es nicht direkt an der Wurzel liegt? Ich danke Ihnen.

//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
   int БАРАБАНИТЬ = 1; // Сколько раз подавать сигнал
   int ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD() 
      {
   
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
          return(11); // 11 - на первой паре сигнал на покупку.
         }
      else ПОКУПКА=0;
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
          return(10); // 20 - на первой паре сигнал на продажу.
         }
       else ПРОДАЖА=0;       
      }

Irgendwo so etwas auf einen Blick...
 
Sepulca, ich danke dir!!! Wir werden es ausprobieren. Ich hab's kapiert!!!
 
Entweder bin ich dumm oder es stimmt etwas mit dem Terminal nicht. Ich wollte einen EA optimieren, aber in den EA-Eigenschaften gibt es keine Registerkarte "Eingabeparameter". Hilfe.
 
prom18:
Entweder bin ich dumm oder es stimmt etwas mit dem Terminal nicht. Ich wollte einen EA optimieren, aber in den EA-Eigenschaften gibt es keine Registerkarte "Eingabeparameter". Ich habe versucht, meinen EA zu optimieren, aber in seinen Eigenschaften gibt es keine Registerkarte "Eingabeparameter".



https://forum.mql4.com/ru/46980/page417#702426

https://www.mql5.com/ru/forum/138609/page417#702426

 

Ist es möglich, ein Array in den Parametern einer Funktion zu verwenden? Ich möchte zum Beispiel eine Funktion erstellen, die Informationen in einem Array verarbeitet:

void Function(double Array[])
 {
  ...
 }
 
silhouette:

Ist es möglich, ein Array in den Parametern einer Funktion zu verwenden? Ich möchte zum Beispiel eine Funktion erstellen, die Informationen in einem Array verarbeitet:


Was sagt die Anleitung dazu?

"

Die zu übergebenden Parameter werden in Klammern hinter dem Namen der aufzurufenden Funktion angegeben und durch Kommata getrennt aufgelistet. Die Anzahl der Parameter, die an eine Funktion übergeben werden, darf 64 nicht überschreiten. Die Funktion darf auch die übergebenen Parameter nicht verwenden. In diesem Fall wird eine leere Parameterliste angegeben, d.h. öffnende und schließende Klammern werden unmittelbar hinter den Funktionsnamen gesetzt.

Die Anzahl, der Typ und die Reihenfolge der im Funktionsaufruf übergebenen Parameter müssen mit der Anzahl, dem Typ und der Reihenfolge der Formalparameter übereinstimmen, die in der Funktionsbeschreibung angegeben sind (Ausnahme ist der Aufruf einer Funktion, die Standardparameter hat - siehe Funktionsaufruf und Funktionsbeschreibung und Rückgabeoperator). Ist dies nicht der Fall, gibt der MetaEditor eine Fehlermeldung aus. Als Übergabeparameter können Konstanten, Variablen, Ausdrücke und Arrays verwendet werden. "

 
silhouette:

Ist es möglich, ein Array in den Parametern einer Funktion zu verwenden? Ich möchte zum Beispiel eine Funktion erstellen, die Informationen in einem Array verarbeitet:

Versuchen Sie dies:

void Function(double& Array[])
 {
  ...
 }
https://docs.mql4.com/ru/basis/variables/formal
 
Sepulca:


Dasselbe gilt für Close - iClose, Open - iOpen, Time - iTime Volume - iVolume usw.

Und der Indikator kann bis zu 8 Linien von 0 bis 7 zeichnen https://docs.mql4.com/ru/customind/indicatorbuffers


vielen Dank :) der Indikator wird immer noch nicht gezeichnet, ich habe Spikes in Linien wie price=iL[k]; wobei iL mein iLow ist...former Low

Jedenfalls habe ich eine Menge nützlicher Dinge herausgefunden... aber ich werde nicht weiter nachforschen...

Es gibt eine einfachere Methode, um die Neuzeichnung zu visualisieren... ohne einen benutzerdefinierten Indikator.

 
Roman.:

Was sagt das Lehrbuch dazu?

"

Die zu übergebenden Parameter werden in Klammern hinter dem Namen der aufzurufenden Funktion angegeben und durch Kommata getrennt aufgelistet. Die Anzahl der Parameter, die an die Funktion übergeben werden, darf 64 nicht überschreiten. Die Funktion darf auch die übergebenen Parameter nicht verwenden. In diesem Fall wird eine leere Parameterliste angegeben, d.h. öffnende und schließende Klammern werden unmittelbar hinter den Funktionsnamen gesetzt.

Die Anzahl, der Typ und die Reihenfolge der im Funktionsaufruf übergebenen Parameter müssen mit der Anzahl, dem Typ und der Reihenfolge der in der Funktionsbeschreibung angegebenen Formalparameter übereinstimmen (Ausnahme ist der Aufruf einer Funktion, die Standardparameter hat - siehe Funktionsaufruf und Funktionsbeschreibung und Rückgabeoperator). Ist dies nicht der Fall, gibt der MetaEditor eine Fehlermeldung aus. Als Übergabeparameter können Konstanten, Variablen, Ausdrücke und Arrays verwendet werden. "

Lesen Sie das Lehrbuch vor dem Schreiben, siehe unterstreichen, aber nicht in die Praxis umzusetzen - schreibt über inkompatible Art.
Grund der Beschwerde: