![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
le fichier d'inclusion...
//| GoGetterfunctions.mqh |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//| Please do not remove this header. |
//+------------------------------------------------------------------+
#property copyright "Aaragorn and Eaglehawk & Maji & Robert C."
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
#property link "http://forex.factoid.ca/forums/showthread.php?t=104"
#property link "https://www.forex-tsd.com/expert-advisors-metatrader-4/2840-gogetter-ea.html"
// many thanks goes to all those on the tsdforex forum and factoid forum who have encouraged us this far
//+------------------------------------------------------------------+
//| defines |
//+------------------------------------------------------------------+
//+-----------Store HIGH, LOW matching data------+
#define SLSIZE 15
static int SLIndex = 0;
static double sLocatorLows[ SLSIZE ] = { 0 };
static double sLocatorHighs[ SLSIZE ] = { 0 };
//+-----------Stored equity data-----------------+
#define StoredEquitySIZE 5
static int EquityIndex = 0;
static double EQUITY[ StoredEquitySIZE ] = { 0 };
static int EquityValuesStored = 0;
//+-----------close based on time----------------+
extern string Time_Settings="Time In Trade Settings";
extern int MonitorInMinutes = 60; // minutes after open to check state of trade
extern int ThresholdMove = 1; // if after that time we don't have +'x' pips we will exit
extern int MinsMultiplier = 75; // multiplies the MonitorInMinutes to make minutes (if 'x'=60) into hours
//+----------------increase lots variables-----+
double equity=0, ILots=0, LotIncreaseFactor=0.11;
//+------------------------------------------------------------------+
//| Commonly used GoGetter Functions | |
//+------------------------------------------------------------------+
//+-------------StoreHighsAndLows Function----support and resistance arrays------thanks to Robert C for assistance on this-------+
//+-------creates array of each trade series support and resistance for signal profile matching-------------------+
void StoreHighsAndLows(double HIGH, double LOW)
{
if ( SLIndex >= SLSIZE )
{
SLIndex = 0;
}
sLocatorLows[ SLIndex ] = LOW;
sLocatorHighs[ SLIndex ] = HIGH;
SLIndex++;
}
//+-----------------------end of StoreHighsAndLows------------------------------------+
//+--------------- Get past equity function---------Thanks Robert C.-----------+
// This returns past equity from the global equity array. The howFarBack parameter is a positive integer that indicates how far back into the array to go
// 1 would be the previous equity, 2 would be the equity before that, etc.
// the HowFarBack should not be greater than the arraysize
double GetPastEquity(int HowFarBack)
{
if ( HowFarBack > EquityValuesStored )
{
Print("Error getting past equity, Looking back farther than what we have stored");
return (-1);
}
else
{
int PastIndex = EquityIndex - HowFarBack;
if ( PastIndex < 0 )
{
PastIndex += StoredEquitySIZE;
}
return (EQUITY[PastIndex]);
}
}
//+--end of get past equity function-----------+
//+---Stores account Equity value in an array for future comparisions up to as many previous trades as the declared size of the array----thanks Robert C.----+
void StoreAccountEquity(double equity)
{
if ( EquityIndex >= StoredEquitySIZE )
{
EquityIndex = 0;
}
EQUITY[EquityIndex] = equity;
EquityIndex++;
if ( EquityValuesStored < StoredEquitySIZE )
{
EquityValuesStored++;
}
}
//+-------end of Store Equity function-------------------+
//+---------count open trades function-------ty Maji--------------------------+
int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=MagicNumber)
continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
if((OrderType()==OP_SELL) || (OrderType()==OP_BUY))
count++;
}//for
return(count);
}
//+-----------end of count trades-------------------------------------+
//+---------------------Close Based on Time function------------Thanks to 'Maji' for this-------------------+
void CloseOrder()
{
double Profit=ThresholdMove*Point;
int total = CountTrades();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)
{
LowTrailingStopTrigger = False;
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);
}
}
}
}
//+---------------------------end of close on time code---------------+
//+------------------------increase lots function-------------------------+
//+----------------increases lots based on account equity-----------------+
//+----TradeWave code-----lot sizing calculated from previous trade---------------+
//+----adjusts lot size for current position based on the previous trade being a winner or loser
double IncreaseLots(double Lots)
{
equity = AccountEquity();
double PreviousEquity = GetPastEquity(1);
if( PreviousEquity != -1 && equity > PreviousEquity )//Manipulates lot size to maximize equity growth from multiple consecutive winning positions
{
// Print("first...ILots: ",ILots," Lots: ",Lots," AccountFreeMargin: ",AccountFreeMargin());
ILots = Lots;
Lots = NormalizeDouble(AccountFreeMargin()/(LotIncreaseFactor*1000/0.1),1);
if(Lots < 0.01) Lots = 0.01;
if(Lots > 99) Lots = 99;
// Print("second...ILots: ",ILots," Lots: ",Lots," AccountFreeMargin: ",AccountFreeMargin());
}
else
{
ILots = Lots;
}
//+--------lot adjustments if the last trade lost-------+
if( PreviousEquity != -1 && equity <= PreviousEquity )//Manipulates lot size to reduce equity drawdown from multiple consecutive losing positions
{
// // Print("Previous Loser TradeWave Equity=",equity," <= PreviousEquity=",PreviousEquity," Lots = ",Lots);
Lots = 0.01; //very effective at reducing drawdown but impacts gains negatively as well
// // Print("XXXXXXXXXXXx Equity=",equity," <= PreviousEquity=",PreviousEquity," Lots = ",Lots);
}
else
{
Lots = Lots;
}
return(Lots);
}
//+----end of TradeWave code-----lot sizing calculated from previous trade---------------+> MetaQuotes HelpDesk (Tatyana) a écrit :
> Bonjour Aaragorn,
>
> Désolé pour le retard.
>
> 1) Essayez de décocher le champ Recalculer.
> Le problème est que chaque fois que vous lancez le test expert avec l'option "Recalculer" activée, les données seront modélisées à nouveau.
> Comme les nouvelles cotations sont déjà arrivées à ce moment, les données modélisées sur la base de ces nouvelles cotations seront différentes.
N'est-ce pas une réponse suffisamment bonne ? Je veux dire que si les données manquantes sont composées ou modélisées différemment chaque fois que de nouvelles données sont disponibles, l'exécution d'un test sur la même période de temps donnerait évidemment des résultats différents ...
Pourquoi pensez-vous que ce n'est pas la raison du problème ?
PatrickQuelles sont les nouvelles cotations qui seront intégrées dans l'historique ? Les nouvelles cotations ne mettront à jour que les jours les plus récents. Comment les nouvelles cotations peuvent-elles avoir un effet sur les anciennes données ?
Si c'est la réponse, alors la question est à nouveau "pourquoi ne modélise-t-il pas les anciennes données qui ne changent pas, pourquoi les modélise-t-il différemment ?".
Aragorn, je viens de lire l'intégralité de ce fil. Tout d'abord, je dois vous féliciter pour votre persévérance. Il y a environ un an, j'ai passé chaque moment éveillé à essayer de trouver le Saint Graal des conseillers. Niveaux Fib, points de pivot, stochastiques, MA's, etc... J'ai appris deux leçons : a) le testeur de stratégie est une perte de temps totale. b) le compte de démonstration fonctionne différemment du compte réel. J'ai été en mesure de trouver un code qui a tradé avec environ 90% de précision --- dans le backtesting. Sur le compte de démonstration, ce taux est tombé à environ 75 %, et lorsque j'ai essayé en direct, j'étais en dessous de 50 % (ce qui, avec une bonne gestion de l'argent, devrait être encore utilisable). Ce que je veux dire, c'est qu'il ne faut pas s'acharner à essayer de s'adapter au testeur de stratégie ou au compte de démonstration. Il semble que vous avez une bonne chose en cours. Je vais prendre votre conseiller à la maison, lire le code ce week-end - et le configurer sur mon compte réel en négociant des lots de 0,01. C'est la seule façon de savoir si ça marche ou pas. Merci de partager votre code !
qu'avez-vous trouvé ?
Comment supprimer un compte dans Metatrader ?
[Edit]
Je l'ai trouvé.
Navigateur - Comptes - passer la souris sur le compte - clic droit - supprimer.