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 Mladen, merci pour votre aide, j'ai appliqué vos modifications mais cela ne fonctionne pas vraiment, peut-être serait-il plus simple si l'EA ignorait simplement toutes les positions ouvertes existantes, c'est-à-dire les laissait ouvertes, puis ouvrait et fermait sa propre nouvelle position unique.
Actuellement, il ouvre et ferme sa propre position, mais il ferme également toutes les positions ouvertes supplémentaires.
augmenter
À partir d'un code partiel, voici ce que je pourrais suggérer. Si un paramètre booléen NoClosesisest créé, et si ce paramètre est mis à true, il ne devrait pas fermer les ordres s'il est appliqué comme le snippet (si CB et CS sont différents de 1, le code ne fermera pas les ordres).
Salutations
Mladen
Bonjour Mladen, merci pour votre aide, j'ai appliqué vos modifications mais cela ne fonctionne pas vraiment, peut-être serait-il plus simple si l'EA ignorait simplement toutes les positions ouvertes existantes, c'est-à-dire qu'il les laissait ouvertes, puis ouvrait et fermait sa propre nouvelle position unique Pour le moment, il ouvre et ferme sa propre position, mais il ferme également toutes les positions ouvertes supplémentaires existantes
augmenter
À partir d'un code partiel, voici ce que je pourrais suggérer. Si un paramètre booléen NoClosesisest créé, et si ce paramètre est mis à true, il ne devrait pas fermer les ordres s'il est appliqué comme le snippet (si CB et CS sont différents de 1, le code ne fermera pas les ordres).
Salutations
MladenC'est vrai, mais à moins que j'aie mal compris, cela signifie que la transaction ouverte par l'EA ne sera jamais clôturée et qu'elle alternera entre achat et vente ?
Oui, c'est exact.
D'après ce que j'ai compris, c'était votre idée : laisser l'EA ouvrir des ordres et ensuite gérer les ordres (les fermer) manuellement. Avec ce paramètre, vous pouvez même le remettre sur false et l'EA recommencera à fermer les ordres - il est donc "contrôlable de l'extérieur", en quelque sorte.
C'est vrai, mais à moins que j'aie mal compris, cela signifie que la transaction ouverte par l'EA ne sera jamais clôturée et qu'elle passera simplement de l'achat à la vente ?
Oui, c'est correct. Si j'ai bien compris, c'était votre idée : laisser l'EA ouvrir des ordres et ensuite gérer les ordres (les fermer) manuellement. Avec ce paramètre, vous pouvez même le remettre sur false et l'EA recommencera à fermer les ordres - il est donc "contrôlable de l'extérieur", en quelque sorte.
Ah désolé, j'étais ambigu, je veux que l'EA ouvre et ferme son ordre et ignore les ordres existants, donc par exemple
1. J'ai 5 ordres de vente ouverts
2. J'applique l'EA qui ouvre 1 ordre d'achat
3. J'ai maintenant 5 ventes et 1 achat
4. L'EA déclenche maintenant une vente et ferme son achat.
5. J'ai maintenant 6 ordres de vente (5 existants, 1 ordre de vente de l'EA).
6. L'EA déclenche maintenant un achat et ferme donc sa vente.
7. J'ai maintenant 5 ventes et 1 achat, etc.
Je vais fermer les ventes existantes, l'EA ignore toutes les autres transactions à part les siennes comme ci-dessus.
augmenter
Il le fait déjà si vous définissez le paramètre "Magic" à une valeur différente de 0 (c'est une partie du code qui vérifie s'il doit fermer un ordre d'achat juste avant l'ordre de fermeture).
Donc si le paramètre"Magic" n'est pas égal à 0 et à condition que la valeur de Magic soit unique, il ne fermera que les ordres ouverts par lui-même
Ah désolé, j'étais ambigu, je veux que l'EA ouvre et ferme son ordre et ignore les ordres existants, donc par exemple
1. J'ai 5 ordres de vente ouverts
2. J'applique l'EA, il ouvre 1 ordre d'achat
3. J'ai maintenant 5 ventes et 1 achat
4. L'EA déclenche maintenant une vente et ferme son achat.
5. J'ai maintenant 6 ordres de vente (5 existants, 1 ordre de vente de l'EA).
6. L'EA déclenche maintenant un achat et ferme donc sa vente.
7. J'ai maintenant 5 ventes et 1 achat etc.
Je vais fermer les ventes existantes, l'EA ignore toutes les autres transactions à part les siennes comme ci-dessus.Trade OncePerBar pour une TimeFrame spécifique
Bonjour, chers fEllA's !
J'ai un EA (yeeaa, qui n'en a pas) qui fonctionne bien sur le testeur, prend plusieurs trades par barre 4H, comme indiqué. Maintenant, en testant sur Demo (Alpari UK) avec 11 paires, l'EA ne prend qu'un seul trade, alors qu'il devrait en prendre plus (3 max, comme indiqué). Seulement chaque barre 4H, si les conditions sont remplies.
J'ai codé la fonction 'Semaphor' avec GlobalVariable, et ce morceau de code, pour empêcher l'ouverture de plusieurs ordres dans une TimeFrame prédéfinie (4H dans ce cas) :
//Acheter
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
{
if (SignalsOnly)
{
// L'alerte ------ ne doit être déclenchée qu'une fois par signal OU une fois toutes les 15 ou 30 minutes.
si (CheckAlertTime == iTime (NULL, 5, 0)) return(0) ;
sinon CheckAlertTime = iTime (NULL, 5, 0) ;
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY Signal") ;
if (PlaySounds) PlaySound (WhichSound) ;
}
if (!IsTrade && !SignalsOnly)
{
si (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0) ;
sinon CheckAlertTime = iTime (NULL, OncePerBarTF, 0) ;
//Contrôle de la marge libre
if (AccountFreeMargin() < (1000 * Lots))
{
Print ("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;
return(0) ;
}
if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point ; sinon TakeProfitLevel = 0.0 ;
{
if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2) ;
sinon Lots = Lots ;
}
si (TradeIsBusy() && IsTradingAllowed() < 0)
return (-1) ;
RefreshRates() ;
Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue) ;
si (Ticket > 0)
{
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Print ("7Qi BUY ouvert : ", OrderOpenPrice()) ;
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY opened") ;
if (PlaySounds) PlaySound (WhichSound) ;
}
sinon
{
Print ("Erreur lors de l'ouverture de BUY : ", Err) ;
}
}
// TradedThisBar = Bars ;
if (EachTickMode) TickCheck = True ;
if (!EachTickMode) BarCount = Bars ;
TradeIsNotBusy() ;
retourne (0) ;
}
}
//-------------------------------------------------
Est-il possible que ce code :
si (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0) ;
sinon CheckAlertTime = iTime (NULL, OncePerBarTF, 0) ;
empêche l'EA de trader au milieu de l'heure ? Est-ce qu'il vérifie seulement au début de la barre ?
Si j'utilise la fonction "TradedThisBar = Bars", je devrais laisser EA sur 1 TimeFrame seulement, correct ?
La fonction 'Semaphor' est également codée dans les TrailingStops et les PartialCloseLots.
Merci à tous pour votre aide,
Amusez-vous bien,
Simon
Slovénie
Iiiiiik - J'ai trouvé le problème
Bonjour !
J'ai trouvé le problème - c'est très probablement la combinaison de :
if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)
retour (-1) ;
//-----------------------------------------------------------------------------------------
int IsTradingAllowed (int MaxWaitingSec = 30)
{
if (!IsTradeAllowed())
{
int StartWaitingTime = GetTickCount() ;
Print ("Le contexte commercial est occupé ! Attendez qu'il soit libre...") ;
if (Alerts) Alert (Symbol() + " EA trading not allowed ! Attente...") ;
while (true)
{
if (IsStopped())
{
Print ("L'EA a été arrêtée !") ;
return(-1) ;
}
si (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )
{
Print( "Limite d'attente dépassée (" + MaxWaitingSec + " sec) !" ) ;
retour(-2) ;
}
si (IsTradeAllowed())
{
Print ("Le contexte commercial est maintenant libre !") ;
return(0) ;
}
Sleep (100) ;
}
}
else
{
Print ("Le contexte commercial est libre !") ;
retour(1) ;
}
}
*/
//-----------------------------------------------
int TradeIsBusy (int MaxWaitingSec = 30)
{
if (IsTesting()) return(1) ;
int Err = 0, StartWaitingTime = GetTickCount() ;
while (true)
{
si (IsStopped())
{
Print ("L'EA a été arrêtée !") ;
return(-1) ;
}
si (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("Temps d'attente (" + MaxWaitingSec + " sec) dépassé !") ;
if (Alerts) Alert (Symbol() + " EA waiting time exceeded !") ;
retour(-2) ;
}
si (GlobalVariableCheck ("TradeIsBusy"))
break ;
sinon
{
Err = GetLastError() ;
si (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableCheck - Error # ", Err) ;
Sleep (100) ;
continuer ;
}
}
if (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) return(1) ;
sinon
{
Err = GetLastError() ;
si (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err) ;
Sleep(100) ;
continuer ;
}
}
}
while (true)
{
if (IsStopped())
{
Print ("L'EA a été arrêtée !") ;
return(-1) ;
}
si (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("Temps d'attente (" + MaxWaitingSec + " sec) dépassé !") ;
si (Alertes) Alert (Symbol() + " temps d'attente dépassé !") ;
retour (-2) ;
}
if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1) ;
sinon
{
Err = GetLastError() ;
si (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err) ;
continuer ;
}
}
if (Alerts) Alert (Symbol() + " - waiting another EA to finish trading...") ;
Sleep (1000) ;
}
}
//--------------------------------
void TradeIsNotBusy()
{
int Err ;
si (IsTesting())
{
return(0) ;
}
while (true)
{
if (IsStopped())
{
Print (Symbol() + " L'EA a été interrompue !" ) ;
retour(-1) ;
}
si (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1) ;
sinon
{
Err = GetLastError() ;
si (Err != 0)
Print ("TradeIsNotBusy - GlobalVariableSet - Error # ", Err) ;
}
Sleep (100) ;
}
}
//-----------------------------------------------------------------------------------------------
Je vais essayer sans la fonction IsTradeAllowed.
Merci quand même,
Amusez-vous bien,
Simon
code d'erreur 130
----- supprimé ----- ce n'est plus nécessaire......
Tutoriel mq4 téléchargeable
Salut les gars,
Je n'arrive pas à trouver un tutoriel ou un livre de référence (pas en ligne ! !) sur le code mq4.
Pouvez-vous m'aider ?
Meilleures salutations
SOLVÉ, j'ai dû décompresser le fichier avec un utilitaire.