Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1511

 
Vitaly Muzichenko:

Eh bien, j'ai un objectif différent de celui d'économiser de l'argent.

J'ai des EAs sur les graphiques, et ouvrir des copies supplémentaires de Windows pour trader à partir du panneau n'est pas la bonne chose à faire. C'est pourquoi j'ai écrit le panneau de négociation sous la forme d'un indicateur - vous pouvez en mettre beaucoup sur un seul graphique.

Ceci est un petit extrait, le code est un peu tronqué, mais la logique est claire :

Indicateur

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

Conseiller expert

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

Où se trouve l'indicateur ? Veuillez l'attacher ici pour ne pas avoir à errer dans les fils du forum.

indicateur
Dossiers :
 
Oui, je pensais aussi que l'EA pourrait écrire le ChartID de mon graphique dans une variable globale du terminal, puis tous les indicateurs sauraient où envoyer l'événement. Spot sans diffusionEvent.
 
Aleksei Stepanenko:
Oui, je pense écrire le ChartID de mon graphique dans la variable globale du terminal, puis tous les indicateurs savent où envoyer l'événement. Spot sans diffusionEvent.

Glob.variable est le même fichier, le terminal travaille dur avec lui et tue le disque, et il n'est pas utile de le vérifier de manière statique, c'est le même cycle, mais de profil :)

 
frank2020:
indicateur
Et que voulez-vous retirer de cet indicateur ?
 
frank2020:
indicateur

Si quelque chose, pris d'ici

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

Glob.variable est le même fichier, le terminal travaille dur avec lui et tue le disque, et il n'est pas utile de le vérifier de manière statique, c'est le même cycle mais de profil :)

Non, non. Une fois au démarrage du Conseiller Expert, il écrit le numéro de son graphique dans la variable globale. Ensuite, une fois au démarrage, l'indicateur lit cette variable, et chaque fois que l'objet est créé, il envoie l'événement uniquement sur le graphique avec l'EA.
 
Vitaly Muzichenko:

Glob.variable est le même fichier, le terminal travaille dur avec lui et tue le disque, et il n'est pas raisonnable de le vérifier de manière statique, c'est le même cycle, mais de profil :)

le même fichier si vous le videz de force, sinon la mémoire vive fonctionne en général.

 

En général, un émetteur normal entre les EA/indicateurs s'avère être

récepteur :

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

émetteur :

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

Aucune charge sur le processeur.

 
Aleksei Stepanenko:

En général, un émetteur normal entre EAs/indicateurs fonctionnerait :

pas normal, par 8 octets chacun, vous serez fatigué de transférer quelque chose

bien que cela fonctionne -@fxsaber a fait un bibloo, il semble que TypeToByte utilise pour échanger des structures plus complexes


ZS : les collisions, comment les gérer ? - imho, tous les chemins mènent à la base de données sur l'échange de données, 90% du travail est fait pour vous et de manière très qualitative.