Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 982
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
Hier, j'ai écrit le code, il semble fonctionner comme il le devrait, mais seulement lorsque j'arrive à la valeur supérieure du tableau avec le bouton plus, il se réinitialise au début du tableau et remonte à nouveau le tableau. Que puis-je ajouter ou corriger dans le code, de sorte que lorsqu'il atteint la valeur supérieure du tableau, les autres clics sur le bouton plus s'arrêteront à l'index supérieur et ne seront pas réinitialisés au bas du tableau ? Ou le code peut-il être simplifié d'une autre manière pour mettre en œuvre cette idée de cliquer sur un bouton ?
Probablement.
Je suppose que oui.
J'ai essayé ça aussi, ça marche de la même façon
J'ai essayé ça aussi, ça marche de la même façon
Je n'ai pas remarqué tout de suite, à quoi sert le cycle ?
Je n'ai pas remarqué tout de suite, mais à quoi sert la boucle ?
Y a-t-il un moyen de le faire sans lui ? Je ne sais pas ce qui est le mieux, et je fais ce qui me semble logique.
Y a-t-il un moyen de le faire sans lui ? Je ne sais pas ce qui est le mieux et je fais ce que je pense être logique.
La logique doit être différente. En appuyant sur le bouton +, on augmente l'indice du tableau. Atteint le maximum, il n'augmente pas, mais reste au maximum. J'ai appuyé sur le bouton - l'indice a diminué. Atteint le zéro, ne réagit pas à la pression, reste sur l'indice 0.
Ou y avait-il une autre idée ?
PS : Et qui a posté l'exemple de travail avec des drapeaux, en réponse à cette question et l'a supprimé ? Pourquoi l'avez-vous supprimé ? Après tout, c'est une très bonne solution pour l'homme. Pourquoi aurait-il besoin d'un tableau limité ? ??La logique doit être différente. En appuyant sur le bouton +, on augmente l'indice du tableau. Atteint le maximum, il n'augmente pas, mais reste au maximum. J'ai appuyé sur le bouton - l'indice a diminué. Atteint le zéro, ne répond pas, reste à l'index 0.
Ou y avait-il une autre idée ?
PS : Et qui a posté l'exemple de travail avec des drapeaux, en réponse à cette question et l'a supprimé ? Pourquoi l'avez-vous supprimé ? Après tout, c'est une très bonne solution pour l'homme. Pourquoi aurait-il besoin d'un tableau limité ? ??Non, c'était exactement l'idée. Je ne sais pas vraiment comment le faire correctement, alors je l'ai fait comme je l'ai fait. Mais j'ai remarqué que lorsque la boucle fonctionne dans le programme, tant que je ne clique pas sur les boutons du graphique, tout le reste ne fonctionne pas. C'est comme si tout était en pause. Je ne comprends pas pourquoi cela se produit, s'il existe des variantes pour implémenter l'idée d'une autre manière, je vous en serais reconnaissant...
C'est tout. Le problème est résolu) sans tableaux et autres trucs. Il s'est avéré que c'était beaucoup plus simple)))).
La deuxième question a été posée. Comment puis-je définir le niveau de déclenchement de l'alerte dans le code avec la flèche de réglage qui apparaît lorsque l'alerte est définie via le menu contextuel avec la souris ?
S'il vous plaît aidez, plz, est-il possible d'ajouter une fonction à cet EA, de sorte que l'EA mis dans la fenêtre EURUSD ouvrira une transaction avec les mêmes paramètres, au même moment, mais pour GBPUSD, et EURUSD ne s'ouvrira pas.
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Développeur : Minaev Andrey |
//| Expert Advisor : Stochastic.mq4 |
|| Site web : safe-forex.|| Site web : safe-forex. |
//| Mail :minaev.work@mail.ru |
//| Skype : live:minaev.travail |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
#property copyright "Safe-Forex.ru"
#lien de propriété "https://safe-forex.ru"
#propriété stricte
extern bool Use_Symbol1 = true ;
chaîne externe Symbol1 = "USDJPY" ;
input string settings = "" ; // paramètres du conseiller expert
entrée int magic = 111 ; // entrée magic
entrée double fixVolume = 0.01 ; // Volume
input int takeProfit = 500 ; // Profit
input int stopLoss = 500 ; //Loss
input int buyLevel = 100 ; // input int buy Level
input int sellLevel = 0 ; // 75 Niveau de vente
extern int ADXperiod = 15 ; //période ADX 15
extern int ADXLevel =1 ;
extern int MAperiod =360 ; //période MA 80
extern int MAperiod_2 =360 ; //période MA 80
input string stochSettings = "" ; // Paramètres de l'indicateur Stochastic Oscillator
entrée int stochPeriodK = 5 ; //période %K
entrée int stochPeriodD = 3 ; //période %D
entrée int stochSlowing = 3 ; // Ralentir
input ENUM_STO_PRICE stochPrice = STO_LOWHIGH ; // Prix
input ENUM_MA_METHOD stochMethod = MODE_SMA ; // Méthode
datetime newCandle ; // nouvelle bougie sur le graphique actuel
bool allowOpenBuy ; // permission d'ouvrir une position d'achat
allowOpenSell ; // permission d'ouvrir une position de vente
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit(void)
{
retourner INIT_SUCCEED ;
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick(void)
{
if(newCandle!=Time[0]) CheckSignalExist() ; newCandle=Time[0] ;
if(allowOpenBuy) OpenPosition(OP_BUY) ;
if(allowOpenSell) OpenPosition(OP_SELL) ;
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La fonction ouvre une position au prix actuel |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OpenPosition(int type)
{
double prix=0.0 ;
if(type==OP_BUY) price=Ask ;
if(type==OP_SELL) price=Bid ;
int ticket=OrderSend(_Symbol,type,fixVolume,price,0,0,",magic,0) ;
// int ticket=OrderSend(,type,fixVolume,price,0,0,0,",magic,0) ;
Sleep(1000) ;
si(ticket>0)
{
si(type==OP_BUY)
{
Print("Position d'achat ouverte, ticket : ",ticket) ;
allowOpenBuy=false ;
// SetStopOrders(ticket) ;
}
si(type==OP_SELL)
{
Print("Position de vente ouverte, ticket : ",ticket) ;
allowOpenSell=false ;
// SetStopOrders(ticket) ;
}
}
si(ticket<0)
{
if(type==OP_BUY) Print("La position d'achat ne s'est pas ouverte, erreur : ",GetLastError()) ;
if(type==OP_SELL) Print("La position de vente ne s'est pas ouverte, erreur : ",GetLastError()) ;
}
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La fonction fixe l'ordre d'arrêt |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//void SetStopOrders(int ticket)
//{
// double stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),
// spread =MarketInfo(_Symbol,MODE_SPREAD),
// tp =takeProfit,
// sl =stopLoss ;
// stopLevel+=spread ;
// if(tp<stopLevel)
// {
// tp=stopLevel ;
// Print("Distance minimale pour l'ensemble des bénéfices") ;
// }
// if(sl<stopLevel)
// {
// sl=stopLevel ;
// Print("Distance minimale pour l'ensemble des pertes") ;
// }
// if(OrderSelect(ticket,SELECT_BY_TICKET))
// {
// int type=OrderType() ;
// double opp =OrderOpenPrice() ;
// if(type==OP_BUY) {tp=opp+tp*_Point ; sl=opp-sl*_Point;}
// si(type==OP_SELL) {tp=topp-tp*_Point ; sl=opp+sl*_Point;}
// if(OrderModify(ticket,opp,sl,tp,0))
// {
// si(type==OP_BUY) Print("Niveaux de P&L définis pour une position d'achat, ticket : ",ticket) ;
// si(type==OP_SELL) Print("Les niveaux de P&L pour la position de vente ont été fixés, ticket : ",ticket) ;
// }
// else {
// if(type==OP_BUY) Print("Les niveaux de P&L pour la position d'achat n'ont pas été définis, ticket : ",ticket," error : ",GetLastError()) ;
// if(type==OP_SELL) Print("Les niveaux de P&L pour la position Sell n'ont pas été définis ; ticket : ",ticket," error : ",GetLastError() ;
// }
// }
//}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La fonction vérifie la présence du signal |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void CheckSignalExist(void)
{
double ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1) ; ////////////////////////////
double ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2) ;
double DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1) ;
double DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1) ;
double MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1) ;
double MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1) ;
//PERIOD_H1
double mainLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),
mainLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),
signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),
signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2) ;
Comment(" ", (Ask-Bid)/1.5," ",Bid-Close[1]," ", Ask-Close[1]) ;
// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//& iClose(Symbol(),Period(),1)>MA& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//&Close[2]<MA& Close[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] > Close[1]-(Close[1]-Close[20])
&& Close[10]>Bid )
{
Print("Un signal pour ouvrir une position d'achat est apparu") ;
si(GetPositionsNumber()==0)
{
// allowOpenSell=true ;
{ allowOpenBuy=true ;
Sleep(1000) ;
Print("Autorisé à ouvrir une position d'achat") ;
}
}
// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel
//& iClose(Symbol(),Period(),1)<MA& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
//&Close[2]>MA& Close[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] < Close[1]+(Close[20]-Close[1])
&& Close[10]<Ask )
{
Print("Un signal pour ouvrir une position de vente est apparu") ;
si(GetPositionsNumber()==0)
{
// allowOpenBuy=true ;
allowOpenSell=true ;
Sleep(1000) ;
Print("Autorisé à ouvrir une position de vente") ;
}
}
}
/////////////////////////////////////////
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| La fonction renvoie le nombre de positions ouvertes. |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int GetPositionsNumber(void)
{
int nombre=0 ;
for(int i=0 ; i<OrdersTotal() ; i++)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic)
numéro++ ;
le numéro de retour ;
}
//+---------------------------------------------------------------------------------------------------------------------------------
Aidez-nous, plz, est-il possible d'ajouter une fonction à cet EA, pour que l'EA installé dans la fenêtre EURUSD ouvre un trade avec les mêmes paramètres d'ouverture, au même moment, mais sur GBPUSD, et EURUSD ne s'ouvrira pas.
Je suis désolé, votre tête va bien ? Non seulement vous avez inséré le code à un seul endroit, mais vous avez également laissé un grand nombre de lignes vides.
Tu ne crois pas que tu devrais avoir un peu de respect pour la personne à qui tu demandes de l'aide ?