Questions des débutants MQL5 MT5 MetaTrader 5 - page 752

 
Désolé pour cette question très simple, comment puis-je fermer une position ouverte? mql4 avait la fonction OrderClose(), mais comment ?
 
RogozaIV:
Excusez-moi pour une question très simple, comment puis-je fermer une position ouverte? mql4 a la fonction OrderClose(), mais comment ?

Dans mql5, vous devez ouvrir une position opposée, ce qui est clairement visible dans l'onglet de l'historique du terminal. La méthode la plus simple consiste à utiliser la classe CTrade de la bibliothèque standard.
 
 
Pouvez-vous me dire où négocier des crypto-monnaies via MT5 ? Courtiers, échanges ? J'ai trouvé MT4, mais MT5 ne semble pas être disponible.
 

Messieurs, dites-moi où se trouve l'erreur.

Je prépare un indicateur qui sera appelé dans l'EA.

Je veux envoyer un tampon à partir de l'indicateur.

Le résultat est la valeur int liée à la barre.

La tâche est de passer un tableau à deux dimensions de l'indicateur à un conseiller expert, je n'arrive pas à trouver comment le faire.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

int per[];

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS); //также пробовал INDICATOR_DATA и INDICATOR_COLOR_INDEX
...

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
      for(int b=1; b<Bmax; b++) //отбор по x
        {
         for(int p=1; p<Pmax; p++) // отбор по y
           {
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)
            {
             per[b]=p;
            }
           }
        }
 }

Donc je l'appelle dans l'EA

int OnInit()
  {
//--- create timer
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); 
   ResetLastError(); 
   MA_handle=iCustom(NULL,0,"Topqw",0,1); 

   Print("MA_handle = ",MA_handle,"  error = ",GetLastError()); 
...

void OnTick()
//void OnTimer()
  {
//--- 
int copy=CopyBuffer(MA_handle,0,0,1000,Label1Buffer); 
   Print("copy =",copy," ",Label1Buffer[999]);//

 
Top2n:

Messieurs, dites-moi où se trouve l'erreur.

Je prépare un indicateur qui sera appelé dans l'EA.

Je veux envoyer un tampon à partir de l'indicateur.

Le résultat est la valeur int liée à la barre.

La tâche est de passer un tableau à deux dimensions de l'indicateur à un conseiller expert, je n'arrive pas à trouver comment le faire.

Je l'appelle dans l'EA



1. Rappelez-vous que dans l'INDICATEUR, le tampon par défaut de l'indicateur avec l'indice "0" correspond à la barre la plus à gauche du graphique.

2. L'Expert Advisor n'a pas de commande "SetIndexBuffer".

3. iCustom crée un indicateur personnalisé, pas une demande de tampon (donc, tout doit être écrit explicitement, pas ",0,1"). Dans votre cas, vous pouvez utiliser cette forme

//--- create handle of the indicator Topqw
   ResetLastError();
   handle_Topqw=iCustom(Symbol(),Period(),"Topqw",PRICE_CLOSE);
//--- if the handle is not created 
   if(handle_Topqw==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the Topqw indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

4. CopyBuffer semble être écrit correctement.

5. Un tableau à deux dimensions ne peut pas être transmis - faites deux tampons d'indicateurs de tableau.

 
Vladimir Karputov:


1. Rappelez-vous que dans l'INDICATEUR, par défaut, le tampon de l'indicateur avec l'index "0" correspond à la barre la plus à gauche du graphique.

2. Il n'y a pas de commande "SetIndexBuffer" dans l'EA.

3. iCustom crée un indicateur personnalisé, pas une demande de tampon (donc tout doit être écrit explicitement, pas ",0,1"). Dans votre cas, vous pouvez utiliser cette forme

4. CopyBuffer semble être écrit correctement.

5. Vous ne pouvez pas passer un tableau à deux dimensions - faites deux tampons indicateurs de tableau.


Merci pour la correction, mais je ne comprends pas, si je définis explicitement de transférer des tableaux, comment est-ce formalisé ? Où dois-je spécifier que je dois extraire deux tableaux ?

MA_handle=iCustom(Symbol(),Period(),"TopFidCounselor",per,bar); per,bar - же массивы, а данные должны быть imput,
в индикаторе записываю в массивы
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
   SetIndexBuffer(1,bar,INDICATOR_CALCULATIONS);

если я сделаю такую запись
int OnCalculate(
...
  {
//--------------------------------------------------------------
  for ( int i = 0; i < rates_total; i ++ ) per[i] = price[i];  -
//--------------------------------------------------------------
ТО СОВЕТНИК РАБОТАЕТ БЕЗ ОШИБКИ
а если такую
//----------------------------------------------------------------
      for(int b=1; b<200; b++) //отбор по х			-
        {							-
         for(int p=1; p<200; p++) // отбор по у			-
           {							-
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)		-
            {							-
             per[b]=p;						-
             bar[b]=b;						-
            }							-
           }							-
        }							-
//----------------------------------------------------------------
ТО ОШИБКА код 4002

J'ai regardé dansIndicatorCreate(), pourriez-vous me dire comment faire, sinon il me faudra des semaines pour le comprendre, et il me reste si peu de temps pour terminer le bloc de pensée. Je dois bientôt partir dans la taïga pour passer l'été avec des abeilles en train de butiner, je veux donc vérifier l'idée avant le départ, pour ne pas me faire d'illusions.
 

Ce que j'utilise dans l'indicateurINDICATOR_CALCULATIONS est-il correct?

   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
 

L'erreur 4002 est résolue.

seulement il n'est pas clair où écrire le tableau à extraire ?

   int copy=CopyBuffer(MA_handle,0,0,bars,per); //per?
 
Top2n:

L'erreur 4002 est résolue.

seulement il n'est pas clair où écrire le tableau à extraire ?


Le tableauper est déclaré dans l'EA, dans la procédure dans laquelle vous effectuez la copie. Il doit s'agir d'un tableau dynamique (déclaré comme [] - sans dimensionnalité).