Aide au codage - page 778

 

Quelqu'un pourrait-il me montrer comment rendre ce code plus court ? Comment utiliser le cycle for pour cela ?

extern double S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15;
if (S1==1234) S1=DoubleToString(S1);
if (S2==1234) S2=DoubleToString(S2);
if (S3==1234) S3=DoubleToString(S3);
if (S4==1234) S4=DoubleToString(S4);
if (S5==1234) S5=DoubleToString(S5);
if (S6==1234) S6=DoubleToString(S6);
if (S7==1234) S7=DoubleToString(S7);
if (S8==1234) S8=DoubleToString(S8);
if (S9==1234) S9=DoubleToString(S9);

Je voudrais quelque chose comme ça, mais je ne sais pas comment changer les noms des variables.

for(i=1; i<=9; i++){
if (S+i==1234) S+i=DoubleToString(S+i);
}
 
Karel Nagel:

Quelqu'un pourrait-il me montrer comment rendre ce code plus court ? Comment utiliser le cycle for pour cela ?

Je voudrais quelque chose comme ça, mais je ne sais pas comment changer les noms des variables.

Vous ne pouvez pas initialiser un tableau avec une liste d'entrées, en raison des limitations de MQL. (Seules des expressions constantes comme { 2, 5, 3.1 } feront l'affaire).

Mais puisque vous devez de toute façon convertir les doubles en chaînes de caractères, vous pouvez utiliser StringFormat. La chose intéressante à propos de cette fonction est qu'elle accepte un nombre arbitraire d'arguments.

Avec l'aide de StringSplit, il est possible de créer un tableau à la volée :

string line=StringFormat("%g %g %g %g %g %g %g %g %g",S1,S2,S3,S4,S5,S6,S7,S8,S9);
string numbers[];
int count=StringSplit(line,' ',numbers);
for(int i=0; i<count; i++)
  {
   if(numbers[i]=="1234") Print(" S",i+1," == 1234");
  }
 
rsiArray[0] = iRSI(NULL,0,10,PRICE_CLOSE,1);
rsiArray[1] = iRSI(NULL,0,10,PRICE_CLOSE,2);
rsiArray[2] = iRSI(NULL,0,10,PRICE_CLOSE,3);
rsiArray[3] = iRSI(NULL,0,10,PRICE_CLOSE,4);
rsiArray[4] = iRSI(NULL,0,10,PRICE_CLOSE,5);
ArraySetAsSeries(rsiArray, true); 

upperEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_UPPER, 0);
lowerEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_LOWER, 0); 

J'essaie de résoudre ce problème depuis trop longtemps maintenant, j'ai besoin d'aide.

Les valeurs de l'enveloppe ne correspondent pas à rsiArray[0] ou à toute autre valeur que je vois sur les graphiques et je ne peux pas comprendre pourquoi.


Une idée ?


Merci

EDIT : (corrigé) ok, tout ce que j'avais à faire était de redémarrer mt4 et le code a fonctionné correctement.

 

J'ai passé des heures à essayer de faire fonctionner correctement un EA/utilitaire et j'ai fait plusieurs changements jusqu'à ce que mon cerveau soit engourdi. Ci-joint une version préliminaire et je l'améliorerai une fois que j'aurai passé l'obstacle des bases qui fonctionnent correctement, à savoir faire sonner une alarme lorsqu'un ordre d'achat/de vente ouvert est ajouté et une autre alarme lorsqu'un ordre d'achat/de vente ouvert est fermé. Cette version fonctionne parfois et parfois non, donc peu fiable à ce stade.


//+------------------------------------------------------------------+
//|               myNotify.mq4                                       |
//|               Notify me by sound file of change in orders        |
//+------------------------------------------------------------------+

//---- input parameters
extern string OrderClosedWav = "OrderClosed.wav";
extern string OrderOpenedWav = "OrderOpened.wav";
string sVersion = "1.39";
int iOld, iNew = 0;
int i = 0;
uchar ii = 0;
long NewOrdersHash = 0;
long OldOrdersHash = 0;

int nOrders = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
// +------------------------------------------------------------------+
// |  expert deinitialization function                                |
// +------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
{ 
    nOrders = 0;
    NewOrdersHash = 0;

//First Pass
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 

OldOrdersHash = NewOrdersHash;
iOld =nOrders;

    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
// Wait
         Sleep(2000);

//Second Pass to compare after short pause
    nOrders = 0;
    NewOrdersHash = 0;
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
iNew = nOrders;

    if (ii > 24) {ii = 1;} else {ii++;}
       
    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
    if (OldOrdersHash != NewOrdersHash)
    {
     if (iNew > iOld)
       PlaySound(OrderOpenedWav);
     else
       PlaySound(OrderClosedWav);
    }

return(0);

}  

/*
void OrdersF()
   {

    nOrders = 0;
    NewOrdersHash = 0;
    for(int i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)          
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
    iNew = nOrders;
    return;
   }
*/
//+------------------------------------------------------------------+

 

Bonjour, je suis nouveau. Je veux faire une modification très simple sur cet indicateur

Comment et où puis-je simplement mettre dans la case Description de la Ligne Horizontale, le mot, Alert_ ?

pour qu'il apparaisse automatiquement ?

Dans l'attente de votre réponse



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

//|                                              horizontal line.mq4 |
//|                                                          Wdholic |
//|                            https://www.mql5.com/en/users/wdholic |
//+------------------------------------------------------------------+
#property copyright "Wdholic"
#property link      "https://www.mql5.com/en/users/wdholic"
#property version   "1.00"
#property strict

#import "cfunctions.dll" 
int      MT4_ScreenToClient(int hWnd, int& iX[]);  
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  { 
    double pmax=ChartGetDouble(0,CHART_PRICE_MAX);
    double pmin=ChartGetDouble(0,CHART_PRICE_MIN);
    double Ymax=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)*1.0;
   //  Alert(pmin);Alert(pmax);Alert(Ymax);
   int iCoords[2] ;
    int hWin = WindowHandle( Symbol(), Period());  
   
    MT4_ScreenToClient(hWin, iCoords);    
               
    double cory=iCoords[1]*1.0;
    double range=(pmax-pmin);
    
    double XY= (cory*1.0)/Ymax;
      double P=pmax-XY*range;
     
        
   Line("test_",P,clrAqua);
   WindowRedraw();
   return;
  }
//+------------------------------------------------------------------+

void Line(string t,double P,color C )
{ int a=1;string nm;
    nm="line_"+t+string(a);
  while(ObjectFind(0,nm)==0){ a++; nm="line_"+t+string(a);}
  
if(ObjectFind(0,nm)<0){
  ObjectCreate(0,nm,OBJ_HLINE,0,0,0); 
  ObjectSet( nm,OBJPROP_COLOR,C);}
  ObjectSet( nm,OBJPROP_PRICE1,P);  
  ObjectSet( nm,OBJPROP_SELECTED,1);  
}

 

Quelqu'un peut-il m'aider à coder ceci. Je place le Rectangle comme un haut et un bas des 3 derniers mois comme indiqué merci

Dossiers :
INDIxxx.jpg  243 kb
 

quelqu'un peut m'aider avec le stoploss sur le ma cross précédent.



 

Salut,

J'ai une idée. Mais je ne connais pas bien le code mq4.

Le sommet précédent est inférieur au deuxième sommet précédent, alors l'ordre d'achaten attente au sommet précédent * 2% ou 1% et lorsque le prix de la bougie actuelle touche cet ordre d'achat.

Le plus bas précédent est plus haut que le deuxième plus bas précédent, alors vendre l'ordre en attente au plus bas précédent * -2% ou -1% et quand le prix de la bougie actuelle touche cet ordre, vendre.

Toute période. Pas de cible Pas de stop loss. Trailing stop loss comme l'inverse.

Je suis reconnaissant à toute personne qui peut faire un code mq4. J'ai besoin d'aide. Seulement MT4.

 

Bonjour...

Pouvez-vous faire un Expert pour cette stratégie s'il vous plaît

Expert en renforcement

Paramètres:

1.Option : Vendre seulement / Acheter seulement

2.TP : 50

3.Sl : 00

4.Step : 150

5.Lot de départ : 0,1

6.Multiplication : 1.2.4.8.16... ...

7.Total des commandes : 100

8.Numéro magique : 111111

La méthode de travail:

1- Ouvrir une position au départ automatiquement par la taille de lot spécifiée .

2- Modification du Tp pour tous les trades sur chaque renforcement .

Selon l'équation suivante : Tp pour la dernière position double nous couvre tous perte flottante + profit de la dernière position .

3- Retour au lot de départ .

 
BANSINO Money Maker:

Bonjour ...

Pouvez-vous faire un Expert pour cette stratégie s'il vous plaît

Expert en renforcement

Paramètres :

1. Option : Vendre seulement / Acheter seulement

2. TP : 50

3. Sl : 00

4. Step : 150

5. Lot de départ : 0,1

6. Multiplication : 1.2.4.8.16... ...

7. Total des commandes : 100

8. Numéro magique : 111111

La méthode de travail :

1- Ouvrir une position au départ automatiquement par la taille de lot spécifiée .

2- Modification du Tp pour tous les trades sur chaque renforcement .

Selon l'équation suivante : Tp pour la dernière position double nous couvre tous perte flottante + profit de la dernière position .

3- Retour au lot de départ .

Publiez-le comme un travail dans la section Freelance.