Comment coder ? - page 179

 
Roger09:
J'ai essayé plusieurs fois sur le compte Alpari, sans erreur. Juste une fois, quand je mets le script dans le répertoire des experts et que je le lance en tant qu'EA.

C'est parce que je vous ai posé des questions sur les répertoires.

Désolé.

Je pense avoir trouvé le problème. Je suis sous Windows Vista et j'ai l'habitude d'exécuter en tant qu'administrateur. J'ai essayé sans cela et cela semble fonctionner correctement maintenant.

 

Passage d'un tableau de MT4 .mq4 à une DLL C++.

J'ai besoin d'aide.

J'ai un problème pour passer un tableau unique qui contient 8 valeurs d'indicateurs à une DLL C++. C'est très simple mais il semble que j'obtienne -1 lorsque j'appelle la fonction

Forexindex() qui appelle en fait la fonction importée gepModel ( d [] ) de la DLL . La fonction ForexIndex devrait retourner 0 ou 1 depuis la DLL.

Je soupçonne que je fais quelque chose de mal dans le fichier .mq4 dans la fonction Forexindex(). Toute aide sera très appréciée. Voici le code simple. Le fichier DLL C++ est correct, il se compile sans erreur, le problème vient donc du fichier mq4.

================================MQ4 file====================

#Importation de "JadeClass.dll".

int gepModel( double& d[] ) ;

#Importation

int start()

{

........

........

........

ForexIndex() ;

.......

......

......

.....

}

int ForexIndex()

{

int monindex ;

double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol ;

int counted_bars=IndicatorCounted() ;

si (counted_bars<0) return(-1) ;

si (counted_bars>0) counted_bars-- ;

int pos=Bars-counted_bars ;

MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_High = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0) ;

Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0) ;

Rsi = iRSI(NULL,PERIOD_M5,10,0,0) ;

Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0,0) ;

Vol = iVolume(NULL,PERIOD_M5,0) ;

while(pos>=0)

{

ind[0] = MA_Close ;

ind[1] = MA_High ;

ind[2] = MA_Low ;

ind[3] = MA_Open ;

ind[4] = Macd ;

ind[5] = Rsi ;

ind[6] = Stoch ;

ind[7] = Vol ;

myindex = gepModel(ind) ;

pos-- ;

}

Print( " Myindex = " , myindex) ;

return (myindex) ;

}

=========================DLL Code source ===========================

#include "stdafx.h" (anglais)

#include "JadeClass.h" (anglais)

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

#define MT4_EXPFUNC __declspec(dllexport)

// Le seul et unique objet CJadeClassApp

CJadeClassApp theApp ;

MT4_EXPFUNC int __stdcall gepModel(double d[]) ;

MT4_EXPFUNC int __stdcall gepModel(double d[])

{

.....

.....

.....

.....

}

============================ Le fichier Def pour le code source de la DLL ===================

; JadeClass.def : Déclare les paramètres du module pour la DLL.

BIBLIOTHEQUE "JadeClass

EXPORTS

; Les exportations explicites peuvent aller ici

gepModel

========================================

 

Besoin d'aide pour ajouter du code pour un seul trade par signal

Je suis en train d'apprendre le code mq4 et j'ai passé de nombreuses heures à essayer de comprendre comment coder une seule transaction par signal. J'ai essayé plusieurs méthodes mais je n'arrive pas à faire en sorte qu'il n'y ait qu'une seule transaction. Par exemple, si le TP est atteint, il place un autre trade du même côté parce que le signal est toujours bon. J'aimerais qu'il attende jusqu'à ce que le signal inverse se produise, puis qu'il effectue cette transaction. J'ai joint l'EA ici sans aucune de mes modifications. Merci d'avance pour votre aide. Marty

Dossiers :
 
martypatty:
Je suis en train d'apprendre le code mq4 et j'ai passé de nombreuses heures à essayer de comprendre comment coder un seul trade par signal. J'ai essayé plusieurs méthodes mais je n'arrive pas à faire en sorte qu'il n'y ait qu'une seule transaction. Par exemple, si le TP est atteint, il place un autre trade du même côté parce que le signal est toujours bon. J'aimerais qu'il attende jusqu'à ce que le signal soit inversé et qu'il effectue ensuite cette transaction. J'ai joint l'EA ici sans aucune de mes modifications. Merci d'avance pour votre aide. Marty

J'ai découvert comment le faire récemment sur mql4.com après avoir eu des problèmes avec trop de transactions ouvertes sur une barre. Les articles de mql4 m'ont beaucoup aidé au début, et ils ont une base de données de codes qui vous donne de bons exemples pour travailler. Il suffit d'utiliser la fonction de recherche et de cliquer sur le bouton d'affichage des messages, ce qui vous évite de parcourir des pages et des pages d'un sujet pour trouver la réponse dont vous avez besoin. Pour votre problème, utilisez ce code :

int BarsCount=0;

if(Bars<BarsCount)

{

//Code to do once goes here

BarsCount=Bars;

}

[/CODE]

Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.

[CODE]for(i=0;i<=STD_MA_Period+1;i++)

{

STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);

}

Print(STD_MA_Buffer[1]);

PS double STD_MA_Buffer[] ; est défini dans la section des variables globales.

 

corrigez mon EA, s'il vous plaît

j'ai une idée mais je ne peux pas l'écrire en code mql4, pouvez-vous m'aider ? ???

Voici mon problème

Voici la définition de mon système :

A. si orders=0 >> OP buy && OP sell

B. faire une grille par condition + ou -

ex. si OPbuy + grille = OPbuy

si OPbuy - grille = OPsell

même chose pour OPsell

C. si profit > 0 && profit > profit minimum (verrouillage du profit)

arrêtez n'importe quel ordre (OP buy || OP sell) et déplacez l'équité de suivi ou le point de profit.

D. Fermez par le profit, par l'équité ou par le point.

E. Format .mq4 car je veux savoir où est ma faute.

J'ai un problème sur le point B. S'il vous plaît, aidez-moi.

 
mazgen:
J'ai une idée mais je ne peux pas l'écrire en code mql4, pouvez-vous m'aider ???

Voici mon problème

Voici la définition de mon système :

A. si orders=0 >> OP buy && OP sell

B. faire une grille par condition + ou -

ex. si OPbuy + grille = OPbuy

si OPbuy - grille = OPsell

même chose pour OPsell

C. si profit > 0 && profit > profit minimum (verrouillage du profit)

arrêtez n'importe quel ordre (OP buy || OP sell) et déplacez l'équité de suivi ou le point de profit.

D. Fermez par le profit, par l'équité ou par le point.

E. Format .mq4 car je veux savoir où est ma faute.

J'ai un problème sur le point B. S'il vous plaît aidez-moi

Pourquoi ne pas envoyer le code source au lieu de l'ex4 ?

 
figurelli:
Que diriez-vous d'envoyer le code source au lieu de l'ex4 ?

montre-moi juste comment le coder,

C'est ma dernière déclaration détaillée.

fix this.rar

J'espère qu'il peut comprendre mon EA, le problème que la boucle sur OP vendre pourquoi ???

 

Question sur laligne de tendance

Je suis nouveau dans le codage et je fais des choses pour m'entraîner. Je voulais arrêter une ligne de tendance à la barre actuelle. Ce que j'ai trouvé, c'est de simplement changer la couleur de la ligne de tendance à la barre actuelle en couleur de fond. En fait, j'ai simplement fait passer la ligne au-delà de la barre en arrière-plan et l'ai fait disparaître à ce moment-là.

Je demande donc maintenant aux experts quelle est la bonne façon de procéder. Je sais qu'il y a plusieurs façons d'accomplir la même chose, donc je cherche simplement à voir d'autres idées sur ce que j'aurais pu faire, dans le but d'en apprendre davantage.

Merci

 

Comportement très étrange du code MQL

Bonjour à tous,

Version Metatrader : 4.00 Build 224 (15 mai 2009)

Metaeditor Version : 4.00 Build 224 (14 mai 2009)

J'ai rencontré un bug très étrange dans MQL qui m'a complètement déconcerté, à tel point que je suis en train de revoir TOUT mon ancien code pour m'assurer qu'il est écrit pour éviter ce problème.

J'espère que quelqu'un pourra m'éclairer sur ce qui se passe exactement ici.

Voici le code, un simple indicateur qui ne fait essentiellement rien. Cependant, dans la section init(), j'ai placé un appel à 2 fonctions lorsque la période du graphique est H1.

Les deux fonctions sont identiques en tous points sauf un. L'une a un tableau d'int statique défini et l'autre a un tableau d'int non statique défini. Tout ce que font les fonctions est d'imprimer la taille de leur tableau défini localement, d'assigner des valeurs aux éléments du tableau et de les imprimer.

#property indicator_chart_window

void afunc() {

int i;

int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc array["+i+"]="+array);

}

}

void afunc_static() {

int i;

static int array[4];

array[0] = 100;

array[1] = 101;

array[2] = 102;

array[3] = 103;

Print("afunc_static array[4] size="+ArraySize(array));

for (i = 0; i < 4; i++) {

Print("afunc_static array["+i+"]="+array);

}

}

int init() {

if (Period() == PERIOD_H1) {

afunc();

afunc_static();

}

return(0);

}

int deinit() {

return(0);

}

int start() {

return(0);

}

Si vous regardez le code, il ne devrait jamais y avoir de circonstance où les deux fonctions se comportent différemment l'une de l'autre.

Cependant, si j'attache l'indicateur à un graphique M5 et que je passe ensuite à l'échelle de temps H1, j'obtiens le résultat suivant.

2009.05.23 18:12:47 afunc EURUSD,H1: initialized

2009.05.23 18:12:47 afunc EURUSD,H1 : afunc_static array[3]=103

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc_static array[2]=102

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc_static array[1]=101

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc_static array[0]=100

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc_static array[4] size=4

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc array[3]=0

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc array[2]=0

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc array[1]=0

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc array[0]=0

23.05.2009 18:12:47 afunc EURUSD,H1 : afunc array[4] size=0

2009.05.23 18:12:47 afunc EURUSD,M5 : uninit reason 3

23.05.2009 18:12:47 afunc EURUSD,M5 : désinitialisé

23.05.2009 18:12:45 afunc EURUSD,M5 : initialisé

23.05.2009 18:12:43 afunc EURUSD,M5 : chargé avec succès

Remarquez que même si j'ai défini 'int array[4]' dans afunc(), la taille de ce tableau est en fait ZERO et je ne peux pas attribuer de valeurs aux éléments du tableau. Cette fonction ne fonctionne manifestement pas comme prévu.

Remarquez que j'ai défini 'static int array[4]' dans afunc_static() et que la taille est correctement indiquée comme étant 4, tout comme les valeurs que j'ai assignées aux éléments du tableau. Cette fonction fonctionne bien.

Conclusion. Si vous définissez un tableau non statique dans une fonction et que cette fonction n'est pas appelée par votre indicateur, vous pourriez avoir un problème.

Si, par la suite, vous changez l'horizon temporel du graphique et que vous appelez la fonction, la taille de tout tableau défini localement dans la fonction sera égale à zéro, indépendamment de la taille que vous avez définie pour les tableaux.

La seule façon de contourner ce problème est de s'assurer que tous les tableaux définis localement dans vos fonctions sont définis comme étant des tableaux statiques. Je sais, mais je ne vois pas d'autre moyen d'éviter ce problème.

J'apprécierais vraiment tout commentaire sur cette question.

Je vous remercie,

Laurence.

Dossiers :
afunc.mq4  1 kb