Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 930

 

DiPach , merci encore pour votre aide. J'ai analysé vos exemples. J'ai fait quelques changements dans mon code de démarrage. Le résultat est le suivant :

void OnStart()
  {
int awd1[];
ArrayResize(awd1,6,7);
   for(int i=0;i<=5;i++)
   {
   awd1[i]=i+10;
   Print("awd1[", i, "]=", awd1[i]);
   }
   Alert("awd1[0]=", awd1[0], ", awd1[1]=", awd1[1], ", awd1[2]=", awd1[2], 
   ", awd1[3]=", awd1[3], ", awd1[4]=", awd1[4], ", awd1[5]=", awd1[5]);
  }

Ce qui a été changé :

1. J'ai déplacé la ligne contenant la déclaration du tableau int awd1[] ; à l'intérieur de la fonction OnStart()

2. Ajout de la fonction ArrayResize(awd1,6,7) ;

3. Le script fonctionne.

Je vais essayer de tirer quelques conclusions. Dans les scripts, il est correct de déclarer les tableaux à l'intérieur de la fonction OnStart(). Une fois le tableau déclaré, sa taille doit être nécessairement définie à l'aide de la fonction ArrayResize(), sinon le compilateur jurera. Mes conclusions sont-elles correctes ? Si non, veuillez donner l'interprétation correcte.

 
silachara:

DiPach , merci encore pour votre aide. J'ai analysé vos exemples. J'ai fait quelques changements dans mon code de démarrage. Le résultat est le suivant :

Ce qui a été changé :

1. déplacement de la ligne contenant la déclaration du tableau int awd1[] ; dans la fonction OnStart()

2. Ajout de la fonction ArrayResize(awd1,6,7) ;

3. Le script fonctionne.

Je vais essayer de tirer des conclusions. Dans les scripts, il est correct de déclarer les tableaux à l'intérieur de la fonction OnStart(). Une fois le tableau déclaré, sa taille doit être nécessairement définie à l'aide de la fonction ArrayResize(), sinon le compilateur générera une erreur. Mes conclusions sont-elles correctes ? Si non, veuillez donner l'interprétation correcte.

D'une manière générale, oui. Et cela fonctionnera, au moins silencieusement, mais très bien. :)

Je ne préciserai que les points suivants :

1. Lorsque vous déclarez des variables et des tableaux normaux, je pense que vous devez prendre en compte ce que le script (ou l'EA/indicateur) va faire et ce à quoi les variables/réseaux sont destinés.

Le déroulement de votre script ci-joint permet la déclaration de variables non pas au niveau global du programme, mais localement. C'est-à-dire que le tableau est déclaré une fois. Nous n'avons pas besoin de déclarations en boucle dans le corps de Start(), par exemple, avant de lancer la boucle for() et lorsque nous avons besoin d'une déclaration supplémentaire de certaines variables après for() {} :


En conséquence, le tableau est déclaré non pas au niveau des variables globales du programme mais dans le corps de OnStart() avant l'instruction de la boucle for() - c'est tout à fait acceptable dans ce schéma d'exécution du programme.

De mon point de vue, s'il n'y a pas besoin de déclarer quelque chose au niveau des variables globales dans un programme, nous ferions mieux d'utiliser cette opportunité et de déclarer tout ce que nous pouvons localement.

2. En ce qui concerne le code, laissez-moi être clair :

void OnStart()
  {
   int awd1[];
   ArrayResize(awd1,6,7);
   for(int i=0;i<6;i++)
     {
      awd1[i]=i+10;
      Print("awd1[",i,"]=",awd1[i]);
     }
   string text=StringConcatenate("awd1[0]=",awd1[0],", awd1[1]=",awd1[1],", awd1[2]=",awd1[2],
                                 ", awd1[3]=",awd1[3],", awd1[4]=",awd1[4],", awd1[5]=",awd1[5]);
   Alert(text);
  }

C'est-à-dire :

  • Vous ne devez pas utiliser le signe <= (moins que égal) dans for. Je veux dire où il était (i=0;i<=5;i++). Il suffit de mettre le signe <(moins que) et le chiffre 6 au lieu de 5 :
for(int i=0;i<6;i++)

C'est la façon dont 5 serait approprié pour pour :

for(int i=5;i>=0;i--)
  • Je me souviens avoir rencontré une information antérieure selon laquelle la fonction Stringconcatenate contribue à un traitement plus rapide des textes longs. C'est pourquoi je l'utilise généralement dans mon code. Je l'ai ajouté ici aussi, juste au cas où.


P./S. : Une précision supplémentaire, juste au cas où, l'utilisation de ArrayResize() - pour les tableaux dynamiques. Dans la documentation de cette fonction, il est indiqué que cette fonction ne peut pas redimensionner les tableaux dynamiques.

 
Best_ATS:
Pourquoi ne puis-je pas ajouter des amis ?
Et comment imaginer un ami sans le connaître personnellement dans la vie, au travail ?
 

Bonjour, comment puis-je faire en sorte que le nouveau prix soit affiché en premier et que le prix précédent descende en bas de l'écran et ainsi de suite ? J'ai donné un exemple pour que ce soit clair.

double NN=0;
double NN1=0;
double NN2=0;
double NN3=0;
void OnTick()
  {
//---
if(Ask>NN)NN=Ask;
if(NN>NN1)NN1=NN;
if(NN1>NN2)NN2=NN1;
if(NN2>NN3)NN3=NN2;
        Comment(""       
             + "1.   "+"Buy: "" Max: " + DoubleToStr(NN,5)
             + "\n"  
             + "2.   "+"Buy: "" Max: " + DoubleToStr(NN1,5)
             + "\n"  
             + "3.   "+"Buy: "" Max: " + DoubleToStr(NN2,5)
             + "\n"  
             + "4.   "+"Buy: "" Max: " + DoubleToStr(NN3,5)
             + "\n"
             + "------------------------------------------------" );
           
  }
 
abeiks:

Bonjour, comment puis-je faire en sorte que le nouveau prix soit affiché en premier et que le prix précédent descende en bas de l'écran et ainsi de suite ? Ce serait clair fait un exemple.

J'ai fait un exemple, et avec les conditions, vous pouvez plus ou moins le comprendre vous-même :

double bda_Price[4];
void OnTick()
{
      int li_int;
//---
    if (Ask > bda_Price[0])
    {
        ArrayInitialize (bda_Price, 0.);
        bda_Price[0] = Ask;
        double lda_Price[3];
        ArrayCopy (lda_Price, bda_Price, 0, 1);
        for (int li_int = 1; li_int < 4; li_int++)
        {bda_Price[li_int] = lda_Price[li_int-1];}
    }
    string ls_txt;
    StringInit (ls_txt, 100);
    for (li_int = 0; li_int < 4; li_int++)
    {ls_txt = StringConcatenate (ls_txt, (string) li_int, ".   Buy:  Max: ", DoubleToStr (bda_Price[li_int], Digits), "\n");
    ls_txt = StringConcatenate (ls_txt, "------------------------------------------------" );
    Comment (ls_txt);
//---
}
 
TarasBY:

J'ai fait un exemple, et vous pouvez plus ou moins trouver les termes par vous-même :


Merci !
 
abeiks:

Bonjour, comment puis-je faire en sorte que le nouveau prix soit affiché en premier et que le prix précédent descende en bas de l'écran et ainsi de suite ? Pour que ce soit clair, j'ai donné un exemple.

Voici un code complètement primitif.

double Price1, Price2, Price3, Price4;

void OnTick()
  {
Price4=Price3;
Price3=Price2;
Price2=Price1;
Price1=Ask;
Comment(Price1, "\n", Price2, "\n", Price3, "\n", Price4);
  }
 
silachara:

Voici un code parfaitement primitif réalisé.




Merci !
 

Bonjour à tous. J'ai essayé d'ouvrir un ordre de transaction dans le testeur de stratégie en utilisant un script rudimentaire, sans succès.

int start()

{

//----

int res ;

double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point ;

res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,",0,0,Blue) ;

if(res>-1)Alert("Open BUY order with ticket ",res) ;

//----

retour(0) ;

}

J'ai placé le script sur le graphique du testeur en mode visualisation, mais l'ordre de transaction s'ouvre dans le terminal MT4.

Je ne peux pas non plus obtenir d'informations sur les ordres ouverts dans le testeur de stratégie utilisant SimpleFXTester_v2.ex4.

Aidez-moi à comprendre.

 
kosmos0975:

Bonjour à tous. J'ai essayé d'ouvrir un ordre de transaction dans le testeur de stratégie en utilisant un script rudimentaire, sans succès.

int start()

{

//----

int res ;

double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point ;

res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,",0,0,Blue) ;

if(res>-1)Alert("Open BUY order with ticket ",res) ;

//----

retour(0) ;

}

J'ai placé le script sur le graphique du testeur en mode visualisation, mais l'ordre de transaction s'ouvre dans le terminal MT4.

Je ne peux pas non plus obtenir d'informations sur les ordres ouverts dans le testeur de stratégie utilisant SimpleFXTester_v2.ex4.

Aidez-moi à comprendre.

Les scripts du testeur de stratégie ne fonctionnent pas.
Raison: