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
Numéro de sous-fenêtre inconnu
Bonjour chers codeurs
Quelqu'un a t-il une solution à ce problème avec les appels iCustom, j'ai essayé tout ce à quoi je peux penser mais j'ai toujours le même message dans l'onglet Experts.
Numéro de sous-fenêtre inconnu -1 pour la fonction ObjectCreate.
Salutations CJA
Supprimer les appels de sous-fenêtres dans l'indicateur
Salut les autres codeurs
Quelqu'un a-t-il une solution à ce problème avec les appels iCustom ? J'ai essayé tout ce à quoi je pense mais j'ai toujours le même message dans l'onglet Experts.
Numéro de sous-fenêtre inconnu -1 pour la fonction ObjectCreate
Salutations CJABonjour CJA,
J'ai une solution que j'utilise pour contourner ce problème.
L'indicateur que votre EA appelle dans l'iCustom essaie de trouver une sous-fenêtre pour dessiner ses objets.
Dans la plupart des cas, il n'est pas nécessaire que l'indicateur dessine quoi que ce soit, il suffit de fournir les valeurs de l'indicateur à votre EA.
Ma solution est de faire une copie de l'indicateur et de supprimer les appels de sous-fenêtres et les routines de dessin d'objets.
Cela élimine les erreurs de sous-fenêtre et permet à l'EA de fonctionner plus rapidement.
Utilisez ensuite ce nouveau nom d'indicateur dans vos déclarations iCustom pour votre EA.
Je suis sûr qu'il y a probablement une meilleure solution de code, mais cela fonctionne pour moi.
J'espère que cela vous aidera,
Robert
Erreurs dans les sous-fenêtres iCustom
Bonjour CJA,
J'ai une solution que j'utilise pour contourner ce problème.
L'indicateur que votre EA appelle dans l'iCustom essaie de trouver une sous-fenêtre pour dessiner ses objets.
Dans la plupart des cas, il n'est pas nécessaire que l'indicateur dessine quoi que ce soit, il suffit de fournir les valeurs de l'indicateur à votre EA.
Ma solution est de faire une copie de l'indicateur et de supprimer les appels de sous-fenêtres et les routines de dessin d'objets.
Cela élimine les erreurs de sous-fenêtre et permet à l'EA de fonctionner plus rapidement.
Utilisez ensuite ce nouveau nom d'indicateur dans vos déclarations iCustom pour votre EA.
Je suis sûr qu'il y a probablement une meilleure solution de code, mais cela fonctionne pour moi.
J'espère que cela vous aidera,
RobertMerci Robert - votre suggestion fonctionne mais je pense qu'il doit y avoir un autre moyen de le faire. J'ai fait une recherche sur le net et je n'ai trouvé aucune solution qui fonctionne ou qui ait un sens, juste beaucoup de questions sans réponses. Merci encore pour votre aide.
Salutations CJA
CJA
Juste une suggestion : pourquoi ne pas utiliser (lors de l'appel avec iCustom()) un paramètre pour passer le numéro de fenêtre désiré ? Quelque chose comme : si (ParameterWindowID>=0) alors c'est à partir de iCustom sinon faire un code par défaut.
De cette façon, vous pourriez forcer le dessin d'objets même s'il est appelé par un autre code et il dessinerait les objets à un endroit correct.
Aide pour le codage
Bonjour à tous.
Quelqu'un peut-il me dire s'il est possible d'utiliser BOLD textFONTtype dans un rapport d'alerte par email ? Si oui, comment puis-je le coder ?
Merci beaucoup pour votre aide.
Voulez-vous dire comment enregistrer dans un fichier CSV ?
Vérifie ça :
Outils - Lecteur .csvSalut, Gourou,
Y a-t-il un endroit sur votre site web où je pourrais télécharger cette dll ? Je pense que c'est un excellent outil et je suis presque sûr que vous pouvez l'écrire mieux que moi donc je ne m'embêterai pas avec ça. Merci d'avance.
Dois-je m'enregistrer ? Il est situé dans la section téléchargement mais je n'ai pas réussi à trouver comment télécharger quoi que ce soit.
Modification rapide de l'EA
Bonjour,
J'ai besoin d'aide, j'ai essayé de modifier le code ci-dessous mais l'EA continue de planter MT4.
Je veux que l'ordre se ferme lorsque la barre actuelle (donc la barre où l'ordre a été exécuté) se ferme. En fait, il s'agit de négocier une seule barre.
C'est le code d'origine, il négocie de signal en signal.
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
//if (timeprev!=Time[0]){
// timeprev = Time[0];
if (signalup!=EMPTY_VALUE&&signalup!=0)
{
Order = SIGNAL_BUY;
}
if (signaldown!=EMPTY_VALUE&&signaldown!=0){
Order = SIGNAL_SELL;
}
// }
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (100 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+Quelqu'un peut-il m'aider ?
J'ai également trouvé ce code,
if(data!=iTime(Symbol(),0,0))
{
if(signalup!=EMPTY_VALUE&&signalup!=0)
{
if(openpos()>0)
{
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)
{
if(OrderClose(OrderTicket(),lots,Ask,slip))
Print("short was closed");
}
}
}
Print("try open long");
Print(Symbol());
nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);
if(nt>0)
Print("long order was opened");
}
if(signaldown!=EMPTY_VALUE&&signaldown!=0)
{
if(openpos()>0)
{
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)
{
if(OrderClose(OrderTicket(),lots,Bid,slip))
Print("long was closed");
}
}
}
Print("try open short");
Print(Symbol());
nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);
if(nt>0)
Print("short was opened");
}
data=iTime(Symbol(),0,0);
}
//----
//----
return(0);
}
//+------------------------------------------------------------------+
int openpos()
{
int j=0;
int i,n;
n=OrdersTotal();
for(i=0;i<n;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))
j++;
}
return(j);
Un expert peut-il me dire lequel est le mieux écrit ?
Breakeven pour tous les ordres d'une paire (magie)
Bonjour à tous,
Je veux rassembler tous les ordres (achat et vente) d'une paire par magie et s'ils atteignent un seuil de rentabilité, tous les ordres doivent être fermés.
Tout conseil est le bienvenu, merci
extern bool PairBreakeven=true;// Breakeven par paire tous les ordres de la même paire/magie
extern double Pairbreakevengain=6;// gain en pips requis pour permettre le break even
extern double Pairbreakeven=3;// seuil de rentabilité, ordre fermé, 3 pip de gain/perte
double Pairmovebreakeven ;
if(PairBreakeven==true){
if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven) ;
CloseBuyOrders(Magic) ;
CloseSellOrders(Magic) ;
}
void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){
RefreshRates() ;
if(OrdersTotal()>0){
for(int i=OrdersTotal();i>=0;i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){
retour ;
}
}
}
}
int CloseBuyOrders(int Magic){ //op_sell est similaire
int total=OrdersTotal() ;
for(int cnt=total-1;cnt>=0;cnt--){
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;
if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){
if(OrderType()==OP_BUY){
OrderClose(OrderTicket(),OrderLots(),Bid,3*mt) ;
}
}
}
return(0) ;
}
ArraySort avec 3 dimensions ou plus.
Un expert peut-il m'aider ?
J'ai essayé d'utiliser arraysort avec succès pour des tableaux à 1 ou 2 dimensions. Mais je suis resté bloqué avec la dimension 3. Pour autant que je sache, arraysort n'utilise que la première colonne pour le tri. Quelqu'un peut-il me conseiller sur la façon de résoudre ce problème de tri de tableaux à 3 dimensions ou plus ?
bool Restart = true;
double arraystore[20][20][20];
double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};
void init()
{
if (Restart == true)
{
Go();
Restart = false;
}
}
void start()
{
}
void Go()
{
for (int a = 1; a<=3; a++)
{
for (int b = 1; b<=6; b++)
{
int c = b+ (a-1)*6;
arraystore[a][0] = ArrayActual[c];
arraystore[a][1] = a;
arraystore[a][2] = b +a;
Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);
}
}
ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);
for ( a = 1; a<=3; a++)
{
for ( b = 1; b<=6; b++)
{
Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);
}
}
}