[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 705

 
Infinity:

So klar, in das Buch zu schauen und nicht zu sehen, funktioniert, danke! Weiter geht's) mit Fragen. Alle über die gleichen globalen Variablen. Ich habe dem Indikator die folgende Bedingung hinzugefügt:

Ich möchte festlegen, welcher globalen Variablen ein Wert zugewiesen werden soll, je nachdem, auf welcher Währung der Indikator basiert.

Ich verstehe, dass in der globalen Variablen GlobalVariableSet(valuta,param) der Name (valuta) den Wert enthalten sollte, der ihr oben zugewiesen wurde

die globale Variable im Code des Expert Advisors erneut aufrufen

string valuta="valuta";

int i= GlobalVariableGet(valuta); // aber ich erhalte den Wert nicht, .... Möglicherweise ist es unmöglich, den Namen der globalen Variablen auf diese Weise zu ändern?

Wenn ein EA den vom Indikator gespeicherten Wert prüft, wäre es logisch anzunehmen, dass der Wert des Parameters valuta dem Symbolnamen entsprechen sollte, d.h. EURUSD oder GBPUSD.

Wenn der Berater also den Wert für das aktuelle Symbol prüft, dann

string valuta = Symbol();

int i= GlobalVariableGet(valuta);
 
zhuki:

Erstens, von der Hilfe

double GlobalVariableGet(string name)

Gibt den Wert der vorhandenen globalen Variablen zurück oder 0 im Falle eines Fehlers. Rufen Sie GetLastError() auf, um Fehlerinformationen zu erhalten.


Können Sie den Inhalt des GV sehen, aber nicht abrufen?


Nun, globale Variablen zeigen sowohl den Namen als auch den Wert an, ..... Ich kann einfach nicht den Wert der globalen Variable in meinem Code über (Parameter-Name) globale Variable zu bekommen, muss ich String-Namen angeben, dann kein Problem es findet alles.
 
Infinity:

Nun, die globalen Variablen zeigen sowohl den Namen als auch den Wert an, ...... Ich kann den Wert der globalen Variable in meinem Code nicht über (Parameter-Name) der globalen Variable abrufen, ich muss den String-Namen angeben, dann findet er keine Probleme.


Ersetzen Sie

if (symb==EUR) {valuta=EUR;}

zu

if (symb=="EURUSD") {valuta="EUR";}

 
keekkenen:

Wenn der EA den vom Indikator gespeicherten Wert prüft, dann wäre es logisch anzunehmen, dass der Wert des Parameters valuta dem Namen des Instruments entsprechen sollte, d.h. EURUSD oder GBPUSD...

Wenn der Berater also den Wert des aktuellen Symbols prüft, dann

string valuta = Symbol();

int i= GlobalVariableGet(valuta);


So funktioniert's)) Es ist einfacher als es aussieht )

Vielen Dank an alle, die uns besuchen und helfen!

 

Freunde, sagt mir, wo ich Mist gebaut habe... Ich kann es nicht herausfinden. Der Indikator liest Daten, aber dann funktioniert er nicht. Ich kann es nicht finden. Vielleicht kann mir jemand sagen, was ich nicht verstehe:

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void   SaveDataIND(double &TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);                     // Размер массива под переданный в ф-цию размер
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);         // Запишем данные инд. в цикле в массив
         Print("TempIND[",j,"] = ",TempIND[j]);
      }
//------------------------------------------------------------------
// Заполнение массивов данными о пичках и донышках
//------------------------------------------------------------------
   double   PeakUP[], PeakDN[];                    // Объявляем массивы пичков/донышков
   int i, k, l, asize;
   if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l<=asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l<=asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }            
         

}   

Das Journal zeigt immer die Daten des Arrays der Indikatorwerte an, hält dann aber an...
... nur eine Nullzelle... und nur Null... Hilfe bitte...


 
odiseif:
Entschuldigung, da ist ein Fehler passiert ..... hier ist das Original

Odyssee, wenn du sie nicht hast, solltest du sie hinzufügen :))

Dateien:
 
artmedia70:

Freunde, sagt mir, wo ich Mist gebaut habe... Ich kann es nicht herausfinden. Der Indikator liest Daten, aber dann funktioniert er nicht. Ich kann es nicht finden. Vielleicht kann mir jemand sagen, was ich nicht verstehe:

Das Journal zeigt immer die Daten des Arrays der Indikatorwerte an, hält dann aber an...
... nur eine Nullzelle... und nur Null... Hilfe bitte...

Artyom, ich habe den ersten Fehler gefunden:

Arrays PeakUP[] und PeakDN[], sind ohne angegebene Anzahl der Elemente deklariert, das heißt, Sie haben sie überhaupt ohne Zellen erstellt, und weiter in einem Code versuchen, etwas in ihnen zu schreiben, aber da sie nicht in sich selbst Elemente enthalten, natürlich in ihnen nichts geschrieben wird, und in den Drucker ständig Null. Da Sie nicht genau wissen, wie viele Spitzen und Talsohlen es geben wird, empfehle ich Ihnen, die Anzahl der Elemente in diesen Arrays dynamisch zu erhöhen, wenn neue Daten eintreffen; korrigierte Bereiche sind rot markiert.

if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     ArrayResize(PeakDN, k + 1);
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l< asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     ArrayResize(PeakUP, k + 1);
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l< asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }    

ArraySize() gibt die Gesamtzahl der Arrayelemente zurück, aber da die Indexierung bei Null beginnt, ist die tatsächliche Anzahl der Elemente ArraySize() - 1.

 
Hier bin ich wieder mit Fragen) Die Frage ist nun folgender Art. (Danke an alle, die früher geholfen haben), jetzt empfängt mein Expert Advisor Daten von globalen Variablen von Indikatoren, indem er erkennt, von welchem Symbol die Daten empfangen wurden. Auf der Grundlage dieser Daten eröffne ich eine Order im Expert Advisor auf die Währung, von der ich die Daten der globalen Variablen erhalten habe. Ich hänge den EA an einen Chart und die Indikatoren an alle anderen Charts an. Er erhält Daten, eröffnet aber nur Aufträge für eine Währung, auf der er steht (EA selbst) ... Ich denke, es sollte ein Multi-Experte sein ... Ich weiß nicht, wie man es macht oder zumindest, was drin sein sollte, damit es Aufträge auf anderen Paaren öffnet (...) ich will nicht mehrere EAs laufen lassen (...)
 
Infinity:
...wie man es macht, oder zumindest was darin angegeben werden sollte, damit es Aufträge auf anderen Paaren öffnet. Ich möchte nicht mehrere EAs laufen lassen ((
OrderSend(Name des Währungspaares.... und andere Parameter......)
 
ToLik_SRGV:

Artyom, bis jetzt habe ich den ersten Fehler gefunden:

Die Arrays PeakUP[] und PeakDN[] sind ohne eine bestimmte Anzahl von Elementen deklariert, d.h. Sie haben sie ohne Zellen erstellt und versuchen im weiteren Verlauf des Codes, etwas hineinzuschreiben, aber da sie selbst keine Elemente enthalten, wird natürlich nichts hineingeschrieben, und im Drucker steht ständig Null. Da Sie nicht genau wissen, wie viele Spitzen und Talsohlen es geben wird, empfehle ich Ihnen, die Anzahl der Elemente in diesen Arrays dynamisch zu erhöhen, wenn neue Daten eintreffen; korrigierte Bereiche sind rot markiert.

ArraySize() gibt die Gesamtzahl der Array-Elemente zurück, aber da die Indexierung bei Null beginnt, ist die tatsächliche Anzahl der Elemente ArraySize() - 1.

Anatoli! Ihnen sollte ein Denkmal gesetzt werden - eine Büste in Ihrem Heimatland! Das Interessanteste ist, dass ich das für das TempIND-Array gemacht habe, aber ich habe sie vergessen und die halbe Nacht daran gearbeitet... :))