Comment coder ? - page 265

 

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

cja:
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 CJA

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,

Robert

 

Erreurs dans les sous-fenêtres iCustom

cosmiclifeform:
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,

Robert

Merci 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.

 
codersguru:
Voulez-vous dire comment enregistrer dans un fichier CSV ?

Vérifie ça :

Outils - Lecteur .csv

Salut, 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]);

}

}

}