Caractéristiques du langage mql5, subtilités et techniques - page 181

 
Andrey Khatimlianskii:

J'ai généralement un ou deux graphiques sur un terminal comme celui-ci, il est difficile de s'y perdre. Mais le point est clair.

Je négocie plus de symboles, plus d'EAs fonctionnent. Surveillance des symboles non négociables pour le moment. Les symboles personnalisés sont créés, Tester est en cours d'exécution, etc.

Une bête de somme, en général.
 
fxsaber:

Négocier plus de symboles, plus d'EAs fonctionnant. Surveillance des symboles non négociables pour le moment. Des symboles personnalisés sont créés, Tester fonctionne, etc.

Une bête de somme, en général.

J'ai un mot de passe d'investisseur pour tous les comptes. Et cela n'a pas d'importance s'il y a des EAs ou non.

 
trader_number_one:

J'ai seulement un cheval de trait sous mon mot de passe d'investissement pour tous les comptes. Et je me fiche de savoir s'il y a des conseillers ou non.

Les conseillers ne sont pas uniquement destinés à la négociation. En outre, vous devez être en mesure d'échanger un cheval de trait.

 
fxsaber:

J'ai dix terminaux. En plein désarroi chez l'un d'eux, j'ai changé de compte. Le temps passe, je regarde le terminal et je vois que j'ai besoin d'un autre compte - je reviens à l'ancien. Et sans m'attendre à ce que l'EA soit suspendue, je vois que l'EA a commencé.

Ce code simple fonctionnera-t-il avec le changement de compte ?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


et la reconnexion exécutera-t-elle ce code lorsque la connexion sera interrompue ?

 
Igor Makanu:

un code simple comme celui-ci fonctionnera-t-il avec un changement de compte ?

Non.

Le fait de se reconnecter lorsque la connexion est interrompue déclenchera-t-il ce code ?

La reconnexion automatique ne le fera pas. Le manuel le fera.

 

La solution est à la surface. Qu'est-ce qui ne change pas sur le graphique lorsque vous le changez ? C'est exact - les objets graphiques. Lorsque le robot démarre, vous créez un objet graphique, que vous supprimez dans DeInit, dans la situation normale, respectivement, dans OnInit vérifier l'objet, s'il existe, alors quelque chose s'est mal passé et retourner INIT_FAILED.

A peu près comme ça :

#define  NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

La solution est à la surface. Qu'est-ce qui ne change pas sur le graphique lorsque vous le changez ? C'est exact - les objets graphiques. Lorsque le robot démarre, vous créez un objet graphique, que vous supprimez dans DeInit, dans la situation normale, respectivement, dans OnInit vérifier l'objet, s'il existe, alors quelque chose s'est mal passé et retourner INIT_FAILED.

A peu près comme ça :

la sauvegarde n'est pas un problème, ici en général nous devons distribuer l'initialisation de l'EA correctement, le cas du changement de compte est le dernier de mes soucis, mais comment le graphique lui-même est lancé et quand le graphique n'est pas prêt est un mystère enveloppé dans l'obscurité ;)))

vérifié en lisant le commentaire... ce n'est pas lisse - ce n'est même pas visible sur "l'écran noir" lors du passage d'un compte à l'autre sur un symbole inexistant ;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

La solution est à la surface. Qu'est-ce qui ne change pas sur le graphique lorsque vous le changez ? C'est exact - les objets graphiques. Lorsque le robot démarre, vous créez un objet graphique, que vous supprimez dans DeInit, dans la situation normale, respectivement, dans OnInit vérifier l'objet, s'il existe, alors quelque chose s'est mal passé et retourner INIT_FAILED.

C'est quelque chose comme ça :

Vous pouvez tout aussi bien utiliser les variables globales du terminal. Ils ne sont pas non plus supprimés.

 
Konstantin Nikitin:

Vous pourriez tout aussi bien utiliser les variables globales du terminal. Ils ne seront pas non plus supprimés.

Des goûts et des saveurs... Je ne les aime pas...

 
Vladimir Simakov:

Pour le goût et la couleur... Je ne les aime pas...

Par exemple, je supprime tous les objets du SDV. Juste ce qui est inutile pour ne pas charger l'horaire. Et il n'y a pas besoin d'eux là-bas. J'utilise des globales. Tout dépend donc de la situation.

Raison: