Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1511

 
Vitaly Muzichenko:

Nun, ich habe ein anderes Ziel als Geld zu sparen.

Ich habe EAs auf den Charts, und zusätzliche Kopien von Fenstern zu öffnen, um vom Panel aus zu handeln, ist nicht der richtige Weg. Deshalb habe ich das Handelspanel in Form eines Indikators geschrieben - man kann viele davon in einem Diagramm unterbringen.

Dies ist ein kleiner Auszug, der Code ist ein wenig abgeschnitten, aber die Logik ist klar:

Indikator

// Открыть позиции
   // Открыть позицию Buy
   if(sparam==prefix+"_openBuy") {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger(0,prefix+"_openBuy",OBJPROP_STATE,false);
     ChartRedraw();
   }
   // Открыть позицию Sell
   if(sparam==prefix+"_openSell") {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger(0,prefix+"_openSell",OBJPROP_STATE,false);
     ChartRedraw();
   }

//===============================================================================================
//------------------ Функция посылает сообщение всем открытым графикам -------------------------+
//===============================================================================================
void BroadcastEvent(long lparam,double dparam,string sparam) {
 ushort eventID=9784-CHARTEVENT_CUSTOM;
 long currChart=ChartFirst(); 
 int i=0; 
  while(i<CHARTS_MAX)                // у нас наверняка не больше CHARTS_MAX открытых графиков 
   { 
    EventChartCustom(currChart,eventID,lparam,dparam,sparam); 
    currChart=ChartNext(currChart); // на основании предыдущего получим новый график 
    if(currChart==-1) break;        // достигли конца списка графиков 
    i++;                            // не забудем увеличить счетчик 
   } 
 }

Expert Advisor

// -- Получим нажатие кнопки с индикатора
// Открыть позицию
 if(id==9784)     
  {
   if(UseSound) PlaySound("tick.wav");
   OpenPosition(sparam,OP_BUY,dparam,0,0,"comm",(int)lparam,clrNONE);
  }
 
Aleksei Stepanenko:

Wo ist der Indikator? Bitte fügen Sie es hier an, damit Sie nicht in den Forumsthemen herumwühlen müssen.

Anzeige
Dateien:
 
Ja, ich dachte auch daran, dass der EA die ChartID meines Charts in eine globale Variable des Terminals schreibt, dann wissen alle Indikatoren, wohin sie das Ereignis senden müssen. Spot ohne BroadcastEvent.
 
Aleksei Stepanenko:
Ja, ich denke, die ChartID meines Charts in die globale Variable des Terminals zu schreiben, dann wissen alle Indikatoren, wohin das Ereignis zu senden ist. Spot ohne BroadcastEvent.

Glob.variable ist die gleiche Datei, das Terminal arbeitet hart mit ihr und tötet die Festplatte, und es ist nicht sinnvoll, sie auf statische Weise zu überprüfen, es ist der gleiche Zyklus, aber im Profil :)

 
frank2020:
Anzeige
Und was wollen Sie mit diesem Indikator erreichen?
 
frank2020:
Anzeige

Wenn überhaupt, dann von hier aus

Ищу канальные индикаторы для MT5
Ищу канальные индикаторы для MT5
  • 2017.03.28
  • www.mql5.com
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5 Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые резуль...
 
Vitaly Muzichenko:

Glob.variable ist die gleiche Datei, das Terminal arbeitet hart mit ihr und tötet die Festplatte, und es ist nicht sinnvoll, sie auf statische Weise zu überprüfen, es ist der gleiche Zyklus, aber im Profil :)

Nein, nein. Einmal beim Start des Expert Advisors schreibt er die Nummer seines Charts in die globale Variable. Dann liest der Indikator diese Variable einmal beim Start aus, und jedes Mal, wenn das Objekt erstellt wird, sendet er das Ereignis nur an den Chart mit dem EA.
 
Vitaly Muzichenko:

Glob.variable ist die gleiche Datei, das Terminal arbeitet hart mit ihr und tötet die Festplatte, und es ist nicht sinnvoll, sie auf statische Weise zu überprüfen, es ist der gleiche Zyklus, aber im Profil :)

dieselbe Datei, wenn Sie sie zwangsweise leeren, ansonsten funktioniert der Speicher meistens

 

Im Allgemeinen stellt sich ein normaler Sender zwischen EAs/Indikatoren wie folgt dar

Empfänger:

int OnInit()
   {
   GlobalVariableSet("A",ChartID());
   return(INIT_SUCCEEDED);
   }

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) 
   {
   if(id==CHARTEVENT_CUSTOM+777)
      {
      printf("Сообщение принято: "+sparam);
      }
   }

Sender:

int OnInit()
   {
   long a=(long)GlobalVariableGet("A");
   EventChartCustom(a,777,0,0,"Превед медвед!");
   return(INIT_SUCCEEDED);
   }

Keine Belastung des Prozessors.

 
Aleksei Stepanenko:

Im Allgemeinen würde ein normaler Sender zwischen EAs/Indikatoren funktionieren:

nicht normal, um jeweils 8 Bytes, werden Sie müde sein, etwas zu übertragen

obwohl es funktionieren wird -@fxsaber hat eine Bibloo gemacht, es scheint TypeToByte verwendet, um komplexere Strukturen auszutauschen


ZS: Kollisionen, wie geht man damit um? - Imho führen beim Datenaustausch alle Wege zur Datenbank, 90% der Arbeit wird Ihnen abgenommen, und das in sehr guter Qualität.