
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
Bonjour chers amis.
J'ai besoin d'aide pour m'aider à corriger les erreurs sur ce expert que j'essai de coder. je sis en novice en matière de codage et votre aide me permettra de tester le code. Merci d'avance.
Voici le code en question
//+------------------------------------------------------------------+
//| StochasticEA.mq5 |
//| Copyright 2024, Your Name |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade trade; // Instance pour gérer les ordres
//--- Paramètres de l'EA
input double InitialLotSize = 0.1; // Taille initiale des lots
input int StopLoss = 100; // Stop loss en points
input int TakeProfit = 100; // Take profit en points
input int MagicNumber = 123456; // Numéro magique pour identifier les ordres
double LotSize; // Variable pour la taille actuelle des lots
double prevMainLine, prevSignalLine; // Valeurs des barres précédentes
double mainLine, signalLine; // Valeurs actuelles
// Variable pour mémoriser si la position précédente était en perte
bool LastTradeInLoss = false;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'EA |
//+------------------------------------------------------------------+
int OnInit()
{
LotSize = InitialLotSize; // Initialiser la taille des lots
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Fonction principale exécutée à chaque tick |
//+------------------------------------------------------------------+
void OnTick()
{
// Récupération des signaux de l'indicateur Stochastic (%K et %D)
mainLine = iCustom(NULL, 0, "Stochastic", 5, 3, 3, 0, 0); // Ligne principale %K
signalLine = iCustom(NULL, 0, "Stochastic", 5, 3, 3, 1, 0); // Ligne de signal %D
// Récupération des valeurs à la barre précédente (pour vérifier le croisement)
prevMainLine = iCustom(NULL, 0, "Stochastic", 5, 3, 3, 0, 1); // Ligne principale %K (barre précédente)
prevSignalLine = iCustom(NULL, 0, "Stochastic", 5, 3, 3, 1, 1); // Ligne de signal %D (barre précédente)
// Vérifier si une position est déjà ouverte
if (PositionsTotal() > 0)
{
ulong ticket = PositionGetTicket();
double currentProfit = PositionGetDouble(POSITION_PROFIT);
// Si une position d'achat est ouverte
if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
{
// Fermer l'achat et ouvrir une vente lorsque la ligne %K coupe à la baisse la ligne %D
if (prevMainLine > prevSignalLine && mainLine < signalLine)
{
// Fermer la position
trade.PositionClose(ticket);
// Appliquer martingale en cas de perte
if (currentProfit < 0)
{
LotSize *= 1.5;
LastTradeInLoss = true;
}
else
{
LotSize = InitialLotSize;
LastTradeInLoss = false;
}
// Ouvrir une nouvelle position de vente
trade.Sell(LotSize, NULL, Bid, StopLoss * _Point, TakeProfit * _Point, "Stochastic Sell");
}
}
// Si une position de vente est ouverte
else if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
{
// Fermer la vente et ouvrir un achat lorsque la ligne %K coupe à la hausse la ligne %D
if (prevMainLine < prevSignalLine && mainLine > signalLine)
{
// Fermer la position
trade.PositionClose(ticket);
// Appliquer martingale en cas de perte
if (currentProfit < 0)
{
LotSize *= 1.5;
LastTradeInLoss = true;
}
else
{
LotSize = InitialLotSize;
LastTradeInLoss = false;
}
// Ouvrir une nouvelle position d'achat
trade.Buy(LotSize, NULL, Ask, StopLoss * _Point, TakeProfit * _Point, "Stochastic Buy");
}
}
}
// Si aucune position n'est ouverte
else
{
// Ouvrir une position d'achat lorsque la ligne %K coupe à la hausse la ligne %D
if (prevMainLine < prevSignalLine && mainLine > signalLine)
{
trade.Buy(LotSize, NULL, Ask, StopLoss * _Point, TakeProfit * _Point, "Stochastic Buy");
}
// Ouvrir une position de vente lorsque la ligne %K coupe à la baisse la ligne %D
else if (prevMainLine > prevSignalLine && mainLine < signalLine)
{
trade.Sell(LotSize, NULL, Bid, StopLoss * _Point, TakeProfit * _Point, "Stochastic Sell");
}
}
}
//+------------------------------------------------------------------+
//| Fonction de terminaison |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// Code à exécuter lors de la fermeture de l'EA
}