[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 72

 

http://www.soft-sib.ru/articles/programs/10/

Un autre avantage de l'utilisation du SGBD et de l'architecture client-serveur par rapport à l'approche fichier-serveur est la possibilité d'utiliser un mécanisme transactionnel de manipulation des données. Ce service, fourni par le serveur de données, permet de combiner plusieurs actions de modification de données en une seule opération indivisible (transaction). L'utilisation de transactions assure une protection fiable des informations contre les défaillances matérielles et logicielles, tant du côté client que du côté serveur du SI.

 
Oui, soit je suis invisible, soit personne ne veut aider ou ne peut aider.
 
PerlOF:


Le manuel et le tutoriel soulignent la nécessité de se connecter à un serveur (pour l'EA, les scripts, les indicateurs).

Est-il possible d'appeler des fonctions spéciales sans se connecter au serveur (en principe) ?


Oui, c'est vrai. Le serveur, en fait, est nécessaire pour recevoir un tick qui lance la fonction start().

start() - fonction principale. Il est appelé par les experts après la réception du prochain tick. Pour les indicateurs personnalisés, il est appelé pendant le recalcul après avoir attaché l'indicateur au graphique, à l'ouverture du terminal client (si l'indicateur est attaché au graphique), ainsi qu'après l'arrivée du prochain tick. Dans les scripts, il est exécuté immédiatement après l'attachement au graphique et l'initialisation. S'iln'y a pas de fonction start() dans le module, ce module (Expert Advisor, script ou indicateur personnalisé) ne peut pas être lancé.

Le script peut fonctionner dans une boucle infinie, et donc il n'a pas besoin de ticks, les ticks sont nécessaires pour les indicateurs et les Expert Advisors (dans la configuration standard (parce que les Expert Advisors peuvent aussi fonctionner dans une boucle infinie)).

Mais les tiques peuvent être provoquées artificiellement - avec VINAPI. En outre, il existe une fonction standard telle que le testeur de stratégie (qui est également capable de générer des ticks).

Il vous suffit d'utiliser votre cerveau et de faire une RECHERCHE SUR LE SITE (FORUM).

Et ne pas introduire les avantages ou les inconvénients de la technologie des serveurs de fichiers.

 
MXDEEM:

Bonjour, j'ai ce code, vérifier la présence d'ordres, si j'ai un ordre ouvert, alors vérifier à nouveau et ainsi de suite, jusqu'à ce que l'ordre atteigne 0. Mais l'expert ignore clairement ce code et ouvre un nombre infini d'ordres, s'il vous plaît conseiller quelle est l'erreur ?

int FunctionBUYnext()
{
int b=OrdersTotal() ;
si (b>0)
{FonctionBUYnext();}
else {FunctionSELL();}
}



Navigateur du forum de la communauté MQL4
RèglesRechercheComment posterAdministration du forumSignaler un abusClub des télépathes
Les questions à ne pas poser
Comment poser les bonnes questions
Littérature utileLogiciels utilesRecherche d'un indicateur (conseiller expert ou script)
 

Il est nécessaire de tracer une ligne dans un Trading Expert Advisor en utilisant la fonction iCustom.
J'ai utilisé ZigZag comme test :

for(int cnt=0; cnt<10000; cnt++) {
   double zigzag1=iCustom(NULL,0,"ZigZag",15,0,3,  0,cnt+1);
   if( zigzag1!=0 ) 
      break;
}


Puisque le but d'iCustom dans mon cas est seulement de dessiner une ligne
(les données de l'indicateur ne sont pas utilisées dans l'Expert Advisor ), j'ai décidé de mettre le code dans deinit(). Mais il n'y fonctionne pas et ne tire rien.
Dans start(), tout est OK.
1. Pourquoi cela ne fonctionne pas dans deinit() ?
2. Vous devez éviter d'exécuter le code ci-dessus de manière insensée lorsque vous testez et optimisez
(pour éviter de gaspiller du temps CPU) et ne le faire exécuter que sur la dernière barre de l'historique testé.
- Comment y parvenir ?
Merci !
 
Roll:

Le code est absurde.

POURQUOI ? TOUT CE QUI EST ENSEIGNÉ
 
MXDEEM:

POURQUOI ? ?? TOUS POURQUOI ?

C'est étrange la façon dont on vous a appris...

Où les fonctions sont-elles appelées depuis le corps de votre "code" ?

Le "code" lui-même est assez drôle aussi...

int FunctionBUYnext()
{
int b=OrdersTotal();
if (b>0)
{FunctionBUYnext();}
else {FunctionSELL();}
} 

En utilisant un appel à lui-même... Pourquoi ne pas simplement quitter FunctionBUYnext() lorsqu'il n'y a pas d'ordre ?

En outre - pas de contrôle du type d'ordre, pas de contrôle du symbole et de la magie...

J'enverrais votre "professeur" au rack...

 

Face à un problème...

Le script fonctionne avec la fonction MessageBox() sous cette forme

//+------------------------------------------------------------------+

#include <WinUser32.mqh>
#import "user32.dll"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int result = MessageBox("Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION);
   if(result != IDYES) Alert("Кнопка да не нажата");
//----
   return(0);
  }
//+------------------------------------------------------------------+

Mais il échoue complètement lorsqu'il utilise la fonction non documentée MessageBoxTimeoutA():

//+------------------------------------------------------------------+

#include <WinUser32.mqh>
#import "user32.dll"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int result = MessageBoxTimeoutA(0, "Are you ok?", "Caption",MB_YESNO|MB_ICONQUESTION, 0, 10000);
   if(result != IDYES) Alert("Кнопка да не нажата");
//----
   return(0);
  }
//+------------------------------------------------------------------+

Même une fenêtre de message avec des boutons Oui/Non ne s'affiche pas.

Qui l'a rencontré - dites-moi où le chien est enterré ?

 
artmedia70:

C'est étrange la façon dont on vous a appris...

Où les fonctions sont-elles appelées depuis le corps de votre "code" ?

Le "code" lui-même est assez drôle aussi...

En utilisant un appel à lui-même... Pourquoi ne pas simplement quitter FunctionBUYnext() lorsqu'il n'y a pas d'ordre ?

En outre - pas de contrôle du type d'ordre, pas de contrôle du symbole et de la magie...

J'enverrais votre "professeur" au rack...

J'EXPLIQUE LE SENS, IL S'APPELLE LUI-MÊME PARCE QUE VOUS AVEZ BESOIN D'UN CHÈQUE DANS CETTE PARTIE, SI VOUS FAITES UN RETRAIT, IL REVIENDRA À NOUVEAU AU DÉBUT DE L'EXÉCUTION, JE N'EN AI PAS BESOIN, LE SYMBOLE ET LE MAGICIEN NE SONT PAS CONSIDÉRÉS, MON PROFESSEUR INTERNET)))). SI CE N'EST PAS DIFFICILE, VEUILLEZ M'ENVOYER QUELQUE CHOSE DE SIMILAIRE MAIS QUI FONCTIONNE, L'IDÉE PRINCIPALE - NE PAS FAIRE SAVOIR S'IL Y A UNE COMMANDE, SINON PASSER À UNE FONCTION SPÉCIFIQUE.

 
MXDEEM:

J'EXPLIQUE LE SENS, S'APPELLE PARCE QUE NOUS AVONS BESOIN D'UN CONTRÔLE DANS CETTE PARTIE, SI VOUS SORTEZ IL VA REVENIR À NOUVEAU À L'EXÉCUTION DE DÉPART, JE N'EN AI PAS BESOIN, LE SYMBOLE ET LE MAGICIEN NE SONT PAS PRIS EN COMPTE, MON PROFESSEUR INTERNET)))) SI CELA NE VOUS DÉRANGE PAS D'ENVOYER QUELQUE CHOSE DE SIMILAIRE MAIS QUI FONCTIONNE, L'IDÉE PRINCIPALE - NE PAS LAISSER SUR SI L'ORDRE, SI NON, PUIS PASSER À UNE FONCTION SPÉCIFIQUE.

Oh, ne crie pas si fort... Je pense que vous avez CapsLock coincé... La taille de la police devrait être doublée, et elle serait en gras...

C'est juste un... une parenthèse.

Maintenant, laissez-moi vous l'expliquer :

Je vais expliquer le point. En faisant un appel récursif, vous faites en sorte que votre EA boucle exactement à cette partie... En d'autres termes, s'il existe des ordres ou des positions sur le marché, l'EA doit se bloquer et ne rien faire (juste se bloquer) jusqu'à ce que vous supprimiez manuellement tous les ordres et fermiez les positions ? Alors quel est l'intérêt d'un tel trading automatisé, si l'EA reste en place sans votre intervention ?

Reconsidérer votre approche de la logique de l'EE

Raison: