[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 30

 
AndrewX:

Veuillez m'indiquer comment régler le contrôle correct dans la condition d'ouverture de la position - qu'il y ait une position ouverte ou non pour cet instrument. Et s'il y a une position pour le symbole (une vente ou un achat), alors l'ouverture n'a pas lieu, sinon le signal pour ouvrir la position est déclenché ?

Voici le code (je pense qu'il est responsable de l'ouverture des positions) :

Il semble que la logique soit correcte, mais cela ne fonctionne toujours pas quand on ouvre plusieurs poses sur un seul outil.

P.S. Je ne suis pas un programmeur. S'il est possible d'expliquer plus en détail à l'abruti.


Ce n'est pas difficile. Il est préférable d'organiser 2 sous-programmes qui comptent les commandes.

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

De plus, dans le code lui-même, prich :

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

Il est préférable de déclarer la constante MAGIC dans les variables utilisateur. Comme ça :

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

Essayé


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


Ce n'est pas compliqué. Il est préférable d'organiser 2 sous-programmes qui comptent les commandes.

Ensuite, dans le code lui-même, prich :

Il est préférable de déclarer la constante MAGIC dans les variables utilisateur. Comme ça :

Merci, je vais regarder, mais c'est probablement un peu compliqué pour moi.
 
AndrewX:
Merci, je vais regarder, mais c'est probablement un peu compliqué pour moi.

J'ai joint un fichier EA à ce message. Jetez-y un coup d'œil.
Dossiers :
 
Bonjour ! Peut-être ma question sur la non-optimisation est-elle compliquée ou sans intérêt ?
 
volshebnik:
Bonjour ! Peut-être ma question sur la non-optimisation est-elle compliquée ou sans intérêt ?

Il y a plusieurs raisons possibles à cela. De la plus banale - absence d'historique - à la plus variée - aucune option rentable. Bien que cela puisse être plus simple - un bug dans l'Expert Advisor
 

Veuillez me dire si le robot crée des ordres en attente.

Les commandes pour les ordres en attente sont envoyées au serveur.

Les ordres en attente placés dans la file d'attente sont-ils affichés sur le terminal ?

Les ordres ouverts se trouvent-ils en haut, en dessous des ordres en attente placés dans la file d'attente ?

 
Jaguar1974:

Veuillez me dire si le robot crée des ordres en attente.

Les commandes pour les ordres en attente sont envoyées au serveur.

Les ordres en attente placés dans la file d'attente sont-ils affichés sur le terminal ?

Comme si je définissais manuellement les ordres en attente ?


Que voulez-vous dire par "en attente" ? Le conseiller expert envoie un ordre au serveur pour définir un ordre en attente. Si les paramètres de cet ordre sont corrects, le serveur fixe l'ordre en attente et celui-ci est immédiatement affiché dans le terminal du client. Si le conseiller expert envoie un ordre pour placer des ordres en attente à une certaine étape (cela se fait par le biais d'une boucle), alors chaque nouvel ordre est traité par le serveur séparément. Ces ordres sont placés dans la file d'attente - le conseiller expert a donné un ordre - le serveur a répondu. Le conseiller expert a donné un nouvel ordre et attend la réponse du serveur.

Que signifient les commandes en attente ? Qu'est-ce que vous entendez par là ?

 
Vinin:

Il y a plusieurs raisons possibles à cela. De la plus banale - le manque d'histoire à la plus variée - aucune option rentable. Bien que cela puisse être plus simple - une erreur dans le conseiller expert.
J'ai vérifié et il y a l'historique des Expert Advisors depuis 1999. J'ai vérifié toutes les variantes (même celles qui ne sont pas rentables). Si je ne règle qu'un seul paramètre МА, par exemple de 100 à 110, alors l'optimisation "meurt" - aucun résultat, aucun graphique..... Sans parler de l'inclusion d'autres paramètres.
 
volshebnik:
J'ai vérifié - il y a un historique des procès-verbaux depuis 1999. J'ai coché la case pour afficher toutes les variantes (celles qui ne sont pas rentables aussi). Je mets même un seul paramètre MA sur l'optimisation, par exemple de 100 à 110 et tout - l'optimisation "meurt" - aucun résultat, aucun graphique..... Sans parler de l'inclusion d'autres paramètres.

Je dois regarder le conseiller expert. Je ne peux rien dire de cette façon