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
J'essaie d'apprendre MQ4. Mon premier programme simple est censé déclencher une alerte lorsque 2 MAs se croisent. Je n'arrive pas à comprendre pourquoi
ce code ne fonctionne pas.
Toute aide sera vraiment appréciée ! Merci d'avance.
extern int Period_MA1 = 5 ;
extern int Période_MA2 = 1 ;
double MA1 ;
double MA2 ;
int init()
{
retour(0) ;
}
//+------------------------------------------------------------------+
int deinit()
{
return(0) ;
}
//+------------------------------------------------------------------+
int start()
{
//--------------------------------------------------------------------
MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0) ;
MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0) ;
//--------------------------------------------------------------------
si (MA2 == MA1 )
Alert("Le prix est le même(",Period_MA2,").");// Alerte
retour ;
}Bonjour Lincoln2012,
Je pourrais vérifier le code de ce Ma Cross.
J'essaie d'apprendre MQ4. Mon premier programme simple est censé déclencher une alerte lorsque 2 MAs se croisent. Je n'arrive pas à comprendre pourquoi
ce code ne fonctionne pas.
}La clé pour coder un croisement de 2 lignes d'indicateurs est ce concept :
1. Si la ligne1>ligne2 de la barre actuelle et la ligne1<ligne2 de la barre précédente, alors il y a un croisement vers le haut.
2. Si la ligne de la barre actuelle1<ligne2, alors il y a un croisement à la baisse.
Bonjour
J'ai fait un peu de programmation dans Mt4, c'est amusant mais je ne suis pas un pro, juste une simple édition d'un ancien indicateur. Ok je veux faire un indicateur simple mais je ne sais pas comment le faire.
Son indicateur simple vérifie simplement la valeur si la valeur de toutes les variables est la même, il dessine le point où la valeur de toutes les variables correspond.
ma solution simple
Supposons que nous ayons des variables
double movingavg1 ;
double movingavg12 ;
double movingavg13 ;
double movingavg14 ;
double movingavg15 ;
double movingavg16 ;
double movingavg17 ;
double movingavg18 ;
double movingavg19 ;
double movingavg10 ;
double movingavgall ;
nous déclarons la variable, je donne juste un exemple, j'utilise iStochastic(1), mais nous pouvons utiliser n'importe quel indicateur.
movingavg12=iStochastic(1)
movingavg13=iStochastic(2)
.
.
.
et ainsi de suite
maintenant
if (movingavg12=movingavg13=movingavg14,....) (mettre la valeur dans la variable "movingavgall") //mettre la valeur qui est égale pour vria
dessinez la variable "movingavgall" sur les barres
Application
Supposons que je veuille vérifier si la moyenne mobile 3 et la moyenne mobile 5 ont la même valeur.
même cet indicateur peut être utilisé avec le RSI où les valeurs RSI 1 et RSI 2 = 80
et bien d'autres encore
Même si nous ajoutons la MTF, ce sera un bonus supplémentaire.
cela semble simple à l'écrit mais je n'ai pas pu trouver la solution, j'espère que quelqu'un pourra m'aider
J'espère que vous comprenez ce que je dis.
merciUne fois que vous avez des valeurs à comparer, vous pouvez utiliser un code similaire au suivant.
Lavérification de l'égalité des valeurs utilise ==. Un seul = est utilisé pour attribuer une valeur à une variable.
Pour vérifier plus d'un ensemble, il faut utiliser && pour signifier AND.
a = 0 ;
si ((a == b) && (b == c) && (c == d)) movingavgall = a ;
Vous pouvez ensuite vérifier si movingavgall a une valeur avec
if (movingavgall != 0)
{
// faites quelque chose ici
}
Faites une recherche sur la programmation metatrader à l'aide de Google.
Vous devriez trouver plusieurs bons tutoriels pour la programmation dans MT4.
Un bon livre sur la programmation en C vous sera également utile.
Robert Hill alias MrPip
simplifier ce code
Bonjour à tous !
J'essaie de simplifier ce code en utilisant la commande stringconcatenate à partir de ceci :
ObjectSetText("uitog1v", StringConcatenate("/\\\ ", uitog1v, "%"),12, hr1v, DodgerBlue ) ;
à ceci :
ObjectSetText("uitog1v", StringConcatenate("/\\\ ", uitog1v, "%","/\\\ ", uitog2v, "%","/\\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue ) ;
J'espère que quelqu'un pourra m'aider.
Meilleures salutations
doc
trend_alexcud_v_2men.mq4
...
Doc
Si vous avez besoin de tous ces éléments, il n'y a pas de manière plus simple de l'écrire
Bonjour à tous !
J'essaie de simplifier ce code en utilisant la commande stringconcatenate à partir de ceci :
ObjectSetText("uitog1v", StringConcatenate("/\\\ ", uitog1v, "%"),12, hr1v, DodgerBlue ) ;
à ceci :
ObjectSetText("uitog1v", StringConcatenate("/\\\ ", uitog1v, "%","/\\\ ", uitog2v, "%","/\\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue ) ;
J'espère que quelqu'un pourra m'aider.
Meilleures salutations
doc
trend_alexcud_v_2men.mq4Comment faire : Alerte toutes les 60 secondes
Comment puis-je créer un code qui, par exemple, me donne une alerte toutes les 60 secondes ?
J'ai créé ce code ci-dessous, mais il me donne une alerte toutes les minutes à partir du moment où je l'attache au graphique et je veux qu'il suive le temps du courtier pour qu'il m'alerte par exemple toutes les 60 secondes.
#include
#include
// exported variables
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int ExpectedTime2 = 0;
int init()
{
NDigits = Digits;
ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && true) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
OncePerMinutes2();
}
void OncePerMinutes2()
{
int datetime800 = TimeLocal();
if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1; // reset paused time
}
if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1;
Alert3();
}
}
void Alert3()
{
Alert("One minute gone");
}
int deinit()
{
if (true) ObjectsDeleteAll();
}
Doc Si vous avez besoin de tous ces éléments, il n'y a pas de moyen plus simple de l'écrire
Uhm, pas de chance cette fois, merci quand même.
Meilleures salutations
doc
Il y a un problème avec le deuxième appel de StringConcatenate.
Vous additionnez 3 noms de police différents et le résultat ne sera pas valide.
Robert
Bonjour à tous !
J'essaie de simplifier ce code en utilisant la commande StringConcatenate à partir de ceci :
ObjectSetText("uitog1v", StringConcatenate("/\\\ ", uitog1v, "%"),12, hr1v, DodgerBlue ) ;
à ceci :
ObjectSetText("uitog1v", StringConcatenate("/\\\ ", uitog1v, "%","/\\\ ", uitog2v, "%","/\\ ", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue ) ;
J'espère que quelqu'un pourra m'aider.
Meilleures salutations
doc
trend_alexcud_v_2men.mq4Besoin d'aide avec l'EA ... les transactions ne sont pas fermées dans le testeur
Je travaille sur un EA, mais quoi que je fasse, je n'arrive pas à le faire fermer les transactions. Il les ouvre bien, mais quand je veux les fermer, il ne le fait pas.
Je vais afficher une partie du code de mon EA afin que l'un de vos codeurs expérimentés puisse comprendre pourquoi j'ai ce problème. Les variables 'buyTrade' et 'sellTrade' sont globales à toute l'EA.
NOTE : Je ne veux qu'UNE seule transaction ouverte à tout moment, qu'elle soit longue ou courte. Les transactions sont "toujours ouvertes", donc lorsqu'un signal de position longue est émis, la position courte existante doit être fermée et vice versa.
Ce n'est PAS ce qu'il fait. Ce qu'il fait, c'est ouvrir des positions, puis en ouvrir d'autres... et en ouvrir d'autres encore... et les garder ouvertes jusqu'à ce qu'elles atteignent toutes leurs stops.
Merci d'avance
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);...
Puisqu'il s'agit d'un code partiel, essayez de remplacer symBid par symAsk lors de la clôture d'un ordre de vente et symAsk par symBid lors de la clôture d'un ordre d'achat (inversez les prix de clôture, vous ne pouvez pas clôturer une vente au prix d'achat et vous ne pouvez pas clôturer un achat au prix de vente).
Je travaille sur un EA, mais quoi que je fasse, je n'arrive pas à le faire fermer des transactions. Il les ouvre très bien, mais lorsque je veux les fermer, l'EA ne le fait pas.
Je vais poster une partie du code de mon EA afin que l'un de vos codeurs expérimentés puisse comprendre pourquoi j'ai ce problème. Les variables 'buyTrade' et 'sellTrade' sont globales pour toute l'EA.
NOTE : Je ne veux qu'UNE seule transaction ouverte à tout moment, qu'elle soit longue ou courte. Les transactions sont "toujours ouvertes", donc lorsqu'un signal de position longue est émis, la position courte existante doit être fermée et vice versa.
Ce n'est PAS ce qu'il fait. Ce qu'il fait, c'est ouvrir des positions, puis en ouvrir d'autres... et en ouvrir d'autres encore... et les garder ouvertes jusqu'à ce qu'elles atteignent toutes leurs stops.
Merci d'avance
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);