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

 

Bonjour à tous. Aidez-nous à comprendre la situation actuelle.

pourquoi dans un cas, testF2, lorsque je prends Buf0[i]=iCCI(NULL,0,8,PRICE_OPEN,i-1)-iCCI(NULL,0,8,PRICE_OPEN,i) ; tout se passe bien comme il se doit,

mais dans un autre cas, testF1, avec les mêmes actions Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i) ; la dernière barre est effondrée ? pourquoi cela ne se produit pas avec iCCI mais avec iMA barre effondrée ??????

Y a-t-il un moyen de le réparer ?

Dossiers :
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

pour un yem dans l'infini vous serez jeté lors du calcul de -1 bar quand i=0

c'est mieux comme ça :

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

et si vous avez besoin d'un décalage comme dans la variante que vous avez citée de 1-n barre à droite, il vaut mieux l'implémenter explicitement dans l'init via SetIndexShift(0,1) ;

 
ALXIMIKS:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

pour que le yem soit infini, vous serez rejeté lors du calcul de -1 bar quand i=0

c'est mieux comme ça :

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

et si vous avez besoin d'un décalage comme dans la variante que vous avez citée de 1-n barre à droite, il vaut mieux l'implémenter explicitement dans l'init via SetIndexShift(0,1) ;



Merci beaucoup, mais je comprends tout parfaitement, mais pourquoi c'est ok avec iCCI et pas avec iMA ?
 
       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {   
                sl=NormalizeDouble(Bid-dist*Point,Digits); 
Ekburg
:


vous calculez la distance entre le prix et le prix de passage de l'ordre, et vous avez besoin du prix au stop actuel).

Si un short est en attente, il est dirigé vers le premier bloc, si un long est en attente, il est dirigé vers le second bloc, puis les trailing stops.

Si les shorts sont bons, alors ils vont au premier bloc, si les longs, alors au deuxième, après cela les calculs, les vérifications et les trailing stops.


Je ne peux toujours pas le faire... Je n'essaie que longtemps, j'ai essayé tellement de choses que je ne me souviens plus de ce que j'ai fait ;))
 
clubsmi:


Merci beaucoup, je comprends tout parfaitement, mais pourquoi cela fonctionne-t-il avec iCCI et pas avec iMA ?


Il y a eu des erreurs ici et là, c'est juste qu'avec l'iCCI ce n'est pas évident, à cause des particularités des calculs,

et l'application des MAs, en particulier les EMAs, je pense que cela conduit à leur visibilité.

 
vadynik:

Toujours rien ne sort... J'essaie seulement longtemps, j'ai essayé tellement de choses, je ne me souviens plus de ce que j'ai fait))

mettre OrderStopLoss() à la place de sl
 
Vinin:

Allez-vous vivre de pourboires ?
Jusqu'à ce que je sois un expert en la matière.
Vous n'avez pas besoin de conseils maintenant, n'est-ce pas ? :)
 

Il existe un programme qui ouvre deux ordres d'achat ou de vente, disons pour EURAUD et AUDUSD. Le programme ne fonctionne que s'il n'y a pas d'ordres ouverts dans le terminal pour ces paires ou d'autres. Si au moins un ordre est présent dans le terminal, les transactions ne s'ouvriront pas. Ma question est la suivante : comment programmer l'ouverture des ordres, qu'il y ait ou non des ordres ouverts dans le terminal ? Je vous remercie d'avance pour votre réponse.

extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}
if(OrdersTotal()==0)
{
 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
}  
   return(0);
  }
 
alexey1979621:

Il existe un programme qui ouvre deux ordres d'achat ou de vente, disons pour EURAUD et AUDUSD. Le programme ne fonctionne que s'il n'y a pas d'ordres ouverts dans le terminal pour ces paires ou d'autres. Si au moins un ordre est présent dans le terminal, les transactions ne s'ouvriront pas. Ma question est la suivante : comment programmer l'ouverture des ordres, qu'il y ait ou non des ordres ouverts dans le terminal ? Je vous remercie d'avance pour votre réponse.


Retirer le contrôle
if(OrdersTotal()==0)
 
evillive:

Retirer le chèque
Maintenant, il le fait, mais il ouvre tout un tas de transactions, et je n'ai besoin que de deux transactions à ouvrir sur les paires spécifiées, disons EURAUD et AUDUSD.