Comment coder ? - page 310

 

...

Pour les spreads en temps réel, utilisez ceci :

double currentSpread = MarketInfo(Symbol().MODE_SPREAD);
Premeus:
Je veux montrer le code du spread en temps réel à l'intérieur de l'EA, n'hésitez pas à me donner des conseils.
 

Merci Malden. Mais je sais que le code PHP pour le serveur web. Je ne sais pas comment coder dans le côté EA. Ou c'est un stand pour les autres.

S'il vous plaît dites-moi plus spécifique. Désolé, je suis nouveau dans la programmation de MQL4.

Et je ne sais pas comment et quelle partie du programme a été exécutée lorsque le nouveau prix est entré.

L'ensemble du programme ou dans le côté init() ou dans start().

Je veux obtenir des informations sur les tics et les montrer comme je l'ai demandé dans ce fil.

 

Premeus

C'est le code metatrader MQl 4 qui obtient le spread pour le symbole actuel. Il suffit de le copier dans votre code et vous aurez l'information sur le spread récupéré de cette façon.

Cette ligne de code devrait être dans start() afin de vérifier le spread à chaque tick (puisqu'il peut changer à chaque tick). Une fois que vous avez appelé la fonction MarketInfo() et que la variable currentSpread a reçu une valeur, utilisez la variable currentSpread pour effectuer des tests ou tout autre traitement dont vous avez besoin.

Premeus:
Merci Malden. Mais je sais que le code PHP pour le serveur web, je ne sais pas comment coder dans le côté EA. Ou c'est un stand pour les autres.

Veuillez me donner plus de précisions. Désolé, je suis nouveau dans la programmation de MQL4.

Et je ne sais pas comment et quelle partie du programme a été exécutée lorsque le nouveau prix est entré.

L'ensemble du programme ou dans le côté init() ou dans start().

Je veux obtenir des informations sur les tics et les montrer comme je l'ai demandé dans ce fil.
 

MartingailExpert_v1.0_Stochastique, comment ?

Bonjour !

Quelqu'un peut-il me dire pourquoi je ne peux pas insérer le Stoploss dans le ticket d'envoi de l'ordre ?

Quand je l'insère, l'EA ne fonctionne pas !

Merci !

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

//| aaa.mq4 |

//| Copyright Š 2007, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#property copyright "Copyright Š 2007, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

extern double step=25 ;

extern int StepMode=0 ;

// Ĺńëč StepMode = 0, ňî řŕă ěĺćäó îđäĺđŕěč ôčęńčđîâŕííűé č đŕâĺí step

// Ĺńëč StepMode = 1, ňî řŕă ďîńňĺďĺííî óâĺëčččâŕĺňń˙

extern double proffactor=10 ;

extern double mult=1.5 ;

extern double lotsbuy=0.01 ;

extern double lotssell=0.01 ;

extern double per_K=200 ;

extern double per_D=20 ;

extern double slow=20 ;

extern double zoneBUY=20 ;

extern double zoneSELL=80 ;

extern double Magicbuy=555 ;

extern double Magicsell=556 ;

double openpricebuy,openpricesell,lotsbuy2,lotssell2,lastlotbuy,lastlotsell,tpb,tps,cnt,smbuy,smsell,lottep,

ticketbuy,ticketsell,maxLot,free,balance,lotsell,lotbuy,dig,sig_buy,sig_sell,ask,bid ;

int OrdersTotalMagicbuy(int Magicbuy)

{

int j=0 ;

int r ;

for (r=0;r<OrdersTotal();r++)

{

if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))

{

si (OrderMagicNumber()==Magicbuy) j++ ;

}

}

return(j) ;

}

int OrdersTotalMagicsell(int Magicsell)

{

int d=0 ;

int n ;

for (n=0;n<OrdersTotal();n++)

{

if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES))

{

si (OrderMagicNumber()==Magicsell) d++ ;

}

}

return(d) ;

}

int orderclosebuy(int ticketbuy)

{

string symbol = Symbol() ;

int cnt ;

for(cnt = OrdersTotal() ; cnt >= 0 ; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy)

{

ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotsbuy2=OrderLots() ;

double bid = MarketInfo(symbol,MODE_BID) ;

RefreshRates() ;

OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta) ;

}

}

lotsbuy2=lotsbuy;return(0) ;

}

int orderclosesell(int ticketsell)

{

string symbol = Symbol() ;

int cnt ;

for(cnt = OrdersTotal() ; cnt >= 0 ; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicsell)

{

ticketsell=OrderTicket();OrderSelect(ticketsell, SELECT_BY_TICKET, MODE_TRADES);lotssell2=OrderLots() ;

double ask = MarketInfo(symbol,MODE_ASK) ;

RefreshRates() ;

OrderClose(ticketsell,lotssell2,ask,3, Lime) ;

}

}

lotssell2=lotssell;return(0) ;

}

int start()

{

//----

double profitbuy=0;double profitsell=0 ;

string symbol = OrderSymbol() ;

double spread = MarketInfo(symbol,MODE_SPREAD) ;

double minLot = MarketInfo(symbol,MODE_MINLOT) ;

if (minLot==0.01){dig=2;maxLot=MarketInfo(symbol,MODE_MAXLOT);}

si (minLot==0.1){dig=1;maxLot=((AccountBalance()/2)/1000);}

si(OrdersTotalMagicbuy(Magicbuy)>0)

{

double smbuy ;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES) ;

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket();OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES) ;

smbuy = smbuy+OrderLots();openpricebuy = OrderOpenPrice();lastlotbuy = OrderLots() ;

}

}

{

si (smbuy+(NormalizeDouble((lastlotbuy*mult),dig))<maxLot)

{

si(StepMode==0)

{

if(Ask<=openpricebuy-step*Point)

{

lotsbuy2=lastlotbuy*mult ;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue) ;

}

}

if(StepMode==1)

{

if(Ask<=openpricebuy-(step+OrdersTotalMagicbuy(Magicbuy)+OrdersTotalMagicbuy(Magicbuy)-2)*Point)

{

lotsbuy2=lastlotbuy*mult ;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue) ;

}

}

}

}

}

if(OrdersTotalMagicsell(Magicsell)>0)

{

double smsell ;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES) ;

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES) ;

smsell = smsell + OrderLots();openpricesell = OrderOpenPrice();lastlotsell = OrderLots() ;

}

}

{

si (smsell+(NormalizeDouble((lastlotsell*mult),dig))<maxLot)

{

si(StepMode==0)

{

si(Bid>=openpricesell+step*Point)

{

lotssell2=lastlotsell*mult ;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red) ;

}

}

if(StepMode==1)

{

if(Bid>=openpricesell+(step+OrdersTotalMagicsell(Magicsell)+OrdersTotalMagicsell(Magicsell)-2)*Point)

{

lotssell2=lastlotsell*mult ;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red) ;

}

}

}

}

}

//modification de l'XM7 pour changer la façon dont le signal est généré. L'ancien code est à la fin

double Stoch_0 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,0) ;

double Stoch_1 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1) ;

if(OrdersTotalMagicbuy(Magicbuy)<1)

{

if(Stoch_0 > zoneBUY && Stoch_1 <= zoneBUY)

ticketbuy = OrderSend(Symbol(),OP_BUY,lotsbuy,Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue) ;

}

if(OrdersTotalMagicsell(Magicsell)<1)

{

if(Stoch_0 = zoneSELL)

ticketsell = OrderSend(Symbol(),OP_SELL,lotssell,Bid,3,0,0, "MartingailExpert",Magicsell,0,Red) ;

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket();OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);profitbuy = profitbuy+OrderProfit() ;

openpricebuy = OrderOpenPrice() ;

}

}

tpb = (OrdersTotalMagicbuy(Magicbuy)*proffactor*Point)+openpricebuy ;

double bid = MarketInfo(Symbol(),MODE_BID) ;

si (profitbuy>0)

{

si (Bid>=tpb) orderclosebuy(ticketbuy) ;

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);profitsell = profitsell+OrderProfit() ;

openpricesell = OrderOpenPrice() ;

}

}

tps = openpricesell-(OrdersTotalMagicsell(Magicsell)*profactor*Point) ;

double ask = MarketInfo(Symbol(),MODE_ASK) ;

if (profitsell>0)

{

si (ask<=tps)orderclosesell(ticketsell) ;

}

free = AccountFreeMargin();balance = AccountBalance() ;

for (cnt=0;cnt< OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy) ticketbuy = OrderTicket() ;

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicsell) ticketell = OrderTicket() ;

}

si (OrdersTotalMagicbuy(Magicbuy)==0)

{

profitbuy=0;ticketbuy=0;tpb=0 ;

}

si (OrdersTotalMagicsell(Magicsell)==0)

{

profitsell=0;ticketsell=0;tps=0 ;

}

Comment("FreeMargin = ",NormalizeDouble(free,0)," Balance = ",NormalizeDouble(balance,0)," maxLot = ",NormalizeDouble(maxLot,dig),"\n",

"Totalbuy = ",OrdersTotalMagicbuy(Magicbuy)," Lot = ",smbuy," Totalsell = ",OrdersTotalMagicsell(Magicsell)," Lot = ",smsell,"\n",

"---------------------------------------------------------------","\n","Profitbuy = ",profitbuy,"\n",

"Profitsell = ",profitsell) ;

//----

for(int ii=0 ; ii<2 ; ii+=2)

{

ObjectDelete("rect "+ii) ;

ObjectCreate("rect "+ii,OBJ_HLINE, 0, 0,tps) ;

ObjectSet("rect "+ii, OBJPROP_COLOR, Red) ;

ObjectSet("rect "+ii, OBJPROP_WIDTH, 1) ;

ObjectSet("rect "+ii, OBJPROP_RAY, False) ;

}

for(int rr=0 ; rr<2 ; rr+=2)

{

ObjectDelete("rect1"+rr) ;

ObjectCreate("rect1"+rr,OBJ_HLINE, 0, 0,tpb) ;

ObjectSet("rect1"+rr, OBJPROP_COLOR, Blue) ;

ObjectSet("rect1"+rr, OBJPROP_WIDTH, 1) ;

ObjectSet("rect1"+rr, OBJPROP_RAY, False) ;

}

return(0) ;

}
 

...

Il peut y avoir plusieurs raisons, mais les plus courantes sont :

- le stop loss et / ou le take profit sont trop proches du prix actuel

- votre courtier est un courtier de type ECN/STP, auquel cas vous devez d'abord passer un ordre avec le stop loss et le take profit fixés à 0 et ce n'est que lorsqu'un ordre est ouvert que vous pouvez modifier le stop loss et/ou le take profit aux valeurs souhaitées (en respectant le point précédent bien sûr).

pearl1:
Bonjour !

Quelqu'un peut-il me dire pourquoi je ne peux pas insérer le Stoploss dans le ticket d'envoi de l'ordre ?

Quand je l'insère, l'EA ne fonctionne pas !

Merci !
 

Bonjour à tous, je voudrais savoir comment obtenir le dernier prix actuel sur le graphique ? Je sais que je suis un novice, mais je n'arrive pas à trouver la réponse. Merci de m'aider. Merci.

Salutations

Terrance

 

...

Cela dépend duquel :

- le prix actuel de l'offre est l'offre

- le prix demandé actuel est Ask

- tout autre prix : utilisez l'indice zéro pour le prix actuel, donc Close[0] est la fermeture actuelle, Open[0] est l'ouverture actuelle et ainsi de suite.

tkuan77:
Bonjour à tous, je voudrais savoir comment obtenir le dernier prix actuel sur le graphique ? Je sais que je suis un novice, mais je n'arrive pas à trouver la réponse. Merci de m'aider. Merci.

Salutations

Terrance
 

Bonjour Mladen, Ce que j'essaie de faire est une vérification. Par exemple, si le prix actuel est supérieur à, disons, la SMA 100, je vais zoomer vers un cadre temporel inférieur et ne regarder que le signal d'achat. Mais si j'utilise Bid ou Ask, le système ne peut pas décider si je suis en train de regarder un long ou un court terme puisque Bid je devrais regarder un long et vice versa pour Ask (corrigez-moi si je me trompe ici).

Le concept que j'avais en tête est un peu similaire au système de trading des 3 canards sur la partie vérification. Veuillez me conseiller à ce sujet. Merci.

Salutations

Terrance

mladen:
Cela dépend :
- le prix actuel de l'offre est l'offre

- le prix actuel de la demande est la demande

- tout autre prix : utilisez l'indice zéro pour le prix actuel, donc Close[0] est la fermeture actuelle, Open[0] est l'ouverture actuelle et ainsi de suite

.
 

...

Terrance

Utilisez Close[0] dans ce cas. Presque tous les EA utilisent Close dans ce but, donc je pense que cela fonctionnera aussi pour vous.

tkuan77:
Bonjour Mladen, Ce que j'essaie de faire est une vérification. Par exemple, si le prix actuel est supérieur à, disons, la SMA 100, je vais zoomer vers un cadre temporel inférieur et je ne regarderai que le signal d'achat. Mais si j'utilise Bid ou Ask, le système ne peut pas décider si je suis en train de regarder un long ou un short puisque Bid je devrais regarder un long et vice versa pour Ask (corrigez-moi si je me trompe ici).

Le concept que j'avais à l'esprit est un peu similaire au système de trading des 3 canards sur la partie vérification. Veuillez me conseiller à ce sujet. Merci.

Salutations

Terrance
 

L'EA ne fonctionne pas entre les mouvements de prix

J'ai remarqué que mon EA ne fonctionne pas entre les mouvements de prix dans le cadre temporel M1. Je sais que l'EA sera exécuté à chaque tick entrant.

Mais j'ai vu qu'il était exécuté à chaque nouvelle barre de départ.

Ai-je mal compris ?

Existe-t-il un moyen de forcer l'activation de l'EA à chaque tick entrant ?

J'essaie de contrôler mes profits et mes pertes en utilisant les profits et les pertes pas en pips. Quand un pic se produit, l'EA ne ferme pas l'ordre lorsqu'il atteint le réglage des profits ou des pertes jusqu'à ce qu'une nouvelle barre se produise.

Quelqu'un peut-il m'aider à résoudre ce problème ?

Je suis nouveau dans le codage d'EA.

Merci d'avance.

Raison: