Aide au codage - page 237

 

Bonjour,

J'ai quelques brèves questions de codage, mon MT4 semble avoir migré vers MQL5.

Certains blocs de code de suppression ne fonctionnent plus :

En dessous, j'obtiens le message d'erreur :

'(' Pointeur d'objet attendu.

//+----------------------------------------------------------------------------+//| Fermer et supprimer |

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

if(sell)if(oppositeclose)close(OP_BUY) ;

if(buy)if(oppositeclose)close(OP_SELL) ;

if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}

if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}

if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}}

En dessous, j'obtiens les messages d'erreur suivants 'delete' - nom attendu et

'}' - ne sont pas autorisées dans une portée globale

void delete(int type){

if(OrdersTotal()>0){

for(i=OrdersTotal();i>=0;i--){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

if(type!=6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==type){

OrderDelete(OrderTicket()) ;

}

}

if(type==6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP

|| OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT){

OrderDelete(OrderTicket()) ;

}

}

}

}

}

Quelqu'un pourrait-il m'aider ?

Merci d'avance !

 

Bonjour à tous les commerçants et codeurs !

J'espère que quelqu'un pourra m'aider ici.

J'ai cherché et essayé les quelques EA qui existent, mais je n'ai toujours pas trouvé ce que je cherche.

Peut-être que je cherche quelque chose qui est difficile à trouver ou que je ne fais pas d'efforts :-)

Je trade aussi un système SR en dessinant mes lignes et en créant des canaux temporaires. Existe-t-il quelque chose qui puisse exécuter des positions lorsque le prix atteint les lignes ? Le problème est qu'il doit être capable d'ouvrir des positions chaque fois que le prix atteint les lignes. Les lignes rouges pour la vente, les bleues pour l'achat, les jaunes pour le SL et les vertes pour le TP. Donc pas de transactions uniques ou d'OCO.

Merci d'avance !

Dossiers :
sr.png  34 kb
 
daytrade:
Bonjour à tous les traders/codeurs !

J'espère que quelqu'un pourra m'aider.

J'ai cherché et essayé les quelques EA qui existent, mais je n'ai toujours pas trouvé ce que je cherche.

Peut-être que je cherche quelque chose qui est difficile à trouver ou que je ne fais pas d'efforts :-)

Je trade aussi un système SR en dessinant mes lignes et en créant des canaux temporaires. Existe-t-il quelque chose qui puisse exécuter des positions lorsque le prix atteint les lignes ? Le problème est qu'il doit être capable d'ouvrir des positions chaque fois que le prix atteint les lignes. Les lignes rouges pour la vente, les bleues pour l'achat, les jaunes pour le SL et les vertes pour le TP. Donc pas d'opérations uniques ou d'OCO.

Merci d'avance !

Avez-vous vérifié l'EA de ce fil : https://www.mql5.com/en/forum/176382?

 

Modifier le Stop Loss

Bonjour à tous,

Est-ce que quelqu'un sait pourquoi mon ordre de modification de stop loss ne fonctionne pas correctement ?

Le stop loss oscille très rapidement entre le DonchianLowM5 et l'OrderOpenPrice lorsque le DonchianLowM5 passe au-dessus de l'OrderOpenPrice.

Voici le code (désolé, je ne sais pas comment le coller correctement).

//--- Mouvement du stop loss

if (OrdersTotal() > 0)

{

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si (OrderType() == OP_BUY)

{

si (OrderStopLoss() < OrderOpenPrice())

{

si (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green) ;

}

}

si (OrderStopLoss() > OrderOpenPrice())

{

si (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green) ;

}

}

si (OrderStopLoss() >= OrderOpenPrice())

{

si (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green) ;

}

}

}

Un peu de perplexité.

Le but de ce code est de :

1. Modifier le stop loss pour suivre le canal de Donchian inférieur sur le graphique M5 jusqu'à l'OrderOpenPrice. Le stop loss ne doit pas suivre le canal donchien sur le graphique M5 au-delà de l'OrderOpenPrice. Il se déplace pour atteindre le seuil de rentabilité.

2. Parfois, une grande bougie se ferme au-delà de l'OrderOpenPrice et donc la deuxième section du code est de le ramener au seuil de rentabilité seulement.

3. Le stop loss doit suivre le Donchian Low sur le graphique H4 une fois que le Donchian Channel sur le graphique H4 dépasse l'OrderOpenPrice.

Les canaux donchiens sont codés comme suit :

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1)) ;

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1)) ;

J'ai vérifié le journal et le stop loss est modifié pour correspondre EXACTEMENT au OrderOpenPrice (il n'est pas inférieur, même d'une fraction de pip, ce qui le ferait suivre le Donchian Low sur le graphique M5.

Quelqu'un sait-il pourquoi il fait cela ?

 
crsnape@btinternet.com:
Bonjour à tous,

Quelqu'un sait-il pourquoi mon ordre stop loss modifié ne fonctionne pas correctement ?

Le stop loss oscille très rapidement entre le DonchianLowM5 et le OrderOpenPrice lorsque le DonchianLowM5 passe au-dessus du OrderOpenPrice.

Voici le code (désolé, je ne sais pas comment le coller correctement).

//--- Mouvement du stop loss

if (OrdersTotal() > 0)

{

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si (OrderType() == OP_BUY)

{

si (OrderStopLoss() < OrderOpenPrice())

{

si (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green) ;

}

}

si (OrderStopLoss() > OrderOpenPrice())

{

si (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green) ;

}

}

si (OrderStopLoss() >= OrderOpenPrice())

{

si (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green) ;

}

}

}

Un peu de perplexité.

Le but de ce code est de :

1. Modifier le stop loss pour suivre le canal de Donchian inférieur sur le graphique M5 jusqu'à l'OrderOpenPrice. Le stop loss ne doit pas suivre le canal donchien sur le graphique M5 au-delà de l'OrderOpenPrice. Il se déplace pour atteindre le seuil de rentabilité.

2. Parfois, une grande bougie va clôturer au-delà de l'OrderOpenPrice et donc la deuxième section du code est de le ramener au seuil de rentabilité seulement.

3. Le stop loss doit suivre le Donchian Low sur le graphique H4 une fois que le Donchian Channel sur le graphique H4 dépasse l'OrderOpenPrice.

Les canaux donchiens sont codés comme suit :

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1)) ;

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1)) ;

J'ai vérifié le journal et le stop loss se modifie EXACTEMENT au OrderOpenPrice (il n'est pas inférieur, même d'une fraction de pip qui le ferait suivre le Donchian Low sur le graphique M5.

Quelqu'un sait-il ce qui fait cela ?

Vous utilisez DonchianLowM5 et DonchianLowH4 (je suppose que ce sont des valeurs différentes). Cela pourrait vous poser un problème

 

Bonjour Mladen,

Merci pour votre réponse.

DonchianLowM5 et DonchianLowH4 sont des valeurs différentes mais elles ont chacune leur propre but. Le DonchianLowM5 est utilisé pour ajuster le SL pour atteindre le seuil de rentabilité dans les premiers stades d'une transaction. Le DonchianLowH4 ajuste le SL comme un mécanisme de trailing stop. Cela ne devrait prendre effet que lorsque le DonchianLowH4 dépasse le OrderOpenPrice.

J'ai examiné cette question un peu plus et j'ai peut-être trouvé le problème. Je voulais déterminer si la fonction OrderModify repositionnait le SL exactement comme OrderOpenPrice. Mais ce n'est pas le cas. OrderOpenPrice dans mon journal est indiqué comme étant 1.12224, précision de 5 chiffres, et pourtant la fonction Print ci-dessous indique que OrderOpenPrice est seulement de 4 chiffres. Le SL utilisera donc ce chiffre à 4 chiffres, et non à 5. J'ai besoin qu'il utilise les 5 chiffres.

Comment puis-je faire en sorte que la modification de l'ordre ajuste le SL à EXACTEMENT le prix d'ouverture de l'ordre à 5 chiffres ?

Voici mon code :

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green) ;

Print("SL modifié au prix d'ouverture de l'ordre ", OrderOpenPrice()) ;

}

J'ai essayé ceci mais cela ne fonctionne pas :

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green) ;

Print("SL modifié au prix d'ouverture de l'ordre ", OrderOpenPrice()) ;

Mon courtier a 5 chiffres car le journal confirme le prix auquel il a ouvert l'ordre à 1.12224.

J'espère que mon explication a du sens. Des idées ?

 
crsnape@btinternet.com:
Bonjour Mladen,

Merci pour votre réponse.

DonchianLowM5 et DonchianLowH4 sont des valeurs différentes mais elles ont chacune leur propre objectif. Le DonchianLowM5 est utilisé pour ajuster le SL afin d'atteindre le seuil de rentabilité dans les premiers stades d'une transaction. Le DonchianLowH4 ajuste le SL comme un mécanisme de trailing stop. Cela ne devrait prendre effet que lorsque le DonchianLowH4 dépasse le OrderOpenPrice.

J'ai examiné cette question un peu plus et j'ai peut-être trouvé le problème. Je voulais déterminer si la fonction OrderModify repositionnait le SL exactement comme OrderOpenPrice. Mais ce n'est pas le cas. OrderOpenPrice dans mon journal est indiqué comme étant 1.12224, précision de 5 chiffres, et pourtant la fonction Print ci-dessous indique que OrderOpenPrice est seulement de 4 chiffres. Le SL utilisera donc ce chiffre à 4 chiffres, et non à 5. J'ai besoin qu'il utilise les 5 chiffres.

Comment puis-je faire en sorte que la modification de l'ordre ajuste le SL à EXACTEMENT le prix d'ouverture de l'ordre à 5 chiffres ?

Voici mon code :

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green) ;

Print("SL modifié au prix d'ouverture de l'ordre ", OrderOpenPrice()) ;

}

J'ai essayé ceci mais cela ne fonctionne pas :

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green) ;

Print("SL modifié au prix d'ouverture de l'ordre ", OrderOpenPrice()) ;

Mon courtier a 5 chiffres car le journal confirme le prix auquel il a ouvert l'ordre à 1.12224.

J'espère que mon explication a un sens. Des idées ?

Le fait que vous obteniez le prix imprimé avec une précision de 4 chiffres n'est pas le problème : il suffit d'utiliser cette Print(DoubleToStr(OrderOpenPrice(),Digits)) ; et vous obtiendrez une impression correcte. Le problème est autre et je pense que si vous comparez deux prix complètement différents, cela pourrait vous poser problème.

 

Ah oui.

Qu'est-ce que tu veux dire ? Est-ce que je me suis trompé dans la structure de mes parenthèses ?

Le code est censé choisir soit le DonchianLowM5 soit le DonchianLowH4 en fonction de la situation.

Il se peut que la structure de mes parenthèses soit incorrecte pour chaque élément du code.

 

Essayez de simplifier le code. Quelque chose comme le code ci-joint

PS : vérifiez si c'est la logique que vous aviez en tête.

Dossiers :
 

bonjour, ici je suis deux indicateurs, l'un basé sur le RSI et l'autre sur l'indice de force, mais le problème me demande le rsi en regardant les courbes, il indique pas que je veux, si vous avez la solution, évidemment je peux vous envoyer le fichier si nécessaire merci pour votre aide ... désolé pour l'anglais "google traductor".