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

 
LSM:
J'ai modifié ma question et ajouté le code. Il y a une boucle en cours. Il n'est pas clair ce que j'obtiendrai lorsque cela se produira dans la boucle.
Tout y est clair,
par exemple, dans le cycle, l'indicateur a compté 15. Bougie de 5 minutes
et a pris la valeur du 15+1. La 16ème bougie de 15 minutes.


 
LSM:

Je vais répondre à ma propre question au cas où quelqu'un en aurait besoin).

C'est vrai.
 

Bon après-midi.

S'il vous plaît, conseillez-moi, j'ai une idée, mais de quel côté l'aborder, je ne "comprends" pas encore.

J'ai un indicateur, j'ai ouvert l'accès à celui-ci pour une certaine liste de numéros de compte à partir d'un fichier CSV sur le serveur.

Est-il techniquement possible d'écrire un message pour un compte spécifique de la liste et de l'afficher sur le graphique pour cet utilisateur spécifique.

Par exemple, spécifier le numéro de compte en CSV et écrire le texte comme "Bonjour..." et l'utilisateur le verra sur le graphique ? Si c'est possible, dans quelle direction "creuser" ? Merci...

 

Bonjour, pourriez-vous m'aider à comprendre la syntaxe de mql4 ? J'ai l'idée d'écrire un EA de suivi de tendance qui, par exemple, entrerait dans une position longue avec un stop de 150 pips à partir de l'ordre d'ouverture et un take profit de 50. Ensuite, si le prix atteint tp, un nouvel achat serait ouvert avec un stop de 150 et un take profit de 50 et s'il échoue sur le stop, une vente serait effectuée avec le même ratio risque/profit que pour les positions longues. J'ai essayé d'écrire un code avec cette logique mais cela a échoué parce que le conseiller expert ne fait pas de transactions pendant le test.

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
MosheDayan:

Bon après-midi.

S'il vous plaît, conseillez-moi, j'ai une idée, mais de quel côté l'aborder, je ne "comprends" pas encore.

J'ai un indicateur, j'ai ouvert l'accès à celui-ci pour une certaine liste de numéros de compte à partir d'un fichier CSV sur le serveur.

Est-il techniquement possible d'écrire un message pour un compte spécifique de la liste et de l'afficher sur le graphique pour cet utilisateur spécifique.

Par exemple, je spécifie le numéro de compte en CSV et j'écris le texte comme "Bonjour..." et l'utilisateur le voit sur le graphique ? Si c'est possible, dans quelle direction "creuser" ? Merci...

Envoyer au serveur une post-requête avec le numéro de compte

IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN)

Sur le serveur, vérifiez le numéro entrant avec toutes les lignes du fichier CSV, et s'il y a une correspondance, alors à partir de cette ligne du fichier, envoyez une réponse au terminal. Il ne reste plus qu'à lire la réponse du serveur dans le terminal et à l'afficher sur le graphique.

En général, de telles choses sont plus faciles à mettre en œuvre sur MySQL que sur fichier.

 
Maxim235v34:
Et oui, si ce n'est pas difficile, proposez un moyen de réduire l'interligne dans ce forum.

Écrivez d'abord dans un fichier texte (bloc-notes) - puis copiez-le via le presse-papiers. Vous l'obtiendrez comme ceci

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
lisez la fonction OnInit() - mettez le curseur dessus et appuyez sur F1. Le mot int est placé devant - la fonction renvoie donc une valeur entière. Vous essayez de renvoyer une valeur de type double. Le résultat de la fonction OnInit() est analysé par le sous-système d'exécution du terminal et il n'a guère besoin de cette valeur.
 
LRA:

Écrire d'abord dans un fichier texte (dans le bloc-notes) - puis copier via le presse-papiers. C'est comme ça

Merci. Bon à savoir.

Lisez la fonction OnInit() - mettez le curseur dessus et appuyez sur F1. Le mot int est placé devant - cette fonction renvoie donc une valeur entière. Vous essayez de renvoyer une valeur de type double. Le résultat de OnInit() est analysé par le sous-système d'exécution du terminal et il n'a guère besoin de cette valeur.
Alors, quel gestionnaire d'événement de quel type doit être utilisé pour mettre en œuvre ceci - pour
de fixer la valeur du prix au début de l'opération du programme, par rapport à laquelle les calculs futurs seront effectués ?
J'ai essayé de supprimer tout ce qui se trouvait dans int OnInit et de mettre le code suivant dans void OnTick au tout début en ajoutant la variable varStart
si(varStart==0)
{
b=Enchère ;
varStart=1 ;
}
Le résultat est inchangé.
 

Il y a une fonction avec un pointeur :


  TickReturn *returntick(int period, int timeposition)
   {
      TickReturn *returntick = new TickReturn();
      MqlRates rates[];
      MqlTick last_tick;
      
      if(SymbolInfoTick(symbol,last_tick)){}
      else Print("SymbolInfoTick() failed, error = ",GetLastError());
      
      //int timeposition=0;
      ArraySetAsSeries(rates,true);
      ArrayResize(rates,1);
      int copied=CopyRates(symbol,period,timeposition,1,rates);
      
      returntick.curtime = rates[0].time;
      returntick.open = rates[0].open;
      returntick.close = rates[0].close;
      returntick.high = rates[0].high;
      returntick.low = rates[0].low;
      returntick.priceask = last_tick.ask;
      returntick.pricebid = last_tick.bid;
      
      return(returntick);

   } 

Je l'appelle encore dans une autre fonction :


string timeis = returntick(period, 1).curtime;

Comment puis-je effacer la mémoire derrière elle ?

Sur delete(TickReturn) ; je reçois une erreur operand excepté.

 
hamsteruser:

Il y a une fonction avec un pointeur :


Je l'appelle encore dans une autre fonction :


Comment puis-je effacer la mémoire derrière elle ?

A delete(TickReturn) ; je reçois une erreur operand excepté.


Si je lis correctement votre code, TickReturn est une classe. Vous avez créé un pointeur vers une variable du type de cette classe. le cours lui-même ? Vous devez détruire le pointeur et vous assurer qu'il existe et qu'il est dynamique.

 
Алексей Барбашин:

Si je lis correctement votre code, TickReturn est une classe. Vous avez créé un pointeur vers une variable du type de cette classe, mais vous détruisez... ...le cours lui-même ? Vous devez détruire le pointeur et vous assurer qu'il existe et qu'il est dynamique.


Le *returntick n'est pas non plus destructible. Je suis juste confus par la sortie du terminal de trading. Il me dit qu'il n'efface pas la mémoire.