Bonjour j'ai fait un robot qui fait du micro trading mais le problème c'est que il ne faut aucun profit j'aimerais si possible que vous m'aidiez a l'améliorer svp
J'ai un robot ici qui ne fonctionne pas comme je le voulais,
Je voulais qu'il trade avec les bougies,
En Analysant avec plusieurs indicateurs,si la bougie est verte alors il ouvre un achat..et arrête le trade avant un bougie rouge et ensuite il ouvre une vente et arrête le trade si il y a une bougie verte
je arrête le trade pour garder le profit,
Rajouter pas mal d'indicateurs sur le robot mais j'ai l'impression que cela n'a pas aider dans ses trade ,
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.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
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
}