Aide au codage - page 161

 

2 ordres à la fois

Bonjour, j'essaie de coder un EA, et j'ai un problème, je ne sais pas comment le résoudre : ?

Le problème est que je veux ouvrir 2 ordres (OPENSTOP et SELLSTOP) à l'heure actuelle, mais sur cette EA, il ouvre peut-être environ 100 d'entre eux ou plus, alors comment le résoudre pour ouvrir seulement 2 : ?

extern double Lots=1 ;

extern double h_beg=10;

extern double h_end=23 ;

extern double TakeProfit=20 ;

extern double StopLoss=90 ;

//+------------------------------------------------------------------+

int start()

{

double prevbar_H ;

double prevbar_L ;

double bar_H ;

double bar_L ;

double sell ;

double buy ;

bool trade_time ;

bool sell_opened ;

bool buy_opened ;

//+------------------------------------------------------------------+

si (Hour()==h_beg)

{

trade_time = true ;

for(int h=1 ; h<=11 ; h++)

{

bar_H = iHigh(NULL,0,h) ;

si (prevbar_H==0 || prevbar_H<bar_H)

{

prevbar_H = bar_H ;

}

}

for(int l=1 ; l<=11 ; l++)

{

bar_L = iLow(NULL,0,l) ;

si (prevbar_L==0 || prevbar_L>bar_L)

{

prevbar_L = bar_L ;

}

}

}

if (Hour()==h_end)

{

trade_time = false ;

prevbar_H = 0 ;

prevbar_L = 0 ;

DeletePending() ;

DeleteBUY() ;

sell=0 ;

buy=0 ;

}

//+--------------------------------------------------------buy or sell----------+

if(Hour()==h_beg)

{

si(sell==0)

{

OrderSend(Symbol(),OP_SELLSTOP,Lots,prevbar_L,3,prevbar_L+200*Point,prevbar_L-200*Point, "MA sample",16384,0,Green) ;

sell=1 ;

}

if(buy==0)

{

OrderSend(Symbol(),OP_BUYSTOP,Lots,prevbar_H,3,prevbar_H-200*Point,prevbar_H+200*Point, "MA sample",16384,0,Green) ;

acheter=1 ;

}

}

//+------------------------------------------------------------------+

retour(0) ;

}

//+------------------------------------------------------------------+

void DeletePending()

{

for(int i=0 ; i<OrdersTotal() ; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

{

OrderDelete(OrderTicket()) ;

}

}

}

void DeleteBUY()

{

for(int i=0 ; i<OrdersTotal() ; i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

{

si (OrderType() == OP_BUY)

{

OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red ) ;

}

}

}

}
 
carbonmimetic:
HI Mladen,

Si je veux compter les barres entre 2 points bas, comment éviter la barre du dimanche 23.00 à 00.00 ?

parce que sur le graphique 4h il y a cette barre et elle ne dure qu'une heure..... et elle apparaît aussi sur le graphique journalier.

merci d'avance

carbonmimetic

Ajouter une vérification du jour de la semaine similaire à ceci :

if (TimeDayOfWeek(Time[yourCounter])!=0)

0 est dimanche et dans ce cas il faut sauter cette barre.

 

parce que le système que j'utilise est comme un système de trading martingale, une fois que j'ai placé l'ordre, il y a environ 1 ordre de travail et 4 ordres en attente, quand je perds le 2ème ordre en attente devient un ordre de travail, donc j'ai besoin de déplacer le TP précédent égal à l'ordre actuel, donc j'espère que l'EA peut le faire automatiquement pour que je n'aie pas besoin de le surveiller, parce que parfois j'ai besoin de sortir pour le déjeuner ou le dîner.

 
mladen:
carbonmimetic

Ajouter une vérification du jour de la semaine similaire à celle-ci :

if (TimeDayOfWeek(Time[yourCounter])!=0)
0 est le dimanche et dans ce cas vous devez sauter cette barre.

ok....merci beaucoup !

 

Salut mladen,

Je vois que dans le graphique en direct, il peut repeindre la ligne de signal passée, quand j'appuie sur le rafraîchissement du menu mt4, la ligne peut changer de position complètement, je veux dire la ligne de signal passée.

Pourriez-vous résoudre ce problème, ne pas repeindre au-delà ou ne pas pouvoir rafraîchir automatiquement les problèmes. Est-ce quelque chose comme le comptage des barres qui a un problème ou des moyens de boucle interne ? Je suis juste un débutant superficiel du code. Merci beaucoup pour votre aide.

Dossiers :
 
kenwa:
Bonjour mladen,

J'ai vu que dans le graphique en direct, il peut repeindre la ligne de signal passé, quand j'appuie sur le rafraîchissement du menu mt4, la ligne peut changer de position complètement, je veux dire la ligne de signal passé.

Je ne sais pas si je peux me débrouiller avec ce problème, mais je ne sais pas si je peux me débrouiller avec ce problème. Je suis juste un débutant superficiel du code. Merci beaucoup pour votre aide.

kenwa

Remplacez init et commencez avec ceux-ci :

double CCI_idx[];

double CCI_idt[];

int init()

{

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,CCI_idx);

SetIndexBuffer(1,CCI_idt);

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(i=limit;i>=0;i--) CCI_idt = iCCI(abc,0,CCI_Period,applied_price,i);

for(i=limit;i>=0;i--) CCI_idx = iMAOnArray(CCI_idt,Bars,MA_Period,0,MA_Method,i);

return(0);

}

Vous ne pouvez pas utiliser le même tampon pour la collecte des valeurs cci et ensuite pour stocker les moyennes de ces cci - cela causait le repeint. J'ai également supprimé la référence à la période de temps de l'appel CCI. Si vous souhaitez qu'il calcule également en mode multi-trame de temps, il doit être écrit différemment.

__________________________

PS : ce même conseil pourrait être appliqué à l'utilisation de différents symboles sur un graphique actuel. Le nombre de barres modifiées d'un symbole actuel ne doit pas nécessairement être le même que le nombre de barres d'un autre symbole cible afin d'obtenir un effet de repeinture, mais je l'ai laissé tel quel.

 

Bonjour mladen,

je me réfère au #1606 ci-dessus, comme je suis un débutant très superficiel ou en effet je ne connais pas grand chose, je ne peux pas comprendre votre sens, pourriez-vous joindre un indicateur fonctionnel ici ? puis-je utiliser un tampon pour calculer la valeur CCI et ensuite faire la moyenne, au lieu d'utiliser deux tampons ? vous mentionnez différents symboles, serait-il possible d'écrire une version simple pour accommoder deux symboles sur le même graphique ? si c'est mtf, comment écrire à la place, merci beaucoup pour votre aide.

 
kenwa:
Bonjour mladen, se référer à #1606 ci-dessus, comme je suis un débutant très superficiel ou en effet je sais très peu, je ne peux pas comprendre votre sens, pourriez-vous attacher un indicateur fonctionnel ici ? puis-je utiliser un tampon pour calculer la valeur CCI et ensuite fait la moyenne, au lieu d'utiliser deux tampons ? vous mentionnez différents symboles, serait-il possible d'écrire une version simple pour accueillir deux symboles sur le même graphique ? si c'est mtf, comment écrire à la place, merci beaucoup pour l'aide.

kenwa

Vous ne pouvez pas utiliser le même tampon pour calculer le tampon et ensuite pour stocker les résultats de la moyenne de ce CCI dans le même tampon - la moyenne va changer les valeurs passées.

En ce qui concerne l'indicateur multi-symboles (celui qui peut accéder à d'autres symboles à partir d'un graphique actuel) : si je poste la solution pour cela, j'ai peur que ce ne soit pas simple. Il n'y a pas de solution simple pour cela et vous devez d'abord clarifier ce qui se passe avec deux symboles différents en même temps.

Je joins la version qui fonctionne correctement sur un symbole courant et dans le cadre temporel courant (c'est la seule façon de calculer une moyenne d'un cci si vous voulez utiliser la fonction iMAOnArray()).

Dossiers :
 

kenwa

C'est la façon la plus simple de le faire fonctionner dans plusieurs cadres temporels et de pouvoir choisir n'importe quel symbole. Vous verrez que ce n'est pas aussi simple qu'il n'y paraît à première vue, mais celui-ci fait tout ce qui est nécessaire pour collecter des données correctes et pour éviter de repeindre quand il le fait.

 

salut mladen,

Merci beaucoup, se référer à ci-dessus, comment si votre mtf si écrire dans la version non-mtf être ? je ne peux pas modifié moi-même en raison de mon niveau de codage maternelle. d'ailleurs, parce que vous semblez utilisé jusqu'à 2 tampons pour calculer, mais mt4 ne permettent que 8 tampons maximum est-il ?si je veux comme l'indicateur de référence ci-joint (qui n'est en aucun cas un bon indicateur (a des bugs à l'intérieur, je pense, pas tellement utilisable en direct)), juste pour votre référence, il peut montrer huit symboles en même temps, pas nécessaire de devises ou de tout autre symbole que je veux entrer moi-même en externe, (je pense que superposer le même indicateur dans sw ne fonctionne pas car l'échelle verticale n'est pas fixée là) comment pouvez-vous m'aider à créer un cci mtf comme celui de l'indicateur de référence (pas nécessaire si complexe, mais a des fonctions similaires ?

Dossiers :
reference.mq4  17 kb
Raison: