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

 
artmedia70:
La taille du tableau est de zéro. N'oubliez pas ArrayResize(), ou définissez simplement la bonne taille pour le tableau.
Merci, je l'ai fait différemment, j'ai trouvéArrayMaximum() dans l'indicateur et j'ai passé la valeur pariCustom à l'Expert Advisor :)
 
Bonjour à tous, j'ai un script qui utilise les appels d'une DLL externe, qui compte spécifiquement les guillemets et crée un fichier avec les cotes nécessaires, y a-t-il un moyen de faire en sorte que le script s'exécute sur un calendrier ? J'ai besoin qu'il fonctionne tous les jours à une certaine heure ?
 

Bonjour,

La photo a montré :

Première fenêtre Indicateur de volume, mettez Money Flow Index(10) en haut.

J'ai créé unindicateur séparé, où je prends à nouveau le volume, recalcule le mouwing avec le volume et essaie de faire comme dans la première fenêtre - 25%, 50%, 75%.

J'ai essayé comme je l'ai fait, mais ça n'avait pas l'air bon.

Si quelqu'un a eu des problèmes avec cela, veuillez partager vos suggestions.

Merci

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara:
Il parlait de la barre moins une seconde. Et la valeur moyenne des limites. Il veut se moquer de moi, je suppose. Je lui dirais d'aller se faire foutre, tu vois ce que je veux dire :)
Les élèves de deuxième et de septième année, qui ne savent toujours pas que le Belarus n'existe pas, sont venus voir les élèves de première année et les kochetsya. Et en réponse à toute question, il se contente de les envoyer ou de les admonester : ils doivent apprendre. Vous devez lire attentivement au-dessus de la porte dans quelle branche vous vous trouvez. Je suis encore en train d'apprendre l'alphabet, alors ne vous excitez pas trop, je ne comprendrai pas de toute façon.
 

Et àevillive et artmedia70 un grand merci. Pour votre patience et votre temps. Je suis sûr que ce n'est pas seulement mon opinion de vous. Tous ceux qui viennent sur ce fil de discussion demandent de l'aide et l'obtiennent principalement de vous. Merci.

 

Bonjour, chers professionnels, cela fait longtemps que je ne vous ai pas contactés.

Le fait est qu'il y a un conseiller expert avec 2 muwks croisés et qu'aucun ordre n'a été ouvert.

void Trade()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0) ;

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return ;

si(MO(OP_BUY,GetLot(),GetComment())==-1) retour ;

if(!ModifyByTicket(T)) return ;

NumbUp=0 ; NumbDn=0 ;

}

sinon

et ainsi de suite...

c'est-à-dire, s'il y a un franchissement de la distance, ouvrir une commande

J'ai besoin d'un code pour trouver l'heure du dernier passage ...

puis, de l'instant présent à l'instant dans l'historique, rechercher un ordre dans une certaine période... et ouvrir un ordre s'il n'en a pas trouvé.

j'ai exploré le code des indicateurs de traçage dans ce but, tout semble y être clair

mais je ne sais pas comment chronométrer la première barre après le croisement des courbes pour qu'elle soit la plus à droite.

Je pense qu'un opérateur fort est nécessaire, mais je ne peux pas le formuler.

 
evillive:

Ce n'est pas la façon de faire. Appelez iCustom pour les 3 buffers, écrivez chaque valeur dans sa propre variable et faites ensuite ce que vous voulez avec ces valeurs.

Pour les bandes de Bollinger, pour la deuxième barre, selon l'exemple dans l'aide, vous n'avez pas besoin de les désélectionner :

Merci.

Mais à cause de mon analphabétisme, je dois tout le temps regarder dans mon manuel et j'ai trouvé ce qui suit : un indicateur personnalisé est un programme écrit selon l'algorithme de l'auteur. Et le tutoriel indique que iCustomrenvoie la valeur de l'indicateur personnalisé spécifié.

Mais je n'utilise pas d'indicateurs personnalisés (c'est-à-dire, comme je le comprends, développés par moi-même).

J'ai besoin de récupérer les valeurs des indicateurs standards, si je peux les appeler ainsi : Moyenne Mobile, Bandes de Bollinger et Oscillateur Stochastique avec les paramètres que j'ai spécifiés. Bien sûr, je le fais "à l'instinct" - la première chose que j'ai trouvée sera appliquée. Mais la variante que vous proposez ne me semble pas convenir non plus.

Existe-t-il une solution sans utiliser tous ces tampons, tableaux et boucles ? Je suis comme un rocher dans la mer - je m'y enfonce tout de suite.

 
sannin:

Bonjour, chers professionnels, cela fait longtemps que je ne vous ai pas contactés.

Le fait est qu'il y a un conseiller expert avec 2 mois qui se croisent et personne n'a pris la peine d'ouvrir un ordre.

void Trade()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0) ;

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return ;

si(MO(OP_BUY,GetLot(),GetComment())==-1) retour ;

if(!ModifyByTicket(T)) return ;

NumbUp=0 ; NumbDn=0 ;

}

sinon

et ainsi de suite...

c'est-à-dire, s'il y a un franchissement de la distance, ouvrir une commande

J'ai besoin d'un code pour trouver l'heure du dernier passage ...

puis, de l'instant présent à l'instant dans l'historique, rechercher un ordre dans une certaine période... et ouvrir un ordre s'il n'en a pas trouvé.

j'ai exploré le code des indicateurs de traçage dans ce but, tout semble y être clair

mais je ne sais pas comment chronométrer la première barre après le croisement des courbes pour qu'elle soit la plus à droite.

Je pense qu'un opérateur fort est nécessaire, mais je ne peux pas le formuler.

Ce conseiller expert ne fonctionne pas par intersection. Les critères sont les suivants : si le МА rapide est supérieur au lent de X pips et qu'il n'y a pas de position ouverte, ouvrez-la au marché.

Pour trouver le croisement, il faut toujours prendre deux valeurs - la MA rapide/lente avant le croisement et la MA rapide/lente après le croisement afin de savoir quand elles échangent leurs places, pour ainsi dire. En d'autres termes

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - la rapide МА a traversé la lente de bas en haut entre la 1ère et la 2ème mesure.

Dans une boucle infinie, si vous regardez depuis la barre zéro jusqu'à la détection du croisement, il s'agira de X+1 barres, et vous avez besoin du temps de la barre X, c'est-à-dire la barre la plus récente après le croisement.

 
rapid_minus:

Merci.

Mais, en raison de mon illettrisme, je dois sans cesse fouiller dans le manuel et voici ce que j'ai déniché : un indicateur personnalisé est un programme..., écrit selon l'algorithme de l'auteur. Et le tutoriel indique que iCustomrenvoie la valeur de l'indicateur personnalisé spécifié.

Mais je n'utilise pas d'indicateurs personnalisés (c'est-à-dire, si je comprends bien, développés par moi-même).

J'ai besoin de récupérer les valeurs d'indicateurs standard, si je peux les appeler ainsi : Moyenne mobile, Bandes de Bollinger et Oscillateur stochastique avec les paramètres que j'ai spécifiés. Bien sûr, je le fais "à l'instinct" - la première chose que je trouve sera appliquée, mais la variante que vous avez suggérée ne me convient pas non plus.

N'y a-t-il pas une solution sans utiliser tous ces tampons, tableaux et boucles ? Avec eux, je suis comme un rocher dans la mer - je coule tout de suite.

Exact, lorsque vous utilisez les bandes de Bollinger, vous n'avez pas besoin d'appeler iCustom, mais iBands doit être appelé séparément pour chaque ligne d'indicateur. L'autre façon de procéder sans appeler l'indicateur ( sans utiliser de tampons, de tableaux, de boucles) est d'implémenter dans l'Expert Advisor l'algorithme de calcul de cet indicateur et de lire la valeur souhaitée lorsque cela est nécessaire (vous pouvez lire uniquement la valeur souhaitée, par exemple, uniquement la ligne du bas). Mais un système totalement dépourvu de boucles et de tableaux ne fonctionnera pas.
 
sannin:

Bonjour, chers professionnels, cela fait longtemps que je ne vous ai pas contactés.

Le fait est qu'il y a un conseiller expert avec 2 mois qui se croisent et personne n'a pris la peine d'ouvrir un ordre.

void Trade()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0) ;

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return ;

si(MO(OP_BUY,GetLot(),GetComment())==-1) retour ;

if(!ModifyByTicket(T)) return ;

NumbUp=0 ; NumbDn=0 ;

}

sinon

et ainsi de suite...

c'est à dire s'il y a un franchissement de la distance, ouvrir un ordre

J'ai besoin d'un code pour trouver l'heure du dernier passage ...

puis, de l'instant présent à l'instant dans l'historique, rechercher un ordre dans une certaine période... et ouvrir un ordre s'il n'en a pas trouvé.

j'ai exploré le code des indicateurs de traçage dans ce but, tout semble y être clair

mais je ne sais pas comment chronométrer la première barre après le croisement des courbes pour qu'elle soit la plus à droite.

Je pense qu'un opérateur fort est nécessaire, mais je ne peux pas le formuler.

Voici un exemple, où j'ai montré comment mesurer le nombre de mesures après avoir traversé 2 muves.
datetime TimeStart = 0;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool     cu1     = false;
   bool     cu2     = false;
   double   ma_1    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,0);
   double   ma1     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,0);
   double   ma_2    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,1);
   double   ma2     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,1);

   if(ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[0]; 
   if(ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[0];
   if(ma1>ma_1)
      cu1=true;
   if(ma1<ma_1)
      cu2=true;

   if(cu1==true || cu2==true)  
      int b1=iBarShift(Symbol(), PERIOD_H1, TimeStart);      
      int b2=iBarShift(Symbol(), PERIOD_H1, TimeCurrent());

    for(int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return(0);
  }