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
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
La taille du tableau est de zéro. N'oubliez pas ArrayResize(), ou définissez simplement la bonne taille pour le tableau.
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); }
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 :)
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.
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.
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.
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.
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.