Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 982

 
 int x=0;
 int scale_mas[13]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096};//объявление массива

 for(int i=0;i < ArraySize(scale_mas);i++){
    if(x == scale_mas[0])x = scale_mas[1];                       //если х=индекс0, то х=индекс1
    if(x >= ArraySize(scale_mas))x = scale_mas[11];              //если х>= размер массива, то х=индекс11
    i=x;
    if(ObjectGetInteger(0, "Button+", OBJPROP_STATE) == false){  //если кнопка "+" нажата
       i=i+1;                                                    //увеличиваем индекс на 1
       ObjectSetInteger(0, "Button+", OBJPROP_STATE,true);}
                        
    x=i;							 //присваиваем х значение последнего индекса
    if(ObjectGetInteger(0, "Button-", OBJPROP_STATE) == false){  //если кнопка "-" нажата
       i=i-1;                                                    //уменьшаем индекс на 1
    ObjectSetInteger(0, "Button-", OBJPROP_STATE,true);}
                            
    x=i;                                                         //присваиваем х значение последнего индекса
 ObjectSetString(0,"=TrendLine",OBJPROP_TEXT,scale_mas[x]);}}    //выводим результат scale_mas[x]
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 ?
 
Ivan Revedzhuk:
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 ?
if(x >= ArraySize(scale_mas))
 ArraySize(scale_mas)-1;              //если х>= размер массива, то ....

Probablement.

 
Alexey Viktorov:

Je suppose que oui.

J'ai essayé ça aussi, ça marche de la même façon

 
Ivan Revedzhuk:

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 ?

 
Alexey Viktorov:

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.

 
Ivan Revedzhuk:

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é ? ??
 
Alexey Viktorov:

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 ?

Question sur l'alerte

 

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 ;

}

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

 
vvs1:

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 ?