[Archive] Rédiger un conseiller gratuitement - page 11

 
skylord писал(а) >>

Bonjour.

Je viens de commencer à apprendre MQL, j'essaie d'écrire un EA...

J'essaie d'écrire un EA basé sur l'indicateur sidus v.2, je veux qu'il ouvre une position dans la direction que j'ai spécifiée par l'EA, seulement quand une nouvelle barre est née, c'est-à-dire que sur le premier tick il devrait vérifier si le signal est sur la barre précédente, et quel type d'ordre - avec un stop et un take. Joindre le fichier des indicateurs.

Je n'ai pas réussi à trouver ce signal((.

Aidez-moi, ou au moins dites-moi comment faire...

Un conseiller expert sur l'indicateur Sidus

peut-être que cela vous aidera ou que la recherche vous aidera !

ou un second souffle !

 

Merci vvavva. J'ai une bonne idée, mais elle saute et fait beaucoup de signaux à gauche, mais ce n'est pas ce dont j'ai besoin (

Comment puis-je demander à quelqu'un comment demander à l'EA l'état du tampon de l'indicateur sur la barre précédente ?

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point ;
//ExtMapBuffer3[i] = Ask ;
entry=true ;
entry_point=Ask ;
}
else if (sigCurrent==2 && sigPrevious==1)
{
ExtMapBuffer3[i-1] = Low[i-1]-5*Point ;
//ExtMapBuffer4[i] = Bid ;
entry=true ;
entry_point=Bid ;

}
Un EA a besoin d'une condition de correspondance comme celle-ci

double Up ;
double Down ;
int res ;

Up=iCustom(NULL, 0, "sidus_v.2", 3, 1) ;
Down=iCustom(NULL,0, "sidus_v.2".",2,1) ;
//---- conditions de vente
if(Down==Low)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red) ;
return ;
}
//---- conditions d'achat
if(Up==High)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,",MAGICMA,0,Blue) ;
return ;
}.

Mais c'est faux ! !!

Veuillez me conseiller sur la manière d'agir dans ce cas...

 

Bonjour.

Je négocie tranquillement, j'utilise 4 induits, des lignes de support de résistance, des tendances, bla, bla, bla.... J'ai les yeux cassés sur l'écran, pouvez-vous m'aider à insérer le signal sonore sur les flèches (achat, vente) et les mêmes flèches dans l'historique avec une ligne pointillée (recoupée par les mêmes)

Dossiers :
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Bonjour.

Je viens de commencer à apprendre MQL, j'essaie d'écrire un EA...

J'essaie d'écrire un EA basé sur l'indicateur sidus v.2, je veux qu'il ouvre une position dans la direction que j'ai spécifiée par l'EA, seulement quand une nouvelle barre est née, c'est-à-dire que sur le premier tick il devrait vérifier si le signal est sur la barre précédente, et quel type d'ordre - avec un stop et un take. Joindre le fichier des indicateurs.

Je n'ai pas réussi à trouver ce signal((.

Aidez-moi, ou au moins dites-moi comment faire...

Bonjour, je viens d'exécuter le code avec mes yeux, désolé je suis un terrible lamer, je peux me tromper bien sûr, mais est-ce que l'indicateur surdimensionne ? Essayons juste de penser logiquement

for(int i=0; i<limit; i++)
   {

compter de la barre zéro à toutes les barres de l'historique, augmenter le compteur.

ExtMapBuffer1[ i]=iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
     ExtMapBuffer2[ i]=iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

tout est clair ici.

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

J'emmerde le Macdak.

if ( pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if ( pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

Si macdac est supérieur à zéro et que RSI est supérieur à 50, le sig est 1, et s'il est inférieur, il est 2.

Jusqu'à présent, tout va bien.

if (sigCurrent==1 && sigPrevious==2)
     {

ici je ne comprends pas... si à la fois le macdak est positif et le RSI est supérieur à 50 et le macdak est négatif et le RSI est inférieur à 50.... puisqu'il y a une condition dans le code ci-dessous

sigPrevious=sigCurrent;

alors nous pouvons les mettre en équation...

et voler le futur est une mauvaise idée...

ExtMapBuffer3[i-1]

Non, remplaçons-la par celle-ci, ou plutôt retravaillons-la complètement, puisque nous en connaissons déjà la logique :

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if( counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[ i] = EMPTY_VALUE;
             SellBuffer[ i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 double s = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 
                
                
                 double a1 = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double s1 = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if( a< s && a1> s1 && d1>0)
               {
                    BuyBuffer[ i] = Low[ i] - iATR(NULL, 0, 14, i);
                    
               }
             if( a> s && a1< s1 && d1<0)
               {
                    SellBuffer[ i] = High[ i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

Maintenant regarde, c'est une image triste. Compare-la :

Bien que je puisse me tromper bien sûr et que l'indicateur ne redessine pas, mais pardonnez-moi, et peut-être que vous pouvez utiliser le prix d'ouverture (surtout en RSI), mais pas celui de clôture, de sorte que le signal que vous avez exactement sur cette barre, où il devrait =(.

 

Merci de vous inquiéter vtoroe_dyxanie )))) Je n'écris pas l'indicateur, il ne le redessine pas en fonction de mes observations. Je l'utilise à partir du premier tick de la barre suivante lorsqu'elle est déjà verrouillée. C'est pourquoi j'ai besoin de savoir ce qu'il y avait sur la barre précédente au premier tick. Et pourquoi vole-t-il l'avenir ? Il me semble qu'à un tick donné, s'il y a une telle correspondance, il attribue un à sigCurrent et à la fin de la variable sigPrevious il attribue le même sigCurrent :

sigPrevious=sigCurrent;

et ensuite au prochain tick si sigCurrent est déjà 2 et que la variable sigPrevious remplit naturellement le tampon avec 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

Et quant à ça :

ExtMapBuffer3[i-1]

Je ne le comprends pas très bien moi-même...

Mais cela semble fonctionner correctement, les flèches se dessinent sur la barre à laquelle le signal apparaît !

Mais quand j'ai enlevé -1, beaucoup de surprises sont apparues(



 
skylord >> :

Merci de vous inquiéter vtoroe_dyxanie )))) Je n'ai pas écrit l'indicateur, il ne le redessine pas en fonction de mes observations. Je l'utilise à partir du premier tick de la barre suivante lorsqu'elle est déjà verrouillée. C'est pourquoi j'ai besoin de savoir ce qu'il y avait sur la barre précédente au premier tick. Et pourquoi vole-t-il l'avenir ? Il me semble qu'à un tick donné, s'il y a une telle correspondance, il attribue un à sigCurrent et à la fin de la variable sigPrevious il attribue le même sigCurrent :

sigPrevious=sigCurrent;

et ensuite au prochain tick si sigCurrent est déjà 2 et que la variable sigPrevious remplit naturellement le tampon avec 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

Et quant à ça :

ExtMapBuffer3[i-1]

Je ne le comprends pas très bien moi-même...

Mais cela semble fonctionner correctement, les flèches se dessinent sur la barre à laquelle le signal apparaît !

Mais quand j'ai enlevé -1, il y a eu beaucoup de surprises(
.



Mais il a un autre effet secondaire. Parfois, lorsque les conditions sont remplies, il donne un signal mais ne dessine pas de flèches. Mais lorsque je le remets sur un graphique, toutes les flèches reviennent à leur place. Y a-t-il un moyen de le faire "compiler" à nouveau sur un graphique, ou de mettre à jour à nouveau son Befer ?

 
skylord писал(а) >>

Pourquoi vole-t-il l'avenir ? Il semble en affecter un à sigCurrent sur un tick donné s'il existe une telle correspondance, et il affecte le même sigCurrent à la variable sigPrevious à la fin :

sigPrevious=sigCurrent;

et ensuite au prochain tick si sigCurrent est déjà 2 et que la variable sigPrevious remplit naturellement le tampon avec 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Ton vrai moi, inattentif...

A propos : "Je l'utilise dès le premier tick de la barre suivante lorsqu'il est déjà fixé. C'est pourquoi j'ai besoin de savoir, au premier tick, ce qu'il y avait sur la barre précédente. " Et je me demande vraiment si on ne peut pas utiliser

double iCustom( .... int shift)

l'aide omnisciente dit que

équipe - Index de la valeur obtenue à partir du tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre de périodes en arrière spécifié).

Je me demande si vous pouvez l'écrire de cette façon (je me suis demandé moi-même)

for (i=0 ; i<limit;i++){

si (iCustom(NULL, 0, "sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, i)>0)

....

puisque ooooopsie Les utilisateurs du forum Wise ne feront pas preuve de condescendance envers deux nerds, laissés à eux-mêmes pour améliorer mes compétences, car cela peut s'avérer utile.

 
vtoroe_dyxanie писал(а) >>

C'est vrai, je suis inattentif...

A propos : "Je l'utilise dès le premier tick de la barre suivante lorsqu'elle est déjà verrouillée. C'est pourquoi j'ai besoin de savoir, au premier tick, ce qu'il y avait sur la barre précédente. " Et je me demande vraiment si on ne peut pas utiliser

double iCustom( .... int shift)

la référence omnisciente dit que

équipe - Index de la valeur obtenue à partir du tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre de périodes en arrière spécifié).

Je me demande si vous pouvez l'écrire de cette façon (je me suis demandé moi-même)

for (i=0 ; i<limit;i++){

si (iCustom(NULL, 0, "sidus_v.2", 3, 1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, 0)>0)

....

comme oooooovery Les participants au forum Wise ne feront probablement pas preuve de condescendance à l'égard des deux nubs, laissés à eux-mêmes pour améliorer leurs compétences, car cela peut s'avérer utile.

Non, je ne peux pas =(

Merde, alors comment résoudre ce problème ? Eh bien, puisque vous en avez déjà parlé : https://www.mql5.com/ru/forum/117268 nous allons garder un œil dessus =)

 
vtoroe_dyxanie писал(а) >>

Impossible à faire =(

Mec, alors comment résoudre cette question ? Puisque vous avez déjà ouvert un fil de discussion intitulé "Comment déterminer la direction d'un EA", nous allons garder un œil sur ce sujet.)

>> Je vais faire du repérage pour l'entreprise !?)

 
vtoroe_dyxanie писал(а) >>

Impossible à faire =(

Mec, alors comment résoudre cette question ? Eh bien, puisque vous avez déjà commencé un fil de discussion : "Comment connaître la direction d'un EA", nous allons garder un œil sur vous =)

>> Ce que vous avez fait pour moi est ce que j'ai écrit maintenant (je voulais que l'indicateur montre les délais les plus proches dans une fenêtre) c'est ce que ? ???.

Dossiers :
test1.mq4  6 kb
Raison: