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
Besoin d'aide avec la fonction iCustom pour cet EA peut appeler un indicateur personnalisé.
Bonjour à tous,
Je voudrais ajouter cet indicateur (Entry.mq4) à cet EA (swb grid 4.1.0.3_EA) avec la fonction iCustom.
la fonction iCustom pour que moi et nous puissions utiliser cet indicateur dans la stratégie de l'EA.
L'EA utilise déjà 3 indicateurs MT4 : bandes de Bollinger, stochastique et RSI.
des commutateurs, afin que vous puissiez sélectionner l'un ou l'autre ou tous les indicateurs à utiliser, en sélectionnant VRAI ou FAUX.
et je voudrais ajouter ce 4ème indicateur (Entry.mq4) à l'EA.
J'apprécierais beaucoup si quelqu'un pouvait m'aider.
Merci.
L'EA et l'indicateur sont joints ci-dessous.
Noob MQL4 aide nécessaire pour comprendre ce tableau
Salut, codeurs
Quelqu'un voudrait-il m'instruire sur les tableaux légèrement
Ou peut-être ai-je plus de mal à comprendre cette boucle en rapport avec ce tableau.
#property copyright "Unfinished POS by Agent86"
double v1[] ;
double v2[] ;
double val1 ;
double val2 ;
int start()
{
while(i>=0)
{
val1=iFractals(NULL, 0, MODE_UPPER,i) ;
si (val1 > 0)
{
v1=High ;
}
sinon
{
v1=v1 ;
}
val2=iFractals(NULL, 0, MODE_LOWER,i) ;
si (val2 > 0)
{
v2=Low ;
}
sinon v2=v2 ;
i-- ;
}
return(0) ;
}
Il s'agit d'une fractale de base, mais je ne parviens pas à faire référence à un quelconque élément du tableau.
Je veux pouvoir incrémenter i++ d'une manière ou d'une autre et imprimer (v1) ; ou imprimer la valeur précédente avant le 0 ou EMPTY_VALUE.
Si je suis même dans la bonne direction avec ceci.
J'ai des problèmes.
Print (v1) : toujours == 0 et imprime 0
Je comprends en quelque sorte parce qu'il s'agit en fait d'une boucle jusqu'à -1 qui == 0.
Comment et où puis-je placer les instructions d'impression pour que je puisse voir ce qui se passe ?
J'ai essayé des multitudes de méthodes et j'ai réinitialisé i=0 pour tenter une boucle alternative afin de pouvoir me référer aux éléments v1 mais toutes les tentatives ont échoué.
En fait, je veux voir les fractales précédentes ou les marquer comme A haut, B bas, etc. pour une utilisation future possible dans un schéma ABCD de type EA.
Pour l'instant, je veux surtout imprimer la v1 pour pouvoir voir ce qu'elle fait.
Je pourrais peut-être concevoir quelque chose pour sélectionner une fractale précédente comme A_high et/ou B_low ou un schéma de ce genre.
Suis-je sur la mauvaise voie ?
Merci de me conseiller.
Merci
J'opterais plutôt pour une boucle FOR. Les boucles While peuvent conduire à des blocages si vous oubliez d'inclure le i--. Puisque vous connaissez le nombre exact de barres, c'est plus facile à utiliser, de plus le i ne sera jamais < 0. Cela permet d'éviter toute confusion.
For (int i=Bars-1;i>0;i--) {
// code
}
Essayez de définir toutes les valeurs du tableau à 0, puis revenez en arrière et attribuez les valeurs des indicateurs. Essayez également d'utiliser la fonction print() directement après avoir assigné la valeur de votre indicateur. Voyez si elle renvoie quelque chose.
Votre meilleure chance, à mon avis, est d'attribuer une taille au tableau. Disons, 1000 positions. Il est peu probable que vous ayez besoin d'autant, et cela réduira les calculs que vous faites. Tout ce que vous avez à faire est de boucler les 999 dernières barres jusqu'à 0 et d'assigner des valeurs. Je crois me souvenir que MT4 a des problèmes avec les initialisations de tableaux et autres.
Questions sur les tableaux
J'opterais plutôt pour une boucle FOR. Les boucles While peuvent entraîner des blocages si vous oubliez d'inclure le i--. Puisque vous connaissez le nombre exact de barres, c'est plus facile à utiliser, de plus le i ne sera jamais < 0. Cela permet d'éviter toute confusion.
For (int i=Bars-1;i>0;i--) {
// code
}
Essayez de définir toutes les valeurs du tableau à 0, puis revenez en arrière et attribuez des valeurs d'indicateur. Essayez également d'utiliser print() directement après avoir assigné votre valeur d'indicateur. Voyez si elle renvoie quelque chose.
Votre meilleure chance, à mon avis, est d'attribuer une taille au tableau. Disons, 1000 positions. Il est peu probable que vous ayez besoin de ce nombre, et cela réduira les calculs que vous faites. Tout ce que vous avez à faire est de boucler les 999 dernières barres jusqu'à 0 et d'assigner des valeurs. Je crois me souvenir que MT4 a des problèmes avec les initialisations de tableaux et autres.Ok, merci, je vais essayer.
Bien que les instructions while fonctionnent bien, elles ne m'aident pas à obtenir les éléments du tableau que je veux imprimer/afficher, etc.
Je vais travailler sur ce que vous avez dit, faire quelques tests et revenir.
Merci
J'utiliserais plutôt une boucle FOR. Les boucles While peuvent conduire à des blocages si vous oubliez d'inclure le i--. Puisque vous connaissez le nombre exact de barres, c'est plus facile à utiliser, de plus le i ne sera jamais < 0. Cela permet d'éviter toute confusion.
For (int i=Bars-1;i>0;i--) {
// code
}
Essayez de définir toutes les valeurs du tableau à 0, puis revenez en arrière et attribuez des valeurs d'indicateur. Essayez également d'utiliser la fonction print() directement après avoir assigné la valeur de votre indicateur. Voyez si elle renvoie quelque chose.
Votre meilleure chance, à mon avis, est d'attribuer une taille au tableau. Disons, 1000 positions. Il est peu probable que vous ayez besoin de ce nombre, et cela réduira les calculs que vous faites. Tout ce que vous avez à faire, c'est de parcourir en boucle les 999 dernières barres jusqu'à 0 et d'assigner des valeurs. Je crois me souvenir que MT4 a des problèmes avec les initialisations de tableaux et autres.J'imprime toujours le tableau avec toutes les entrées à 0.
Étrange
Argent86,
Il y a quelques erreurs dans votre code :Voici ce que vous essayez de faire sans ces problèmes
Accéder depuis MQ4 à une fonction dll avec : des listes d'arguments variables
Bonjour,
Quelqu'un sait si c'est possible : importer une fonction dll qui utilise comme argument une : liste à arguments variables
Par exemple, vprintf - Référence C
int vprintf ( const char * format, va_list arg ) ;
Si oui, comment faire ?
Merci
MJ
Comment appeler une fonction sans valeur de retour
Bonjour les gars et les filles.
A un moment donné dans mon programme, j'aimerais appeler une fonction.
Cependant, la fonction n'a pas de valeur de retour (void). Alors comment puis-je appeler la fonction,
pour qu'il exécute le code à l'intérieur de la fonction exactement à l'endroit où je l'appelle,
comme s'il avait été écrit à cet endroit même ?
J'ai fait un exemple de code ci-dessous ... où je vérifie certains paramètres, et si Ok, je veux exécuter la fonction ...
J'espère que quelqu'un pourra m'aider, tx par avance, Jonkie76
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (Price >= PRICE_CLOSE)
call function ; // A ce stade, j'aimerais appeler la fonction, comment faire ?
sinon
Alert("Ne rien faire") ; //
//----
return(0) ;
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNCTIONS
//===================================================================+
//----------------------- FONCTION DE FERMETURE DE L'ORDRE ----------------------+
void subCloseOrder()
{
int
i,
total = 0,
ticket = 0,
err = 0,
c = 0 ;
total = OrdersTotal() ;
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
cas OP_BUY :
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet) ;
err=GetLastError() ;
si(err==0)
{
si(ticket>0) break ;
}
sinon
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Erreurs d'occupation
{
Sleep(5000) ;
continuer ;
}
else //erreurs normales
{
if(ticket>0) break ;
}
}
}
pause ;
}
}
}
}
C'est très simple. Il suffit de l'appeler comme il renverrait quelque chose, mais vous n'avez pas besoin de sauvegarder le résultat car il n'y a pas de résultat du tout avec le type void. (ne renvoie rien) Comme ceci :
int start()
{
//----
if (Price >= PRICE_CLOSE)
subCloseOrder(); // At this point I'd like to call the function.How do I do that?
else
Alert("Do nothing"); //
//----
return(0);
}
Utilisez "void" à la place. Comme ceci :
{
...
//
//
// no need to place return at the end, but if you want then use "just" return, like this
//
//
return;
}Void signifie que la fonction ne va pas renvoyer de valeur et qu'elle devient ainsi une procédure et non une fonction.
Bonjour les gars et les filles.
À un moment donné dans mon programme, j'aimerais faire appel à une fonction.
Cependant, la fonction n'a pas de valeur de retour (void). Alors comment puis-je appeler la fonction,
pour qu'il exécute le code à l'intérieur de la fonction exactement à l'endroit où je l'appelle,
comme s'il avait été écrit à cet endroit même ?
J'ai fait un exemple de code ci-dessous ... où je vérifie certains paramètres, et si Ok, je veux exécuter la fonction ...
J'espère que quelqu'un pourra m'aider, tx par avance, Jonkie76
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (Price >= PRICE_CLOSE)
call function ; // A ce stade, j'aimerais appeler la fonction, comment faire ?
else
Alert("Ne rien faire") ; //
//----
return(0) ;
}
//+------------------------------------------------------------------+
//===================================================================+
//FUNCTIONS
//===================================================================+
//----------------------- FONCTION DE FERMETURE DE L'ORDRE ----------------------+
void subCloseOrder()
{
int
i,
total = 0,
ticket = 0,
err = 0,
c = 0 ;
total = OrdersTotal() ;
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
cas OP_BUY :
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet) ;
err=GetLastError() ;
si(err==0)
{
si(ticket>0) break ;
}
sinon
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Erreurs d'occupation
{
Sleep(5000) ;
continuer ;
}
else //erreurs normales
{
if(ticket>0) break ;
}
}
}
pause ;
}
}
}
}