Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1511

 
Vitaly Muzichenko:

Bem, eu tenho um objetivo diferente do que economizar dinheiro.

Eu tenho EAs nos gráficos, e abrir cópias adicionais de janelas para trocar do painel não é a coisa certa a fazer. É por isso que escrevi o painel comercial na forma de um indicador - você pode colocar muitos deles em um único gráfico.

Este é um pequeno trecho, o código é um pouco truncado, mas a lógica é 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++;                            // не забудем увеличить счетчик 
   } 
 }

Consultor especializado

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

Onde está o indicador? Favor anexá-lo aqui para que você não tenha que vaguear pelos tópicos do fórum.

indicador
Arquivos anexados:
 
Sim, eu também estava pensando em fazer com que a EA escrevesse o ChartID do meu gráfico para uma variável global do terminal, então todos os indicadores sabem para onde enviar o evento. Spot sem BroadcastEvent.
 
Aleksei Stepanenko:
Sim, estou pensando em escrever o ChartID do meu gráfico em variável global de terminal, então todos os indicadores sabem para onde enviar o evento. Spot sem BroadcastEvent.

Glob.variable é o mesmo arquivo, o terminal trabalha duro com ele e mata o disco, e não é útil verificá-lo de forma estática, é o mesmo ciclo, mas em perfil :)

 
frank2020:
indicador
E o que você quer obter com este indicador?
 
frank2020:
indicador

Se alguma coisa, tirada daqui

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

Glob.variable é o mesmo arquivo, o terminal trabalha duro com ele e mata o disco, e não é útil verificá-lo de forma estática, é o mesmo ciclo, mas em perfil :)

Não, não. Uma vez no início do Expert Advisor, ele escreve o número de seu gráfico na variável global. Então, uma vez na partida, o indicador lê esta variável, e toda vez que o objeto é criado, ele envia o evento somente para o gráfico com a EA.
 
Vitaly Muzichenko:

Glob.variable é o mesmo arquivo, o terminal trabalha duro com ele e mata o disco, e não é razoável verificá-lo de forma estática, é o mesmo ciclo, mas em perfil :)

o mesmo arquivo se você forçar a descarga, caso contrário o carneiro está funcionando em sua maioria

 

Geralmente um transmissor normal entre EAs/indicadores se revela 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);
      }
   }

transmissor:

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

Sem carga sobre o processador.

 
Aleksei Stepanenko:

Em geral, um transmissor normal entre EAs/indicadores funcionaria:

não normal, por 8 bytes cada, você estará cansado de transferir algo

embora funcione -@fxsaber fez um bibloo, parece que o TypeToByte usa para trocar estruturas mais complexas


ZS: colisões como lidar? - imho, todas as estradas levam ao banco de dados sobre troca de dados, 90% do trabalho é feito para você e muito qualitativamente

Razão: