Aide au codage - page 104

 

Merci beaucoup Mladen .... Vous êtes génial...

 

Salut les gars,

Est-ce que vous pouvez m'aider avec ma demande sur la page 103, s'il vous plaît ? J'ai cherché des informations en ligne mais je n'ai pas réussi à faire en sorte que l'alerte se déclenche toutes les 5 mesures (à partir du début de l'heure).

Merci d'avance

 

Cher Mladen/Mr Tools Pouvez-vous s'il vous plaît corriger cette ea afin qu'elle ne rouvre pas le trade une fois que le stop ou le tp est atteint....

Dossiers :
 

Aide au codage pour le stop loss

Salut les gars,

J'ai un EA sur lequel je n'arrive pas à modifier le Stop Loss.

Peu importe ce que je change, il ne change pas. Je voudrais changer le stop loss à au moins 300. Avez-vous des idées ?

Merci d'avance

Voici le code de l'EA :

// entrée utilisateur générique

extern double Lots=1.0 ;

extern int TakeProfit=44 ;

extern int StopLoss=90 ;

extern bool RSIMethodA=false ;

extern bool RSIMethodB=true ;

extern int RSIValue=50 ;

extern bool AbandonMethodA=true ;

extern bool AbandonMethodB=false ;

extern int Abandon=101 ;

extern bool MoneyManagement=true ;

extern int Risk=2 ;

extern int Slippage=3 ;

extern bool UseProfitLock=true ;

extern int BreakEvenTrigger=25 ;

extern int BreakEven=3 ;

extern bool LiveTrading=false ;

extern bool AccountIsMini=false ;

extern int maxTradesPerPair=1 ;

extern int MagicNumber=5432 ;

double lotMM ;

bool BuySignal=false ;

bool SetBuy=false ;

bool SellSignal=false ;

bool SetSell=false ;

// Traitement des barres

datetime bartime=0 ;

int bartick=0 ;

int TradeBars=0 ;

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

//| 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 (UseProfitLock) ProfitLockStop() ;

si (AbandonMéthodeA || AbandonMéthodeB)

{

RunAbandonCheck() ;

RunAbandonMethods() ;

}

if (!SetLotsMM()) return(0) ;

RunOrderTriggerCalculs() ;

RunPairSpesificSettings() ;

RunNewOrderManagement() ;

//----

return(0) ;

}

/////////////////////////////////////////////////

// SetLotsMM - Par Robert Cochran http://autoforex.biz

/////////////////////////////////////////////////

bool SetLotsMM()

{

double MarginCutoff ;

if(!AccountIsMini) MarginCutoff = 1000 ;

if( AccountIsMini) MarginCutoff = 100 ;

if(AccountFreeMargin() < MarginCutoff) return(false) ;

if(MoneyManagement)

{

lotMM = MathCeil(AccountBalance() * Risk / 10000) / 10 ;

si(lotMM < 0.1) lotMM = Lots ;

if(lotMM > 1.0) lotMM = MathCeil(lotMM) ;

// Appliquer les limites de taille de lot

if(LiveTrading)

{

if( AccountIsMini) lotMM = lotMM * 10 ;

if(!AccountIsMini && lotMM < 1.0) lotMM = 1.0 ;

}

if(lotMM > 100) lotMM = 100 ;

}

sinon

{

lotMM = Lots ; // Changez MoneyManagement à 0 si vous voulez que le paramètre Lots soit en vigueur.

}

return(true) ;

}

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

/////////////////////////////////////////////////

// Calculs du déclencheur de l'ordre d'exécution

/////////////////////////////////////////////////

bool RunOrderTriggerCalculations()

{

bool RSIPOS=false ;

bool RSINEG=false ;

// Moyenne mobile à 3 périodes sur Bar[1]

double bullMA3=iMA(Symbol(),0,3,0,MODE_EMA,PRICE_CLOSE,1) ;

// Moyenne mobile à 7 périodes sur la barre [1].

double bearMA7=iMA(Symbol(),0,7,0,MODE_EMA,PRICE_CLOSE,1) ;

// Moyenne mobile à 2 périodes sur la barre [2].

double RSI=iRSI(Symbol(),0,2,PRICE_CLOSE,2) ;

double RSI2=iRSI(Symbol(),0,2,PRICE_CLOSE,1) ;

// Déterminer la polarité du RSI

if (RSIMethodA)

{

if(RSI>RSIValue && RSI2<RSIValue)

{

RSIPOS=vrai ;

RSINEG=faux ;

}

sinon RSIPOS=false ;

if(RSIRSIValue)

{

RSIPOS=faux ;

RSINEG=vrai ;

}

sinon RSINEG=faux ;

}

if (RSIMethodB)

{

if(RSI>RSIValue)

{

RSIPOS=vrai ;

RSINEG=faux ;

}

if(RSI<RSIValue)

{

RSIPOS=faux ;

RSINEG=vrai ;

}

}

if ((bullMA3 > (bearMA7+Point)) && RSINEG)

{

BuySignal=true ;

}

sinon BuySignal=false ;

si ((bullMA3 < (bearMA7-Point)) && RSIPOS)

{

SellSignal=vrai ;

}

sinon SellSignal=false ;

retour(true) ;

}

/////////////////////////////////////////////////

// Ouvrir des commandes par symbole et commentaire

/////////////////////////////////////////////////

int OpenOrdersForThisEA()

{

int ofts=0 ;

for(int x=0;x<OrdersTotal();x++)

{

OrderSelect(x, SELECT_BY_POS, MODE_TRADES) ;

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

{

ofts++ ;

}

}

return(ofts) ;

}

/////////////////////////////////////////////////

// PROFIT LOCK - Par Robert Cochran - http://autoforex.biz

/////////////////////////////////////////////////

bool ProfitLockStop()

{

if( OpenOrdersForThisEA() > 0 )

{

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

//--- TRANSACTIONS LONGUES

if(OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber()== MagicNumber)

{

si (Bid >= OrderOpenPrice() + BreakEvenTrigger*Point &&

OrderOpenPrice() > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + BreakEven * Point, OrderTakeProfit(), Green) ;

}

}

//--- TRANSACTIONS COURTES

if(OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber()==MagicNumber)

{

si (Ask <= OrderOpenPrice() - BreakEvenTrigger*Point &&

OrderOpenPrice() < OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice() - BreakEven * Point, OrderTakeProfit(), Blue) ;

}

}

}

}

}

/////////////////////////////////////////////////

// CONTRÔLE D'ABANDON

/////////////////////////////////////////////////

bool RunAbandonCheck()

{

if( OpenOrdersForThisEA() > 0 )

{

if (TradeBars == 0 && bartick == 0)

{

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

{

si (OrderSymbol() == Symbol())

{

TradeBars = MathFloor(CurTime() - OrderOpenTime())/60/Period() ;

bartime = Time[0] ;

bartick = TradeBars ;

}

}

}

if(bartime!=Time[0])

{

bartime=Time[0] ;

bartick++ ;

}

}

return(true) ;

}

/////////////////////////////////////////////////

// RunAbandonMethods

/////////////////////////////////////////////////

bool RunAbandonMethods()

{

if( OpenOrdersForThisEA() > 0 )

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

if (AbandonMethodA && bartick==Abandon)//Force "HEDGE" après abandon

{

// TRADES LONGS

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() &&

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue) ;

SetSell=true ;

continuer ;

}

// TRANSACTIONS COURTES

si (OrderType() == OP_SELL && OrderSymbol() == Symbol() &&

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Blue) ;

SetBuy=true ;

continuer ;

}

}

if (AbandonMethodB && bartick==Abandon)//Les indicateurs décident de la direction après l'abandon

{

//TRADEAUX LONGS

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() &&

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White) ;

continuer ;

}

// TRANSACTIONS COURTES

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

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White) ;

continuer ;

}

}

}

}

return(true) ;

}

/////////////////////////////////////////////////

// Réglages de la paire d'exécution

/////////////////////////////////////////////////

bool RunPairSpesificSettings()

{

// configure les optimisations du symbole

if (Symbol()=="GBPUSD")

{

TakeProfit=55 ; StopLoss=100 ; Abandon=69 ;

}

return(true) ;

}

/////////////////////////////////////////////////

// Exécution d'un nouvel ordre de gestion

/////////////////////////////////////////////////

bool RunNewOrderManagement()

{

double TP,SL ;

if( OpenOrdersForThisEA() < maxTradesPerPair )

{

//ENTRY Ask(buy, long)

si (BuySignal || SetBuy)

{

SL = Ask - StopLoss*Point ;

TP = Ask + TakeProfit*Point ;

OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,SL,TP, "TS-ProfitLock - "+Symbol()+" - Long",MagicNumber,0,White) ;

bartick=0 ;

if (SetBuy) SetBuy=false ;

return(true) ;

}

//ENTRY Bid (vendre, short)

if (SellSignal || SetSell)

{

SL = Bid + StopLoss*Point ;

TP = Bid - TakeProfit*Point ;

OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,SL,TP, "TS-ProfitLock - "+Symbol()+" - Short",MagicNumber,0,Red) ;

bartick=0 ;

if (SetSell) SetSell=false ;

return(true) ;

}

}

return(true) ;

}

 
graphics:
Salut les gars,

J'ai un EA sur lequel je n'arrive pas à modifier le Stop Loss.

Peu importe ce que je change, il ne change pas. Je voudrais changer le stop loss à au moins 300. Avez-vous des idées ?

Merci d'avance

Voici le code de l'EA :

// entrée utilisateur générique

extern double Lots=1.0 ;

extern int TakeProfit=44 ;

extern int StopLoss=90 ;

extern bool RSIMethodA=false ;

extern bool RSIMethodB=true ;

extern int RSIValue=50 ;

extern bool AbandonMethodA=true ;

extern bool AbandonMethodB=false ;

extern int Abandon=101 ;

extern bool MoneyManagement=true ;

extern int Risk=2 ;

extern int Slippage=3 ;

extern bool UseProfitLock=true ;

extern int BreakEvenTrigger=25 ;

extern int BreakEven=3 ;

extern bool LiveTrading=false ;

extern bool AccountIsMini=false ;

extern int maxTradesPerPair=1 ;

extern int MagicNumber=5432 ;

double lotMM ;

bool BuySignal=false ;

bool SetBuy=false ;

bool SellSignal=false ;

bool SetSell=false ;

// Traitement des barres

datetime bartime=0 ;

int bartick=0 ;

int TradeBars=0 ;

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

//| 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 (UseProfitLock) ProfitLockStop() ;

si (AbandonMéthodeA || AbandonMéthodeB)

{

RunAbandonCheck() ;

RunAbandonMethods() ;

}

if (!SetLotsMM()) return(0) ;

RunOrderTriggerCalculs() ;

RunPairSpesificSettings() ;

RunNewOrderManagement() ;

//----

return(0) ;

}

/////////////////////////////////////////////////

// SetLotsMM - Par Robert Cochran Bienvenue autoforex.biz - BlueHost.com

/////////////////////////////////////////////////

bool SetLotsMM()

{

double MarginCutoff ;

if(!AccountIsMini) MarginCutoff = 1000 ;

if( AccountIsMini) MarginCutoff = 100 ;

if(AccountFreeMargin() < MarginCutoff) return(false) ;

if(MoneyManagement)

{

lotMM = MathCeil(AccountBalance() * Risk / 10000) / 10 ;

si(lotMM < 0.1) lotMM = Lots ;

if(lotMM > 1.0) lotMM = MathCeil(lotMM) ;

// Appliquer les limites de taille de lot

if(LiveTrading)

{

if( AccountIsMini) lotMM = lotMM * 10 ;

if(!AccountIsMini && lotMM < 1.0) lotMM = 1.0 ;

}

if(lotMM > 100) lotMM = 100 ;

}

sinon

{

lotMM = Lots ; // Changez MoneyManagement à 0 si vous voulez que le paramètre Lots soit en vigueur.

}

return(true) ;

}

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

/////////////////////////////////////////////////

// Calculs du déclencheur de l'ordre d'exécution

/////////////////////////////////////////////////

bool RunOrderTriggerCalculations()

{

bool RSIPOS=false ;

bool RSINEG=false ;

// Moyenne mobile à 3 périodes sur Bar[1]

double bullMA3=iMA(Symbol(),0,3,0,MODE_EMA,PRICE_CLOSE,1) ;

// Moyenne mobile à 7 périodes sur la barre [1].

double bearMA7=iMA(Symbol(),0,7,0,MODE_EMA,PRICE_CLOSE,1) ;

// Moyenne mobile à 2 périodes sur la barre [2].

double RSI=iRSI(Symbol(),0,2,PRICE_CLOSE,2) ;

double RSI2=iRSI(Symbol(),0,2,PRICE_CLOSE,1) ;

// Déterminer la polarité du RSI

if (RSIMethodA)

{

if(RSI>RSIValue && RSI2<RSIValue)

{

RSIPOS=vrai ;

RSINEG=faux ;

}

sinon RSIPOS=false ;

if(RSIRSIValue)

{

RSIPOS=faux ;

RSINEG=vrai ;

}

sinon RSINEG=faux ;

}

if (RSIMethodB)

{

if(RSI>RSIValue)

{

RSIPOS=vrai ;

RSINEG=faux ;

}

if(RSI<RSIValue)

{

RSIPOS=faux ;

RSINEG=vrai ;

}

}

if ((bullMA3 > (bearMA7+Point)) && RSINEG)

{

BuySignal=true ;

}

sinon BuySignal=false ;

si ((bullMA3 < (bearMA7-Point)) && RSIPOS)

{

SellSignal=vrai ;

}

sinon SellSignal=false ;

retour(true) ;

}

/////////////////////////////////////////////////

// Ouvrir des commandes par symbole et commentaire

/////////////////////////////////////////////////

int OpenOrdersForThisEA()

{

int ofts=0 ;

for(int x=0;x<OrdersTotal();x++)

{

OrderSelect(x, SELECT_BY_POS, MODE_TRADES) ;

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

{

ofts++ ;

}

}

return(ofts) ;

}

/////////////////////////////////////////////////

// PROFIT LOCK - Par Robert Cochran - Bienvenue autoforex.biz - BlueHost.com

/////////////////////////////////////////////////

bool ProfitLockStop()

{

if( OpenOrdersForThisEA() > 0 )

{

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

//--- TRANSACTIONS LONGUES

if(OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber()== MagicNumber)

{

si (Bid >= OrderOpenPrice() + BreakEvenTrigger*Point &&

OrderOpenPrice() > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + BreakEven * Point, OrderTakeProfit(), Green) ;

}

}

//--- TRANSACTIONS COURTES

if(OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber()==MagicNumber)

{

si (Ask <= OrderOpenPrice() - BreakEvenTrigger*Point &&

OrderOpenPrice() < OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice() - BreakEven * Point, OrderTakeProfit(), Blue) ;

}

}

}

}

}

/////////////////////////////////////////////////

// CONTRÔLE D'ABANDON

/////////////////////////////////////////////////

bool RunAbandonCheck()

{

if( OpenOrdersForThisEA() > 0 )

{

if (TradeBars == 0 && bartick == 0)

{

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

{

si (OrderSymbol() == Symbol())

{

TradeBars = MathFloor(CurTime() - OrderOpenTime())/60/Period() ;

bartime = Time[0] ;

bartick = TradeBars ;

}

}

}

if(bartime!=Time[0])

{

bartime=Time[0] ;

bartick++ ;

}

}

return(true) ;

}

/////////////////////////////////////////////////

// RunAbandonMethods

/////////////////////////////////////////////////

bool RunAbandonMethods()

{

if( OpenOrdersForThisEA() > 0 )

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

if (AbandonMethodA && bartick==Abandon)//Force "HEDGE" après abandon

{

// TRADES LONGS

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() &&

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue) ;

SetSell=true ;

continuer ;

}

// TRANSACTIONS COURTES

si (OrderType() == OP_SELL && OrderSymbol() == Symbol() &&

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Blue) ;

SetBuy=true ;

continuer ;

}

}

if (AbandonMethodB && bartick==Abandon)//Les indicateurs décident de la direction après l'abandon

{

//TRADEAUX LONGS

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() &&

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White) ;

continuer ;

}

// TRANSACTIONS COURTES

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

OrderMagicNumber()==MagicNumber)

{

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White) ;

continuer ;

}

}

}

}

return(true) ;

}

/////////////////////////////////////////////////

// Réglages de l'exécution de la paire spécifique

/////////////////////////////////////////////////

bool RunPairSpesificSettings()

{

// configure les optimisations du symbole

if (Symbol()=="GBPUSD")

{

TakeProfit=55 ; StopLoss=100 ; Abandon=69 ;

}

return(true) ;

}

/////////////////////////////////////////////////

// Exécution d'un nouvel ordre de gestion

/////////////////////////////////////////////////

bool RunNewOrderManagement()

{

double TP,SL ;

if( OpenOrdersForThisEA() < maxTradesPerPair )

{

//ENTRY Ask(buy, long)

si (BuySignal || SetBuy)

{

SL = Ask - StopLoss*Point ;

TP = Ask + TakeProfit*Point ;

OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,SL,TP, "TS-ProfitLock - "+Symbol()+" - Long",MagicNumber,0,White) ;

bartick=0 ;

if (SetBuy) SetBuy=false ;

return(true) ;

}

//ENTRY Bid (vendre, short)

if (SellSignal || SetSell)

{

SL = Bid + StopLoss*Point ;

TP = Bid - TakeProfit*Point ;

OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,SL,TP, "TS-ProfitLock - "+Symbol()+" - Short",MagicNumber,0,Red) ;

bartick=0 ;

if (SetSell) SetSell=false ;

return(true) ;

}

}

return(true) ;

}

Le StopLoss sera toujours fixé à 100 si le symbole est GBPUSD.

Pour les autres, cela devrait fonctionner correctement (sauf que vous devez multiplier le StopLoss par 10 pour les courtiers à 5 chiffres puisque l'EA fonctionne avec des points et non des pips).

 

Je l'utilise sur USD/JPY en ce moment et le stop loss reste toujours à 100.

Où puis-je trouver le multiplicateur du stop loss ?

 
graphics:
Je l'utilise sur USD/JPY en ce moment et le stop loss reste toujours à 100. Où puis-je trouver le multiplicateur de stop loss ?

Le stop loss et le take profit sont définis dans cette partie :

bool RunNewOrderManagement()

{

double TP,SL;

if( OpenOrdersForThisEA() < maxTradesPerPair )

{

//ENTRY Ask(buy, long)

if (BuySignal || SetBuy)

{

SL = Ask - StopLoss*Point;

TP = Ask + TakeProfit*Point;

OrderSend(Symbol(),OP_BUY,lotMM,Ask,Slippage,SL,TP ,"TS-ProfitLock - "+Symbol()+" - Long",MagicNumber,0,White);

bartick=0;

if (SetBuy) SetBuy=false;

return(true);

}

//ENTRY Bid (sell, short)

if (SellSignal || SetSell)

{

SL = Bid + StopLoss*Point;

TP = Bid - TakeProfit*Point;

OrderSend(Symbol(),OP_SELL,lotMM,Bid,Slippage,SL,T P,"TS-ProfitLock - "+Symbol()+" - Short",MagicNumber,0,Red);

bartick=0;

if (SetSell) SetSell=false;

return(true);

}

}

return(true);

}[/PHP]

As of stop loss that stays 100 : this part of code

[PHP]bool RunPairSpesificSettings()

{

// set up the symbol optimizations

if (Symbol()=="GBPUSD")

{

TakeProfit=55; StopLoss=100; Abandon=69;

}

return(true);

}

est activé seulement si le symbole est "GBPUSD" (comme on le voit dans le code) donc seulement dans ce cas il est inversé. Vérifiez à nouveau votre code et cherchez 100 et vous trouverez ce qui se passe avec vos stop loss puisque dans le code que vous avez joint, le stop loss est inversé uniquement dans le cas de GBPUSD.

 

Il ne change toujours pas le stop loss, même si je change les paires de devises pour celles avec lesquelles je trade. Cet EA aurait été parfait si le stop loss pouvait être modifié.

Merci d'avoir essayé de m'aider en tout cas.

 

Salut les codeurs,

Quelqu'un pourrait-il nous aider à modifier cet indicateur de squeeze break pour avoir une option de bande de bollinger EMA ainsi qu'une option de canal de keltner EMA ?

Merci :)

Dossiers :
 
iwillsurvive:
Salut les codeurs,

Est-ce que quelqu'un pourrait aider à modifier cet indicateur de squeeze break pour avoir une option de bande de bollinger EMA ainsi qu'une option de canal de keltner EMA ?

Merci :)

Bonjour Iwillsurvive, j'ai modifié l'indicateur pour que vous ayez un choix de ma's dans les bandes de keltner et de bollinger, par défaut il est réglé sur EMA.

Dossiers :