Comment coder ? - page 279

 
g.pociejewski:
[Une autre question : votre heure est-elle GMT ou non ? Si l'heure n'est pas GMT, j'apporterai quelques modifications à cet EA.

Je viens de le faire, s'il vous plaît, vérifiez-le et envoyez-moi un message si tout est correct.

La distance entre les beetwen low et high stopLoss et TP que j'ai fait comme variabels externes.

Merci Grzesiek[/lang].

Cher Grzesiek

J'ai collé cet indicateur dans le dossier des experts et aujourd'hui j'ai suivi pour apprendre comment il fonctionne. Le problème qu'il a est qu'une fois qu'il fait le premier trade et qu'il ferme l'ordre soit sur le stop ou le t/p alors immédiatement l'EA recommence le trade sur le prix qu'il a fermé l'ordre récent. Comment puis-je l'arrêter dans le code ? Merci.

 

Quelqu'un peut m'aider ?

Bonjour Forum

Ce code a un problème, quand il exécute la transaction, c'est OK mais quand il ferme l'ordre à nouveau, EA ouvre une nouvelle transaction au prix et au moment où l'ordre précédent a été fermé. Je n'ai pas vu d'erreur dans le code. La personne qui a écrit ceci est très occupée et n'est pas en ligne. Quelqu'un peut-il me dire quel est le problème ?

extern double stopLoss = 35.0 ;

extern double takeProfit = 50.0 ;

extern string Begin="00:00" ;

extern string End="08:00" ;

extern double distance = 5 ;

bool isECN = true ;

bool cond = false ;

bool cond2 = false ;

double low ;

double high ;

extern double lots = 1 ;

int magic = 123 ;

int slippage = 1 ;

string comment = "test" ;

int ticket ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int start()

{

//----

if(isGoodTime(Begin,End))

{

si(!cond)

{

low = Bid ;

high = Ask ;

}

cond = true ;

if(Bid < low) low = Bid ;

si(Ask > high) high = Ask ;

}

si((high - low)*1000>distance)

{

cond2 = true ;

}

if(!isGoodTime(Begin,End))

{

cond = false ;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0010))

{

si(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic) ;

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0) ;

}

}

}

si(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.0010)

{

si(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic) ;

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0) ;

}

}

}

}

//----

retour(0) ;

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true) ;

}

return(false) ;

}

int countOrders(int oMagic,int oType) {

int count=0 ;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

compte++ ;

}

}

}

}

}

return(count) ;

}

double sltpValue(double w1, int w2)

{

si(w2 == 0)

return(0) ;

return (NormalizeDouble(w1, Digits)) ;

}

 

Bonjour Avasys,

Pour autant que je puisse dire, il n'y a pas de problème avec le code, d'après votre description, il fait exactement ce qu'il est programmé pour faire (acheter quand la demande est plus élevée que le haut et vendre quand l'offre est inférieure au bas), il continue à acheter et à vendre quand le haut et le bas sont cassés, respectivement.

Merci,

 
Avasys:
Merci pour votre commentaire

Existe-t-il un moyen de dire au code de ne trader qu'une fois par jour et seulement au premier break out.

L'auteur de ce code est un homme très occupé qui n'a pas pu consacrer beaucoup de temps à ce projet.

l'aide est appréciée

[lang=pl]//+------------------------------------------------------------------+

//| simple EA.mq4 |

//| Copyright © 2011, luktom.biz |

//| www.luktom.biz/en |

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

#property copyright "Copyright © 2011, luktom.biz."

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0 ;

extern double takeProfit = 500.0 ;

Chaîne externe Begin="2:00" ;

chaîne externe End="10:00" ;

extern double distance = 60 ;

bool isECN = true ;

bool cond = false ;

bool cond2 = false ;

double low ;

double high ;

extern double lots = 0.1 ;

int magic = 1232344524285020 ;

int slippage = 1 ;

string comment = "" ;

int ticket ;

int short = 0 ;

int long = 0 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

Print(countOrders(magic,OP_BUY)) ;

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int start()

{

Print(AccountCurrency()) ;

//----

if(isGoodTime(Begin,End))

{

short = 0 ;

long = 0 ;

if(!cond)

{

low = Bid ;

haut = Demande ;

}

cond = true ;

if(Bid < low) low = Bid ;

si(Ask > high) high = Ask ;

}

si((high - low)*1000>distance)

{

cond2 = true ;

}

if(!isGoodTime(Begin,End))

{

cond = false ;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0005) && short == 0)

{

short++ ;

si(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic) ;

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0) ;

}

}

}

si(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++ ;

si(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic) ;

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0) ;

}

}

}

}

//----

retour(0) ;

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true) ;

}

return(false) ;

}

int countOrders(int oMagic,int oType) {

int count=0 ;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

compte++ ;

}

}

}

}

}

return(count) ;

}

double sltpValue(double w1, int w2)

{

si(w2 == 0)

return(0) ;

return (NormalizeDouble(w1, Digits)) ;

}

Maintenant EA n'ouvre qu'une seule position par jour. En ce qui concerne votre question sur les emails, il existe quelque part dans le forum mon message à ce sujet :)

Faites-moi savoir si vous le trouvez.

Cheers,

Grzesiek[/lang]

 
Pip:
Bonjour Avasys,

Pour autant que je puisse dire, il n'y a rien d'anormal avec le code, sur la base de votre description, il fait exactement ce qu'il est programmé pour faire (acheter lorsque la demande est plus élevée que le haut et vendre lorsque l'offre est inférieure au bas), il continue essentiellement à acheter et à vendre lorsque le haut et le bas sont cassés, respectivement.

Merci,

Merci pour votre commentaire

Y a-t-il un moyen de dire au code de ne trader qu'une fois par jour et seulement au premier break out.

L'auteur de ce code est un homme très occupé, il ne pouvait pas contribuer beaucoup de temps comme il semble

et ce que j'ai remarqué, c'est que le système exécute des trades même si l'écart entre les temps indiqués dans le code est supérieur à 60 pips, le système continue à trader, il ne trade que si l'écart entre les temps spécifiques (indiqués dans le code, voir les temps de début et de fin) est inférieur à 60 pips, puis trade.

Je vous remercie de votre aide.

 
g.pociejewski:
[lang=pl]//+------------------------------------------------------------------+

//| simple EA.mq4 |

//| Copyright © 2011, luktom.biz |

//| www.luktom.biz/en |

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

#property copyright "Copyright © 2011, luktom.biz."

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0 ;

extern double takeProfit = 500.0 ;

Chaîne externe Begin="2:00" ;

chaîne externe End="10:00" ;

extern double distance = 60 ;

bool isECN = true ;

bool cond = false ;

bool cond2 = false ;

double low ;

double high ;

extern double lots = 0.1 ;

int magic = 1232344524285020 ;

int slippage = 1 ;

string comment = "" ;

int ticket ;

int short = 0 ;

int long = 0 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

Print(countOrders(magic,OP_BUY)) ;

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int start()

{

Print(AccountCurrency()) ;

//----

if(isGoodTime(Begin,End))

{

short = 0 ;

long = 0 ;

if(!cond)

{

low = Bid ;

haut = Demande ;

}

cond = true ;

if(Bid < low) low = Bid ;

si(Ask > high) high = Ask ;

}

si((high - low)*1000>distance)

{

cond2 = true ;

}

if(!isGoodTime(Begin,End))

{

cond = false ;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0005) && short == 0)

{

short++ ;

si(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic) ;

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0) ;

}

}

}

si(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++ ;

si(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic) ;

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0) ;

}

}

}

}

//----

retour(0) ;

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true) ;

}

return(false) ;

}

int countOrders(int oMagic,int oType) {

int count=0 ;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

compte++ ;

}

}

}

}

}

return(count) ;

}

double sltpValue(double w1, int w2)

{

si(w2 == 0)

return(0) ;

return (NormalizeDouble(w1, Digits)) ;

}

Maintenant EA n'ouvre qu'une seule position par jour. En ce qui concerne votre question sur les emails, il existe quelque part dans le forum mon message à ce sujet :)

Faites-moi savoir si vous le trouvez.

Merci,

Grzesiek[/lang]

Merci,

J'ai copié tout le code ici et collé dans le fichier mq4, mais quand je l'ai copié dans le dossier experts, il n'a pas fonctionné, il n'a pas créé de fichier ex4 et n'est pas activé dans le manu des conseillers experts. Alors s'il vous plaît, pouvez-vous télécharger un fichier mq4 ou y a-t-il quelque chose dans le code, parce que j'ai essayé plusieurs fois

 

Détecter les positions x et y du clic de la souris sur le graphique

Est-il possible de détecter la position d'un clic de souris dans MT4 ? Je ne parle pas de WindowOnDrop. Si je connais les coordonnées x,y de l'écran, puis-je les convertir en prix/heure correspondants ?

Merci pour votre aide.

Meilleures salutations,

Tiffany

 

Cher ami

Aujourd'hui lundi, le code (l'ancien qui fonctionnait le jeudi et le vendredi) n'a pas du tout fonctionné.

J'ai saisi manuellement les transactions,

 

Système simple : Nécessite très peu de recommandation EA

Voici la logique

Tradez lorsque la fourchette entre GMT 02:00 et 10:00 est inférieure à 60 pips puis ouvrez la vente si le prix casse la ligne minimum - 5pips ou l'achat si le prix casse la ligne maximum + 5 pips. ET N'EXÉCUTEZ QU'UNE SEULE TRANSACTION PAR JOUR, PEU IMPORTE QUE LA TRANSACTION SOIT ANNULÉE, FERMÉE AU STOP OU PRISE DE PROFIT, JUSTE UN ORDRE PAR JOUR.

Voici le code mais il ne fonctionne pas, dans l'EA MANU de MT4 il a une icône inactive et il n'y a pas de fichier ex4 dans le dossier experts, je ne comprends pas ce qui ne va pas

extern double stopLoss = 300.0 ;

extern double takeProfit = 500.0 ;

extern string Begin = "2 : 00" ;

extern string End = "10 : 00" ;

extern double distance = 60 ;

bool isECN = true ;

bool cond = false ;

bool cond2 = false ;

double low ;

double high ;

extern double lots = 0.1 ;

int magic = 1232344524285020 ;

int slippage = 1 ;

string comment = "" ;

int ticket ;

int short = 0 ;

long int = 0 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

(0) retour ;

}

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

//| fonction de désinitialisation experte |

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

int deinit ()

{

//----

Print (countOrders (magic, OP_BUY)) ;

//----

(0) retour ;

}

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

//| fonction de démarrage expert |

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

int start()

{

Imprimez (AccountCurrency ()) ;

//----

if (isGoodTime (Begin, End))

{

short = 0 ;

long = 0 ;

si ( ! cond)

{

low = Bid ;

haut = Demande ;

}

cond = true ;

si (Bid < low) low = Bid ;

si (Ask > high) high = Ask ;

}

si ((high-low) * 1000 > distance)

{

cond2 = true ;

}

if ( ! isGoodTime (Begin, End))

{

cond = false ;

}

if ( ! isGoodTime (Begin, End) & & cond2)

{

si (countOrders (magic, OP_SELL) == 0)

{

si (Bid ≪ = (CRL-0.0005) & & short == 0)

{

court + + ;

si (isECN == false)

{

OrderSend (Symbole (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), commentaire, magic) ;

}

if (isECN)

{

ticket = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic) ;

OrderSelect (ticket, SELECT_BY_TICKET) ;

OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Bid-takeProfit * Point, takeProfit), 0) ;

}

}

}

si (countOrders (magic, OP_BUY) == 0)

{

if ((Ask-high) > = 0.005 & & long = = 0)

{

long + + ;

si (isECN == false)

{

OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic) ;

}

if (isECN)

{

ticket = OrderSend (Symbole (), OP_BUY, lots, Ask, slippage, 0,0, commentaire, magic) ;

OrderSelect (ticket, SELECT_BY_TICKET) ;

OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0) ;

}

}

}

}

//----

(0) retour ;

}

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

bool isGoodTime (string, string, Begin, End) {

if (TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime () (End)) {

return (true) ;

}

return (false) ;

}

int countOrders (int, int oMagic oType) {

int count = 0 ;

for (int i = 0 ; i < OrdersTotal () ; i ++) {

if (OrderSelect (i, SELECT_BY_POS)) {

if (OrderMagicNumber () == oMagic) {

if (OrderSymbol () = the = Symbol ()) {

if (OrderType () == oType || oType < 0) {

compte ++ ;

}

}

}

}

}

return (count) ;

}

double sltpValue (double, int w1 w2)

{

si (w2 = = 0)

return (0) ;

return (NormalizeDouble (w1, Digits)) ;

}

 

EAs de Forex.com

Je suis un idiot. J'ai posté ce message dans le mauvais forum... et je ne sais pas comment le déplacer vers le forum de programmation. Je m'excuse pour la gêne occasionnée ; l'erreur n'était pas intentionnelle.

Je négocie le forex au comptant depuis 3 ans et j'ai développé 2 EAs. Ces EAs fonctionnent bien sur Glocap, FXCM et Alpari (je suis un résident américain, donc mon choix de courtiers est quelque peu limité). De plus, je veux un compte MT4 avec la commission intégrée dans le spread (préférence personnelle).

J'ai récemment testé ces EA sur un compte de démonstration de Forex.com (Gain Capital). Les deux EAs ont bien fonctionné et ont négocié selon les règles programmées. Cependant, lorsque j'ai ouvert un compte réel avec Forex.com, l'EA #1 ne fonctionne plus correctement, mais l'EA #2 fonctionne bien. L'EA #1 fonctionne bien dans le testeur de stratégie de Forex.com, mais je sais que cela ne compte pas pour beaucoup. Tout cela me paraît très étrange, car les deux EA utilisent le même code pour ouvrir des positions (l'erreur de l'EA #1 survient lorsqu'on essaie d'ouvrir des positions), définir la taille du lot, surveiller les positions et les fermer. Voici un peu d'information sur les deux EA :

EA #1 EUR/JPY Utilise l'indicateur Ichimoku

EA #2 EUR/USD Utilise 3 moyennes mobiles et MACD

Comme je l'ai déjà dit, l'EA n°2 fonctionne bien, selon les règles programmées. Lorsque l'EA #1 essaie d'ouvrir des positions, je reçois le message d'erreur suivant : 2011.11.21 17:00:02 Ichimoku_1700Eastern EURJPYpro,H1 : Ichimoku_Open EA for EURJPYpro : Erreur d'ouverture de l'ordre BUY : (133) le trade est désactivé /// pour 103.7210

De plus, lorsque l'EA n°2 essaie de placer une transaction, le journal des experts montre toujours que la std.lib se charge immédiatement avant les transactions qui génèrent une erreur (cela ne se produit pas avec l'EA n°1):2011.11.21 17:00:02 stdlib EURJPYpro,H1 : loaded successfully

Voici la dernière pièce de ce puzzle : l'EA n°2 ouvre des transactions, mais pas à 17h00 (heure de l'Est). Toutes les erreurs envoyées se sont produites sur des transactions essayant de s'ouvrir à 1700 Eastern (ceci peut être une coïncidence).

J'ai démonté l'EA, retapé le code à partir de zéro, copié le code de l'EA #1 dans l'EA #2 et rien ne semble résoudre le problème. Forex.com ne veut pas m'aider car ils considèrent qu'il s'agit d'une "assistance EA" qu'ils ne proposent pas. D'après ce que je peux trouver sur Internet à propos de cette erreur, cela signifie que soit a) le courtier n'autorise pas le trading d'EA (ce que je sais être faux), soit b) la transaction envoie des stops et/ou des limites, ce qui ne fonctionne pas avec un courtier à exécution instantanée (la transaction n'envoie PAS de stops ou de limites). Forex.com a déclaré qu'il ne suspend pas les transactions à tout moment de la journée.

Mes questions pour ce groupe sont les suivantes :

1. Quelqu'un a-t-il déjà rencontré ce problème ?

2. Si oui, qu'avez-vous fait pour le résoudre ?

3. Si vous n'avez jamais rencontré ce problème, quelle pourrait en être la cause, selon vous ?

Je suis sûr que c'est quelque chose de simple que je ne vois pas. Tous les commentaires, les récits d'expérience et les réflexions venant de l'extérieur seraient les bienvenus.