[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 47

 

Chers spécialistes du forum, qui eux aussi ne comprenaient presque rien auparavant.

J'essaie d'écrire un conseiller expert simple qui utilise l'indicateur Sar parabolique comme outil de formation. Son action est censée être élémentaire : si le prix était inférieur à la valeur Sar et qu'il est ensuite remonté, nous devons acheter exactement au moment où le prix traverse l'indicateur et exactement une fois avec un stop loss et un take profit de 10 points. Et si c'est l'inverse, alors vendez.

Le problème est qu'il achète et vend toujours, mais il le fait tant qu'il y a de l'argent libre sur le dépôt, pas une seule fois. En d'autres termes, dès que le prix dépasse le niveau de Sar, il achète en permanence jusqu'à ce que le prix soit plus élevé, et dès que le prix est inférieur à Sar, il vend en permanence jusqu'à ce que le prix soit inférieur.

En fait, la question est la suivante : comment faire en sorte que notre EA ne fasse qu'une seule transaction lorsque ces conditions apparaissent, et non une série infinie d'entre elles ?

Voici le code de mon Expert Advisor.

//+------------------------------------------------------------------+
//|                                    Current_sar_value_summary.mq4 |
//|                                         Орлов Денис Владимирович |
//|                                                 orlovkem@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Орлов Денис Владимирович"
#property link      "orlovkem@mail.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     //объявляем переменные
   double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены
   int _ticket;      //возвращает количество открытых позиций
   
   _sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
   _price=Bid;                      //приравнял переменную _price к текущему уровню цены Бид
   
   //описываем условие покупки: если уровень цены был ниже значения сар
   if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем
                {
                   Alert("Надо покупать");
                   _ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                 
                }
                 return(0);
           }
 
         
   if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар
         {
           if(_price<=_sar_value)// а потом стал ниже, то продаем
            {
                   Alert("Надо продавать");
                   _ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                   
            }
            return(0);
            
         }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Je veux vous demander de m'aider à trouver une solution. Je vous promets que lorsque je deviendrai un gourou, je n'ignorerai pas les demandes des gens comme moi.

Cordialement, Denis Orlov.

 
orlovkem >> :

Chers spécialistes du forum, qui eux aussi ne comprenaient presque rien auparavant.

J'essaie d'écrire un conseiller expert simple qui utilise l'indicateur Sar parabolique comme outil de formation. Son action est censée être élémentaire : si le prix était inférieur à la valeur Sar et qu'il est ensuite remonté, nous devons acheter exactement au moment où le prix traverse l'indicateur et exactement une fois avec un stop loss et un take profit de 10 points. Et si c'est l'inverse, alors vendez.

Le problème est qu'il achète et vend toujours, mais il le fait tant qu'il y a de l'argent libre sur le dépôt, pas une seule fois. En d'autres termes, dès que le prix dépasse le niveau de Sar, il achète en permanence jusqu'à ce que le prix soit plus élevé, et dès que le prix est inférieur à Sar, il vend en permanence jusqu'à ce que le prix soit inférieur.

En fait, la question est la suivante : comment faire en sorte que notre EA ne fasse qu'une seule transaction lorsque ces conditions apparaissent, et non une série infinie d'entre elles ?

Voici le code de mon Expert Advisor.

Je veux vous demander de l'aide. Je vous promets que lorsque je serai un gourou, je n'ignorerai pas les demandes des autres nuls comme moi.

Sincèrement, Denis Orlov.

Où conservez-vous la valeur prédictive de l'indicateur ? (dans quelle variable... ?) la même chose avec la valeur du prix

double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены

 
lascu.roman >> :

et où avez-vous la valeur précédente de l'indicateur ? (dans quelle variable... ?) de même avec la valeur du prix

Le point est que la valeur de l'indicateur précédent se trouve sur la bougie précédente et que le prix croise la valeur de l'indicateur sur la bougie actuelle.

C'est la même chose avec le prix, que signifie "valeur du prix précédent", le prix du tick précédent ? ou la clôture de la bougie précédente, mais ce n'est pas tout.

Je comprends que je dois ajouter quelque chose, mais quoi exactement, je n'arrive pas à comprendre. Aidez-moi, c'est ma première expérience.

>> Respectueusement, Orlov Denis.

 
orlovkem >> :

Le point est que la valeur de l'indicateur précédent se trouve sur la bougie précédente et que le prix croise la valeur de l'indicateur sur la bougie actuelle.

C'est la même chose avec le prix, que signifie "valeur du prix précédent", le prix du tick précédent ? ou la clôture de la bougie précédente, mais ce n'est pas tout.

Je comprends que je dois ajouter quelque chose, mais quoi exactement, je n'arrive pas à comprendre. Aidez-moi s'il vous plaît, c'est ma première expérience.

Sincèrement, Orlov Denis.

Tu as compris ce que tu as dit, alors ? Vous vérifiez la valeur à un moment donné.

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Deux conditions qui s'excluent mutuellement. Quand est-il devenu plus grand ?

 
Roger >> :

Tu as compris ce que tu as dit, alors ? Vous vérifiez la valeur à un moment donné.

Deux conditions qui s'excluent mutuellement. Quand est-ce que ça a augmenté ?

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

Peut-être que j'ai mal formulé le commentaire, mais l'essentiel est toujours vrai, le niveau de prix est devenu plus élevé que la valeur de l'indicateur, vous devez acheter et il achète, mais vous devez le faire une fois, et l'EA achète tant qu'il y a de l'argent sur le dépôt. Vous devez simplement limiter le nombre de transactions. N'en faites pas plus d'un à la fois, c'est ce qui ne fonctionne pas.

 
xruss >> :

mais s'il y avait un ordre de vente dans l'historique et que le conseiller expert l'a fermé (dans le type d'historique, il (sa fermeture) est montré comme t/p ou s/l - sera-t-il considéré comme le dernier ?

Si un ordre (d'achat ou de vente) a été clôturé en dernier (le Conseiller Expert l'a clôturé, ou il s'est déclenché t/p ou s/l) et passe dans les conditions suivantes

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

il sera donc considéré comme le dernier. Quel effet particulier ne pouvez-vous pas obtenir ?
 
Everlost >> :

Si un ordre (d'achat ou de vente) a été clôturé en dernier (le Conseiller Expert l'a clôturé, ou le t/p ou le s/l a été déclenché) et passe les conditions

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

alors, en conséquence, il sera considéré comme le dernier. Et quel est exactement l'effet que vous ne pouvez pas obtenir ?

Oui, c'est probablement parce que j'ai exclu OrderMagicNumber() du code

Je veux éviter de rouvrir des commandes après qu'elles aient été fermées. Je veux faire en sorte que mes ordres ne se rouvrent pas après la fermeture (il arrive parfois que les conditions de réouverture existent toujours). Même chose pour la vente. J'ai pensé qu'il serait cool d'indiquer dans mes conditions si j'avais une position d'achat et que j'avais du profit - et non de rouvrir la position d'achat).

((

 
xruss писал(а) >>

Oui, c'est probablement parce que j'ai exclu OrderMagicNumber() du code

Je veux faire en sorte que les commandes ne se rouvrent pas après la fermeture. Je pensais que ce serait cool si je spécifiais dans les conditions, si j'avais une position d'achat et que j'avais un profit - de ne pas rouvrir l'achat à nouveau. Mais il s'ouvre toujours - bâtard !))))

((

Le moyen le plus simple de contrôler le nombre d'ordres ouverts en même temps

if(OrdersTotal()<1){

   .................
   .................
   условия установки ордеров 

}
 
goldtrader >> :

Lire la description de OrderSend( ... ).

Le numéro magique (magik) est attribué à une commande lorsqu'elle est envoyée au serveur.

Il est principalement utilisé pour identifier les ordres/positions en attente.

C'est-à-dire pour que l'EA ne touche pas les ordres "étrangers". Ceci est fait par un EA ou un script.

Le Magicien ne peut pas être réglé manuellement. Vous définissez vous-même les règles dans l'EA/Script.

Le magicien est généralement statique, mais il peut être dynamique si nécessaire.

Regardez quelques exemples simples de Kodobase, et cela devrait devenir clair pour vous.

Pourquoi ne pouvez-vous pas identifier "vos" commandes par le numéro de ticket ? Ils sont uniques, quel que soit le nombre d'Expert Advisors en cours d'exécution.

Par exemple, un EA ouvre un ordre, se souvient du ticket, le ferme et l'oublie.

 
mukata >> :

Pourquoi ne pouvez-vous pas identifier "vos" commandes par le numéro de ticket ? Ils sont uniques, quel que soit le nombre d'Expert Advisors en cours d'exécution.

Par exemple, un EA ouvre un ordre, se souvient du ticket et l'oublie, après quoi il le ferme.

Chubais va couper l'électricité et ensuite trouver où sont les autres et où ils sont.