Aide au codage... Comment faire pour que l'indicateur filtre au lieu de l'alerte ? - page 6

 
elihayun:
Jusqu'à présent, je ne vois aucun problème (orienté code).

Mais logiquement, regardez ceci

if(isCrossed == 1 && Ask < upLevel)

Vous ne vérifiez pas qu'ils sont proches, mais simplement que le prix est inférieur à la ligne.

C'est ce que je voulais... pour filtrer... je veux utiliser la ligne comme un moyen d'interdire les transactions. C'était l'intention. Je n'ai pas besoin de faire un moyen de voir si c'est proche de la ligne si je peux changer la largeur de la ligne elle-même, je peux juste utiliser la ligne elle-même comme limiteur. En changeant la largeur des bandes, c'est comme s'il y avait un autre facteur qui vérifiait la proximité de la ligne. En faisant de cela une condition d'entrée, cela filtre ou devrait empêcher les ordres d'achat de s'ouvrir s'ils ne sont pas en dessous de la ligne supérieure ou les ordres de vente de s'ouvrir s'ils sont au-dessus de la ligne inférieure.

Je ne comprends pas pourquoi cela pourrait générer des erreurs d'ordre ?

 

il semble que l'erreur soit due à une taille de lot incorrecte ayant quelque chose à voir avec les paramètres MM...

Je change quelque peu d'objectif... je reviens à mon objectif initial...

J'ai conclu que l'indicateur de bandes de tendance ne produira pas le type d'effet de filtrage que je souhaite. Il ne le fera tout simplement pas.

A l'origine, je regardais l'indicateur de canal 'ang_AutoCh_HL-v1'. Je peux voir qu'il me donnerait l'effet de filtrage que je veux, mais il n'a pas les tampons sur lesquels s'appuyer... donc......

est-ce que je peux FAIRE des tampons dedans ? pour les valeurs des lignes ? de l'objet 1 et de l'objet 2 ? pour que je puisse les utiliser comme support et résistance dans l'EA ?

Voici l'indicateur...

#property copyright "ANG3110@latchess.com"

//----------------------------------

#property indicator_chart_window

//----------------------------------

extern int Hours=24;

extern color col=SkyBlue;

//------------------

double lr,lr0,lrp;

double sx,sy,sxy,sx2,aa,bb;

int p,sName,fs;

int f,f0,f1;

double dh,dl,dh_1,dl_1,dh_2,dl_2;

int ai_1,ai_2,bi_1,bi_2;

double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;

double price_p1,price_p0,price_p2,price_01,price_00,price_02;

int p1,p0,p2,fp;

//*****************************************

int init() {

p=Hours*60/Period();

if (fs==0) {sName=CurTime(); fs=1;}

return(0);}

//*******************************

int deinit() {

ObjectDelete("1"+sName);

ObjectDelete("0"+sName);

ObjectDelete("2"+sName); }

//*******************************

int start() {

int i,n;

//------------------------------------------------------------------------------

if (f==1) {

p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1));

p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));

p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1));

if (fp==0 && p!=p1) {p=p1; fp=1;}

if (fp==0 && p!=p0) {p=p0; fp=1;}

if (fp==0 && p!=p2) {p=p2; fp=1;}

}

//====================================================

sx=0; sy=0; sxy=0; sx2=0;

for (n=0; n<=p; n++) {sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);}

aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);

//----------------------------------------------------

for (i=0; i<=p; i++) {

lr=bb+aa*i;

dh=High-lr; dl=Low-lr;

//----------------------------------------------------

if (i<p/2) {if (i==0) {dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;}

if (dh>=dh_1) {dh_1=dh; ai_1=i;}

if (dl<=dl_1) {dl_1=dl; bi_1=i;}}

//----------------------------------------------------

if (i>=p/2) {if (i==p/2) {dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;}

if (dh>=dh_2) {dh_2=dh; ai_2=i;}

if (dl<=dl_2) {dl_2=dl; bi_2=i;}}}

//-------------------------------------

lr0=bb; lrp=bb+aa*(i+p);

//===================================================

if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;

if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;

if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {if (MathAbs(dh_1-dh_2)=MathAbs(dl_1-dl_2)) f=2;}

//=================================================

if (f==1) {

for (n=0; n<=20; n++) { f1=0;

for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);

if (i==0 || i==p/2) dhm=0.0;

if (High-hai>dhm && i<p/2) {ai_1=i; f1=1;}

if (High-hai>dhm && i>=p/2) {ai_2=i; f1=1;} }

if (f==0) break;}

//----------------------------

for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);

dli=Low-hai;

if (i==0) dlm=0.0; if (dli<dlm) dlm=dli;}

ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);

hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);

//----------------------------

price_p1=hap;

price_p0=hap+dlm/2;

price_p2=hap+dlm;

price_01=ha0;

price_00=ha0+dlm/2;

price_02=ha0+dlm;

}

//=================================================

if (f==2) {

for (n=0; n<=20; n++) { f1=0;

for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);

if (i==0 || i==p/2) dlm=0.0;

if (Low-lai<dlm && i<p/2) {bi_1=i; f1=1;}

if (Low-lai=p/2) {bi_2=i; f1=1;}}

if (f==0) break;}

//----------------------------

for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);

dhi=High-lai;

if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi;}

la0=Low*(0-bi_2)/(bi_1-bi_2)+Low*(0-bi_1)/(bi_2-bi_1);

lap=Low*(p-bi_2)/(bi_1-bi_2)+Low*(p-bi_1)/(bi_2-bi_1);

//----------------------------------------------------------------

price_p1=lap;

price_p0=lap+dhm/2;

price_p2=lap+dhm;

price_01=la0;

price_00=la0+dhm/2;

price_02=la0+dhm;

}

//===================================================================================

ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);

ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);

ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);

//-----------------------------------------------------------------

ObjectSet("1"+sName,OBJPROP_COLOR,col);

ObjectSet("0"+sName,OBJPROP_COLOR,col);

ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);

ObjectSet("2"+sName,OBJPROP_COLOR,col);

//---------------------------------------------

ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1);

ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("1"+sName,OBJPROP_PRICE2,price_01);

ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0);

ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("0"+sName,OBJPROP_PRICE2,price_00);

ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2);

ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("2"+sName,OBJPROP_PRICE2,price_02);

//==================================================================

f=1; p1=p; p0=p; p2=p; fp=0;

//*************************************************************************************

return(0);}

//=====================================================================================[/PHP]

here is what I'm trying to add a buffer so I can extract the values I need...

#property copyright "ANG3110@latchess.com"

//----------------------------------

#property indicator_chart_window

//----------------------------------

extern int Hours=24;

extern color col=SkyBlue;

//------------------

double ExtBufferResistance[];

double ExtBufferMiddle[];

double ExtBufferSupport[];

double lr,lr0,lrp;

double sx,sy,sxy,sx2,aa,bb;

int p,sName,fs;

int f,f0,f1;

double dh,dl,dh_1,dl_1,dh_2,dl_2;

int ai_1,ai_2,bi_1,bi_2;

double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;

double price_p1,price_p0,price_p2,price_01,price_00,price_02;

int p1,p0,p2,fp;

//*****************************************

int init() {

p=Hours*60/Period();

if (fs==0) {sName=CurTime(); fs=1;}

SetIndexBuffer (4, ExtBufferResistance); //--resistance line

SetIndexBuffer (5, ExtBufferMiddle); //--middle line

SetIndexBuffer (6, ExtBufferSupport); //--support line

return(0);}

//*******************************

//===================================================================================

ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);

ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);

ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);

//------------------make indicator buffer for EA-------------------------------------

somehow get object 1 to put it's value into buffer 4

somehow get object 0 to put it's value into buffer 5

somehow get object 2 to put it's value into buffer 6

//------------------------draw chart-------------------------------------------------

[/php]

and then upgrade this EA....

[PHP]#property copyright "Copyright 2005, Chris Battles."

#property link "cbattles@neo.rr.com"

extern double TrailingStop = 5;

extern double TrailingStopTrigger = 19;

extern double StopLoss = 186;

extern double TakeProfit = 250;

extern double Lots = 0.4;

//---- ang_AutoCh_HL-v1 and Filter Parameters

extern int Hours=24;

extern color col=SkyBlue;

extern double TF = 30; //--which bar period for the custom indicator to use

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

//| |

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

int start(){

int cnt, ticket;

if(Bars<100){

Print("bars less than 100");

return(0);

}

double ema1a=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);

double ema2a=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0);

double ema3a=iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

double ema1b=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);

double ema2b=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);

double ema3b=iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,1);

//----------channel filter

double resistance = iCustom(NULL,TF, "ang_AutoCh_HL-v1", Hours, col, 4, 0);

double support = iCustom(NULL,TF, "ang_AutoCh_HL-v1", Hours, col, 6, 0);

//--- end channel filter

and then make the order logic have second condition for entry...

[PHP]if (ema3bema1a && Ask < resistance){

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point, NULL,16384,0,Green);

if(ticket>0){

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if (ema3b>ema1b && ema3a support){

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point, NULL,16384,0,Red);

if(ticket>0) {

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

Je pense que je peux gérer le reste si vous pouvez me montrer comment faire sortir les valeurs de l'indicateur vers l'EA.

 

Je ne sais vraiment pas ce que je fais avec les buffers. Je lance des lignes setbuffer et je ne sais même pas si c'est nécessaire ou non.

 
raff1410:
Salut...

Indycateur avec tampons,

Vous pouvez appeler res && sup comme ci-dessous :

double resistance = iCustom(NULL,TF, "Channel",24,col,0,0) ;

double support = iCustom(NULL,TF, "Channel",24,col,2,0) ;

Raff

oh mec regarde !! c'est de ça que je parle.... j'ai hâte d'essayer ça pour voir si ça va marcher.

Maintenant, est-ce que je dois mettre ce truc en haut de l'ea ? pour dire à l'indicateur quels paramètres il utilise ?

//---- Paramètres du canal et du filtre

extern int Hours=24 ;

extern color col=SkyBlue ;

extern double TF = 30 ; //-- quelle période de barre utiliser pour l'indicateur personnalisé

et ensuite...

double resistance = iCustom(NULL,TF, "Channel",Hours,col,0,0) ;

double support = iCustom(NULL,TF, "Channel",Hours,col,2,0) ;

 

Ok, j'ai encore cette erreur 130, c'est quoi déjà ?

oh oui, le stop loss est trop proche... ok...

 

Salut...

Indycateur avec tampons,

canal.mq4

Vous pouvez appeler res && sup comme ci-dessous :

double resistance = iCustom(NULL,TF, "Channel",24,col,0,0) ;

double support = iCustom(NULL,TF, "Channel",24,col,2,0) ;

Raff

Dossiers :
channel.mq4  6 kb
 

Nouveau problème...

J'ai plusieurs versions d'arrêts qui fonctionnent sur ce système... Les tirages proviennent d'un échec de l'engagement de la gâchette du stop suiveur. Quand il ne s'enclenche pas, c'est l'equity stop qui ferme la position et c'est ce qui fait mal...

Je peux voir à partir des nombreux petits tirages que lorsque le trailing stop est déclenché, il ne fait pas autant de dégâts sur le compte. Il peut supporter beaucoup de ces types de pertes et les compenser, mais il ne peut pas surmonter les pertes plus importantes dues à la fermeture du stop d'équité.

so....

Existe-t-il un moyen de fermer la position si la barre qui suit l'ouverture ne bouge pas assez pour engager le trailing stop ?

J'ai commencé à le faire en appelant maintenant la période actuelle ainsi que les trois périodes précédentes à partir des lignes de moyennes mobiles. En fait, je pensais que le signal et la confirmation d'une barre pourraient provenir des trois périodes précédentes et que la période actuelle pourrait être utilisée pour voir si elle a suffisamment bougé pour déclencher le trailing stop. Je pensais que cette condition pourrait être ajoutée comme une condition || ou à l'equity stop qui ferme tous les ordres ouverts.

Ce qui me laisse perplexe, c'est la façon de savoir si le mouvement est suffisant pour déclencher le déclenchement du trailing stop, car s'il est long, il doit monter, mais s'il est court, il doit descendre. Ainsi, la détection du déclenchement du trailing stop doit prêter attention au fait qu'il s'agit d'une position longue ou courte pour savoir dans quel sens il faut se déplacer pour déclencher. Je ne suis pas sûr de savoir comment faire pour qu'il détecte cela.

Je peux imaginer ce rapport avec les gros tirages vers le bas qui ne semblent pas plus importants que les petits et si c'était le cas, ce serait rentable.

Dossiers :
whatever2.htm  292 kb
whatever2.gif  6 kb
 

une autre modification est nécessaire...

Il s'agit de fermer les positions perdantes avant qu'elles ne deviennent trop importantes... mais aussi de fermer les positions gagnantes avant qu'elles ne deviennent trop importantes.

La chose qu'il doit faire est de fermer la position seulement si elle n'a pas bougé suffisamment dans les dix premières minutes pour déclencher le trailing stop... il faut seulement qu'elle bouge d'un pip pour le faire je pense... donc je ne demande pas grand chose dans les dix premières minutes. Je veux seulement m'assurer qu'il ne se retourne pas et ne revient pas sur la position immédiatement après son ouverture. Ce sont ceux qui perdent....

Donc.... si on peut faire en sorte qu'il détecte si le trailing stop a été déclenché et si c'est le cas, qu'il le laisse courir !!! laisser le trailing stop le fermer plutôt que de le fermer en fonction du temps. Le paramètre de fermeture en fonction du temps n'est pas censé être la stratégie de fermeture principale, il sert juste à gérer la fermeture jusqu'à ce que le trailing stop prenne le relais.

Dossiers :
whatever3.htm  304 kb
whatever3.gif  6 kb
 

Cela ne fait pas ce que je voulais... Je n'arrive pas à comprendre ces résultats...

https://c.mql5.com/forextsd/forum/9/whatever3.htm

En regardant, je constate que la plupart des ordres ne sont ouverts que 10 minutes ou moins (je les ai configurés pour qu'ils se ferment dans 10 minutes si les critères ne sont pas remplis) avec seulement quelques exceptions comme l'ordre n°52 qui est ouvert 19 minutes et le n°48 qui est ouvert 15 minutes.

Cette partie ne fonctionne pas... OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice()

Ceci ne fonctionne pas non plus... if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

Ce que nous devons vérifier, c'est si le trailing stop s'est déclenché. Je ne veux pas que la clôture soit basée sur le prix. Je veux que la clôture soit basée sur le fait que le trailing stop ne soit pas déclenché. Je me rends compte que j'ai dit à l'origine que nous devions vérifier si le prix avait suffisamment augmenté pour déclencher le trailing stop... mais je ne comprends pas bien le code de déclenchement du trailing stop ou la distance à parcourir... Je ne sais pas si cela continue à répéter la vérification même après l'intervalle spécifié et le fermerait à 15 ou 19 minutes si/quand le critère de l'offre+profit est le OrderOpenPrice ? Ce qu'il fait, c'est qu'il devient le critère de clôture dominant au lieu du critère de stop gap jusqu'à ce que le trailing stop soit déclenché... c'est ce qu'il semble...

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

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = OrdersTotal();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

}

}

}

}

//+------------------------------------------------------------------+[/PHP]

Somewhere in this closing strategy there must be a way to detect if it's been triggered or not...

[PHP]//+------------------------------------------------------------------+

//| Variable End |

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

//Check position

bool IsTrade = False;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 == CloseBuy1_2) 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(TrailingStopMode && 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 (CloseSell1_1 == CloseSell1_2) 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(TrailingStopMode && 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;

}

}

}

}

}

}

En résumé, le paramètre de fermeture temporelle est beaucoup trop agressif, à moins qu'il ne puisse être modifié pour fonctionner comme prévu.

 

Désolé, je n'ai pas le temps d'examiner l'ensemble du code, mais examinons simplement ce snippet.

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

Disons que l'OrderOpenPrice = 1.2100

et que le profit est de 0.0010

Donc, vous voulez fermer la transaction courte si l'offre est inférieure ou égale à 1,2100-0,0010 = 1,2090.

Supposons qu'il y ait eu un gap vers le bas et que les prix aient sauté 1,2090 et que le prix d'achat soit maintenant de 1,2088. Selon votre formule,

Bid + Profit = 1.2088 + 0.0010 = 1.2098. Il n'est PAS supérieur à OrderOpenPrice même si votre système a dépassé le seuil de profit. Ainsi, l'ordre ne sera pas fermé. La logique de la condition de clôture doit être réexaminée et rescrite, à mon avis. De plus, vous devriez traiter les prix Ask lorsque vous traitez des transactions courtes, car vous ne pouvez clôturer la transaction qu' au prix Ask.

Un autre conseil,

La boucle de comptage de for (int cnt = 0 ; cnt = 0 ; cnt--) ou quelque chose de similaire.

Bonne chance.