Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1511

 
Vitaly Muzichenko:

Bueno, tengo un objetivo diferente al de ahorrar dinero.

Tengo EAs en los gráficos, y abrir copias adicionales de windows para operar desde el panel no es lo correcto. Por eso escribí el panel de operaciones en forma de indicador: puedes poner muchos en un solo gráfico.

Este es un pequeño extracto, el código está un poco truncado, pero la lógica es clara:

Indicador

// Открыть позиции
   // Открыть позицию 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++;                            // не забудем увеличить счетчик 
   } 
 }

Asesor experto

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

¿Dónde está el indicador? Por favor, adjúntalo aquí para no tener que vagar por los hilos del foro.

indicador
Archivos adjuntos:
 
Sí, también estaba pensando en hacer que el EA escriba el ChartID de mi gráfico en una variable global del terminal, entonces todos los indicadores saben a dónde enviar el evento. Spot sin BroadcastEvent.
 
Aleksei Stepanenko:
Sí, estoy pensando en escribir el ChartID de mi gráfico en la variable global de la terminal, entonces todos los indicadores saben dónde enviar el evento. Spot sin BroadcastEvent.

Glob.variable es el mismo archivo, el terminal trabaja mucho con él y mata el disco, y no sirve para comprobarlo de forma estática, es el mismo ciclo pero de perfil :)

 
frank2020:
indicador
¿Y qué quieres conseguir con este indicador?
 
frank2020:
indicador

En todo caso, tomado de aquí

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

Glob.variable es el mismo archivo, el terminal trabaja mucho con él y mata el disco, y no sirve para comprobarlo de forma estática, es el mismo ciclo pero de perfil :)

No, no. Una vez al inicio del Asesor Experto, escribe el número de su gráfico en la variable global. Entonces una vez al inicio el indicador lee esta variable, y cada vez que se crea el objeto, envía el evento sólo al gráfico con el EA.
 
Vitaly Muzichenko:

Glob.variable es el mismo archivo, el terminal trabaja mucho con él y mata el disco, y no es razonable comprobarlo de forma estática, es el mismo ciclo, pero de perfil :)

el mismo archivo si lo vacía a la fuerza, de lo contrario la ram funciona en su mayoría

 

Generalmente un transmisor normal entre EAs/indicadores resulta ser

receptor:

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);
      }
   }

transmisor:

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

No hay carga en el procesador.

 
Aleksei Stepanenko:

En general, un transmisor normal entre EAs/indicadores funcionaría:

no es normal, por 8 bytes cada uno, estará cansado de transferir algo

aunque funcionará -@fxsaber hizo un bibloo, parece que TypeToByte utiliza para intercambiar estructuras más complejas


ZS: ¿cómo manejar las colisiones? - en mi opinión, todos los caminos conducen a la base de datos en el intercambio de datos, el 90% del trabajo está hecho para usted y muy cualitativamente

Razón de la queja: