[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 1121

 

Bonne journée/nuit

J'essaie d'inverser une transaction en utilisant cette méthode primitive qui ne fonctionne pas (le conseiller expert calcule par ticks) :

if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // détermine s'il y a eu des ordres d'achat && si une bougie a clôturé en dessous du niveau inférieur.

{

CheckForClose() ; // clôture de l'ordre.

OpenSell() ; // ouvrir un ordre de vente

retour ;

}

Veuillez me dire où je me trompe. Je serais également reconnaissant pour les liens qui me permettraient de combler cette lacune.

 

dzhini:

J'essaie de faire du reverse trade de cette manière primitive, ce qui ne fonctionne pas (l'Expert Advisor calcule par ticks) :

if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // il vérifie s'il y a eu des ordres d'achat && si une bougie a clôturé sous le niveau inférieur


dans cette fonction, vous comptez probablement toutes les commandes.
 

Comment puis-je déterminer combien de minutes il y a entre l'heure 1 et l'heure 2 ?

datetime Time_1     = D'2011.01.12 13:30';
datetime Time_2     = D'2011.01.05 10:30'; 

минут = Time_1- Time_2
 
sergeev:
c'est probablement la fonction où vous comptez toutes les commandes. cela devrait être Buy

Il s'agit d'une fonction standard :

int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0 ;
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
si(OrderType()==OP_BUY) achète++ ;
si(OrderType()==OP_SELL) vend++ ;
}
}

if(buys>0) return(buys) ;
sinon retour(-vendues) ;

}

si >0 alors c'est un ordre d'achat, si <0 alors c'est un ordre de vente ))))

 
Eliza:

Comment puis-je déterminer le nombre de minutes entre l'heure 1 et l'heure 2 ?

la différence renvoie le nombre de secondes.

divisez par 60. vous obtenez le nombre de minutes.

 
Des échanges inversés. Modification de la structure de l'Expert Advisor - suppression des fonctions. Comment faire pour qu'il se ferme et s'ouvre sur une bougie dans certaines conditions.

extern double TP = 70 ; //bénéfice
extern double SL = 0 ; //perte
extern double Lot = 0.1 ;

double HighLevel ;
double LowLevel ;
int resBuy=0 ;
int resSell=0 ;


//+------------------------------------------------------------------+
//| fonction d' initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
HighLevel=High[1] ;
LowLevel=Low[1] ;
return ;
}

//+------------------------------------------------------------------+
//| fonction expert |
//+------------------------------------------------------------------+

void start()
{

if(Bars<100 && IsTradeAllowed()==false) return ;


if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red) ;
HighLevel=LowLevel ;
LowLevel=Close[1] ;
return ;
}

if(resBuy==0 && resSell==0 && CheckBreak()==-1& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue) ;
LowLevel=HighLevel ;
HighLevel=Close[1] ;
return ;
}

if(resBuy !=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- intéressé par cette partie : fermeture et ouverture sur une barre
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue) ;
// while(!IsTradeAllowed()) Sleep(100) ;
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red) ;
HighLevel=LowLevel ;
LowLevel=Close[1] ;
return ;
}

if(resSell !=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- intéressé par cette partie : fermeture et ouverture sur une barre
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red) ;
// while(!IsTradeAllowed()) Sleep(100) ;
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue) ;
LowLevel=HighLevel ;
HighLevel=Close[1] ;
return ;
}

}

//----------------------------------------------------------------- Vérifier le Low&.High break (Func)

double CheckBreak()
{
double candle=Open[1]-Close[1] ;

if(candle>0 && Low[1]<LowLevel) return(-1) ;
if(candle<0 && High[1]>HighLevel) return(1) ;
}
 
sergeev:

différence renvoie le nombre de secondes.

diviser par 60. cela donne le nombre de minutes.

Je n'obtiens que la date 1971.03.04 12:00, peut-être faut-il la convertir ?

extern datetime Time_1     = D'2011.01.12 13:30'; 
extern datetime Time_2     = D'2011.01.05 10:30'; 

bool   Commentari      = true;

int start()
  {

if (Commentari){
 Comment(
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/60)," минут",
      
         "\n==============================");}
   return(0);
  }
 
Eliza:

Je n'obtiens que la date, peut-être faut-il la convertir ?

Tout d'abord, pourquoi multipliez-vous par 60 ?

Deuxièmement, si vous voulez afficher le nombre de minutes sous la forme d'une heure comme 00:15,
vous n'avez pas besoin de diviser ou de multiplier par 60.

 
sergeev:

Tout d'abord, pourquoi multipliez-vous par 60 ?

Deuxièmement, si vous voulez représenter le nombre de minutes à l'écran sous la forme d'une heure comme 00:15,
il n'est pas nécessaire de diviser ou de multiplier par 60.

Oui, j'ai corrigé pour la division, mais l'année sort 1970.01.01 02:51

Je n'en ai pas besoin pour l'écran, je voulais juste trouver le nombre de minutes sans dates, pour cet intervalle de temps.....

même sans diviser, il sort toujours la date, ou dois-je soustraire la date à partir de laquelle la fonction est basée ?

  • datetime est la date et l'heure, un nombre entier non signé qui contient le nombre de secondes écoulées depuis 0 heure du 1er janvier 1970.
  • extern datetime Time_1     = D'2011.01.12 13:30'; 
    extern datetime Time_2     = D'2011.01.05 10:30'; 
    
    datetime me_2     = D'1970.01.01 00:00'; 
    
    bool   Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment(
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2))," минут",
          
             "\n==============================");}
       return(0);
      }

  • si je soustrais la date 1970.01.01 02:51, l'heure est invalide, j'ai juste besoin du nombre de minutes à obtenir à partir de cet intervalle de temps, si c'est par exemple 25000 minutes dans cet intervalle, j'ai besoin de ce nombre 25000 ... quelque chose comme ça(
  • ou n'est-il pas possible d'obtenir cela par la langue μl ?
 

Si vous voulez simplement un nombre de minutes, vous n'avez absolument aucune raison d'utiliser TimeToStr.

Le temps est un nombre int normal.

Ou bien, utilisez TimeToStr uniquement avec l'indicateur TIME_MINUTE
.

Raison: