Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1511

 
Vitaly Muzichenko:

Beh, ho un obiettivo diverso dal risparmio di denaro.

Ho degli EAs sui grafici, e aprire ulteriori copie di finestre per fare trading dal pannello non è la cosa giusta da fare. Ecco perché ho scritto il pannello di trading sotto forma di indicatore - puoi metterne molti su un grafico.

Questo è un piccolo estratto, il codice è un po' troncato, ma la logica è chiara:

Indicatore

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

Consulente esperto

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

Dov'è l'indicatore? Per favore, allegalo qui, così non dovrai vagare per i thread del forum.

indicatore
File:
 
Sì, stavo anche pensando di far scrivere all'EA il ChartID del mio grafico in una variabile globale del terminale, quindi tutti gli indicatori sanno dove inviare l'evento. Spot senza BroadcastEvent.
 
Aleksei Stepanenko:
Sì, sto pensando di scrivere il ChartID del mio grafico nella variabile globale del terminale, poi tutti gli indicatori sanno dove inviare l'evento. Spot senza BroadcastEvent.

Glob.variable è lo stesso file, il terminale ci lavora molto e uccide il disco, e non è utile controllarlo in modo statico, è lo stesso ciclo ma nel profilo :)

 
frank2020:
indicatore
E cosa vuoi ottenere da questo indicatore?
 
frank2020:
indicatore

Semmai, preso da qui

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

Glob.variable è lo stesso file, il terminale ci lavora molto e uccide il disco, e non è utile controllarlo in modo statico, è lo stesso ciclo ma nel profilo :)

No, no. Una volta all'inizio dell'Expert Advisor, scrive il numero del suo grafico nella variabile globale. Poi una volta all'avvio l'indicatore legge questa variabile, e ogni volta che l'oggetto viene creato, invia l'evento solo al grafico con l'EA.
 
Vitaly Muzichenko:

Glob.variable è lo stesso file, il terminale ci lavora molto e uccide il disco, e non è ragionevole controllarlo in modo statico, è lo stesso ciclo, ma nel profilo :)

lo stesso file se si forza il risciacquo, altrimenti la ram funziona per lo più

 

Generalmente un normale trasmettitore tra EAs/indicatori risulta essere

ricevitore:

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

trasmettitore:

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

Nessun carico sul processore.

 
Aleksei Stepanenko:

In generale, un normale trasmettitore tra EAs/indicatori funzionerebbe:

non normale, da 8 byte ciascuno, sarete stanchi di trasferire qualcosa

anche se funzionerà -@fxsaber ha fatto una bibloo, sembra che TypeToByte usi per scambiare strutture più complesse


ZS: collisioni come gestire? - imho, tutte le strade portano al database sullo scambio di dati, il 90% del lavoro è fatto per voi e molto qualitativamente