Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 674
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Chers connaisseurs !
J'espère que je pose une question dans la bonne branche !
La question est la suivante : est-il possible d'utiliser #define pour définir une construction qui se déploierait dans le code suivant :
if(a) printf("%s(%04d)", __FUNCTION__, __LINE__) +printf("%s", _Symbol) ;
C'est pour comprendre... La bonne construction pourrait être différente. Idéalement, j'aimerais trouver une solution pour que tout printf() au début de la chaîne de sortie s'imprime avec la construction "Function(string in function)" précédant la chaîne lorsque la condition correspond. Tout cela pour raccourcir les instructions écrites
Et je voudrais que la construction surlignée en rouge soit remplacée par celle-ci (similaire) :
#define P(a) if(variable>=a) printf("%s(%04d)", __FUNCTION__, __LINE__)
J'ai trouvé quelque chose dans Inet, un peu similaire, mais je n'ai pas travaillé avec des classes, donc je n'arrive pas encore à trouver les codes de fonctionnement. J'ai essayé d'appliquer la construction inférieure dans la forme
P(3)+printf("%s(%s) Accuracy=%d", Symbol, (Command==0 ? "Buy" : "Sell"), Accuracy) ;
Mais toute entrée de ce type dans le code provoque l'erreur 'Print' - l'expression de type 'void' est illégale ...
Bonjour !
Veuillez expliquer la différence entre
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}
и
if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}
Merci !
Bonjour !
Veuillez expliquer la différence entre
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}
и
if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}
Merci !
Il n'y a pas de différence logique. La différence réside uniquement dans la manière dont cette comparaison logique est rédigée.
Le signe " !" est "PAS". Autrement dit, if(!Select()) est identique à if(Select()==false). En russe, cela ressemble à ceci : if(NOT Select()).
Vous pouvez rapidement "inverser" la valeur d'une variable booléenne :
J'ai une autre question. Voici un exemple de programme.
double Lots=0.01 ;
int slippage=30 ;
int Subr1()
{
int result=-1 ;
int_result=OrderSend(_symbol,OP_BUY,Lots,slippage,0,0) ;
if(int_res<0){PrintFormat("OrderSend error = ",GetError());}
retourner int_result ;
}
void OnTick()
{
int numer=-10 ;
if(OrdersTotal()==0)numer=Subr1() ;
si(OrdersTotal()>0)Subr2(numer) ;
retour ;
}
void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket()) ;
}
Réponse : erreur 4051 de OrderSelect. Si je le remplace par SELECT_BY_POS, l'erreur OrderSelect 1. La réaction est la même pour le testeur de stratégie et le "run on real data". J'ai essayé de supprimer MODE_TRADES pour le cas de SELECT_BY_TICKET : il n'y a aucune différence. Quel est le problème et comment le résoudre ? Merci !
Réponse : erreur 4051 de OrderSelect. Si je le remplace par SELECT_BY_POS, l'erreur OrderSelect 1. La réaction est la même pour le testeur de stratégie et le "run on real data". J'ai essayé de supprimer MODE_TRADES pour le cas de SELECT_BY_TICKET : il n'y a aucune différence. Quel est le problème et comment le résoudre ? Merci !
SELECT_BY_POS est la sélection d'une commande "par priorité" dans la liste des commandes et dans votre conception :
Vous essayez de sélectionner une commande qui est par file d'attente de commande # ... et vous utilisez le ticket # ici et vous avez seulement 1 commande et le ticket # 10023444 .... et alors ? ici vous avez besoin d'un nombre de 1 à 2,3 ... bien, combien d'ordres vous avez sur le marché,... corrigez le nombre de 0,1,2 ... - La numérotation commence par 0 dans le tableau et va jusqu'àOrdersTotal()-1
SELECT_BY_TICKET devrait fonctionner, mais seulement jusqu'au moment où vous avez le numéro du ticket, c'est-à-dire l'ordre que vous avez sur le marché, et au-dessus vous avez une vérification pour envoyer l'ordre, et si l'ordre n'est pas envoyé, le ticket = -1 !
Si vous avez décidé d'étudier le système MQL, voici des exemples prêts à l'emploi pour travailler avec des commandeshttps://www.mql5.com/ru/forum/131859.
Vous parlez de tableaux et vous parlez de forex. Quel paradoxe !
Et un idiot sait que tous les tableaux de base dans MT4/MT4 sont mis en mémoire tampon.
Pas le même niveau de programmeurs dans MT4/MT5, pour permettre aux utilisateurs de travailler avec des tableaux de base.
De plus, les tableaux de base dans MT4/MT5 ont leur propre extension (.hts ou .hss - je ne me souviens pas exactement, mais quelque chose comme ça).
Ainsi, ils n'arrivent pas au terminal dans un format texte (avec l'extension .txt), mais dans leur propre format.
Et dans MT4/MT5, les tableaux de base sont décodés et convertis en tableaux d'horizons temporels sélectionnés (1 minute, 5 minutes, 15 minutes, etc.), et ce n'est qu'ensuite qu'ils sont dupliqués et mis en mémoire tampon.
Pourquoi sont-ils mis en mémoire tampon ?
À titre de comparaison. Pour qu'aucune donnée ne soit perdue. L'un de ces tableaux est constamment recalculé (de temps en temps), et le second (copié du premier) est utilisé lorsque nous copions dans nos données utilisateur.
En d'autres termes, la procédure de mise à disposition des données aux utilisateurs est assez complexe.
Il s'agit de tableaux, au cas où cela vous intéresserait.
Au fait, les tableaux MT4/MT5 de base d'Android et de Window ont la même extension.
--------------------------------------------------------------------------------------------------------------------------------
Quant à l'importation de données DYNAMIC dans MT4/MT5 à partir de sources tierces, pour autant que je sache, cette importation n'est pas prévue.
Il n'y a donc pas de procédure Client/Serveur dans C++Builder dans MT4/MT5.
--------------------------------------------------------------------------------------------------------------------------------
Je me demande si cette procédure sera dans la bibliothèque
http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html
Le plus probable, bien sûr, c'est qu'il n'y sera pas non plus.
En d'autres termes, vous pouvez essayer d'importer des tableaux dynamiques dans MT4/MT5 uniquement au format de base, où ils passeront automatiquement par un traitement de données standard.
Et un idiot sait que tous les tableaux de base dans MT4/MT4 sont mis en mémoire tampon.
Les programmeurs de MT4/MT5 ne sont pas du même niveau que ceux de MT4/MT5, qui permettent aux utilisateurs de travailler avec des tableaux de base.
De plus, les tableaux de base dans MT4/MT5 ont leur propre extension (.hts ou .hss - je ne me souviens pas exactement, mais quelque chose comme ça).
Ainsi, ils n'arrivent pas au terminal dans un format texte (avec l'extension .txt), mais dans leur propre format.
Et dans MT4/MT5, les tableaux de base sont décodés et convertis en tableaux d'horizons temporels sélectionnés (1 minute, 5 minutes, 15 minutes, etc.), et seulement après cela, ils sont dupliqués et mis en mémoire tampon.
Pourquoi sont-ils mis en mémoire tampon ?
À titre de comparaison. Pour qu'aucune donnée ne soit perdue. L'un de ces tableaux est constamment recalculé (de temps en temps), et le second (copié du premier) est utilisé lorsque nous copions dans nos données utilisateur.
En d'autres termes, la procédure de mise à disposition des données aux utilisateurs est assez complexe.
Il s'agit de tableaux, au cas où cela vous intéresserait.
D'ailleurs, les tableaux MT4/MT5 de base d'Android et de Window ont la même extension.
Tu as un tel désordre dans ta tête que je n'ai même pas pu dépasser
Vous avez mis le bazar dans MQL - tableaux, fichiers, séries chronologiques et tampons d'indicateurs.
Si vous parvenez à digérer les informations que j'ai données en une ligne, je vais vous donner quelques éléments de réflexion : MT4 et MT5 stockent les données historiques de différentes manières, dans MT4 un utilisateur a accès aux fichiers.hst https://docs.mql4.com/ru/files/fileopenhistory.
Dans MT5, il n'y a pas d'accès direct aux fichiers historiques, mais il est possible de travailler avec des symboles personnaliséshttps://www.mql5.com/ru/docs/customsymbols.
Tu as un tel désordre dans ta tête que je n'ai même pas pu le dépasser.
Vous avez mis le bazar dans tout MQL - tableaux, fichiers et tampons d'indicateurs.
Si vous parvenez à digérer les informations que j'ai données en une ligne, je vais vous donner quelques éléments de réflexion : MT4 et MT5 stockent les données historiques de différentes manières, dans MT4 un utilisateur a accès aux fichiers.hst https://docs.mql4.com/ru/files/fileopenhistory.
Dans MT5, il n'y a pas d'accès direct aux fichiers historiques, mais il est possible de travailler avec des symboles personnaliséshttps://www.mql5.com/ru/docs/customsymbols.
Je n'ai pas dit un seul mot sur les dossiers historiques dans mon message.
Tu as encore mélangé les choses, et encore une fois, tu es hors sujet.
Je parlais d'ensembles de données DYNAMIQUES. C'est un sujet complètement différent. Sentez la différence.
Je n'ai pas du tout parlé des dossiers historiques dans mon message.
Vous êtes encore une fois confus, et encore une fois hors sujet.
Je parlais de tableaux de données dynamiques. C'est un sujet complètement différent.
De plus, les tableaux de base dans MT4/MT5 ont même leur propre extension (.hts ou .hss - je ne me souviens pas exactement, mais quelque chose comme ça).
Ok, allez-y, je ne comprends pas le but de votre présence dans ce forum.
Je parlais d'ensembles de données DYNAMIQUES. C'est un sujet totalement différent. Sentez la différence.
OK, allez-y, je ne comprends pas le but de votre présence sur ce forum.
Je pense que vous devriez également comprendre que dans tous les langages de programmation, les tableaux dynamiques ne sont que des tableaux dynamiques et lesséries temporelles sont desséries temporelles et une partie du travail (accès) avec lesséries temporelles est organisée comme le travail avec les tableaux...C'est ici que la question de la formation des données dans le terminal est discutée en détail :
http://profitraders.com/Python/hstRead.html
Je souhaite attirer l'attention des lecteurs sur le fait que cet article ne concerne PAS les données historiques, qui se trouvent à l'adresse suivante : MT4->Service->Figures Archive,
et directement sur les données DYNAMIQUES du terminal au format .hst, qui sont directement impliquées dans le processus d'obtention et de traitement des cotations du marché.
------------------------------------------------------------------------------------------
Peut-être que je n'ai pas été assez clair. Lire d'autres auteurs. J'espère que cela deviendra plus clair.