[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 417

 

Peut-on faire un robot qui ouvre les deux sens avec des petits stops avec des lots et choisir une position gagnante ? ou est-ce une fantaisie ?

 

OK pour la couleur...

La question est la suivante : je veux "cacher SL" de DM, c'est-à-dire que je ne veux pas qu'il soit défini avec l'opérateur d'ouverture, mais l'assigner à une variable dans l'expert :

extern double TrailingStop=25.0 ;

extern double Lots=0.1 ;

....
double StopB ;

.....

if( entrée condition) {

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "Buy EA",123,0,Green) ;
StopB=Ask-TrailingStop*Lots ; //cacher
le stop < - est-ce que je le fais bien ?

}

.....

if( profit conditions de sortie || Ask > StopB)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; //
fermer la position
return(0) ; // sortir
}

Et où écrivons-nous la condition de sortie de la SL ? Avec la condition de clôture des bénéfices en utilisant "||" ou séparément ?

 

Bonjour, je voudrais savoir comment utiliser correctement la fonction iCustom, je veux créer des conditions pour les trades par la couleur de l'indicateur, qui est dessiné dans une fenêtre d'histogramme séparée :

couleur Oct_1=iCustom(NULL,0, "octava_1") ;

si ( Oct_1==Vert).... etc.

Lors de la compilation, le programme donne une erreur, disant "'vert' - variable non définie, quelle est la raison ?

Je serais très reconnaissant d'une réponse))))

 

Question supprimée, la majuscule a un sens))))

 
DOCTORS:

OK pour la couleur...

La question est la suivante : je veux "cacher les SL" des sociétés de courtage, c'est-à-dire que je ne veux pas les définir avec l'opérateur d'ouverture, mais les affecter à une variable dans l'expert :

extern double TrailingStop=25.0 ;

extern double Lots=0.1 ;

....
double StopB ;

.....

if( entrée condition) {

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "Buy EA",123,0,Green) ;
StopB=Ask-TrailingStop*Lots ; //cacher
le stop < - est-ce que je le fais bien ?

}

.....

if( profit conditions de sortie || Ask > StopB)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; //
fermer la position
return(0) ; // sortir
}

Et où écrivons-nous la condition de sortie de la SL ? Avec la condition de clôture des bénéfices en utilisant "||" ou séparément ?

Je ne suis pas un pro, mais je me demandais la même chose. Personnellement, je l'ai écrit comme ceci (les professionnels me corrigeront quand ils viendront)

Cette partie récupère un ordre ouvert et attribue des valeurs stop et take aux variables.

// +----------------------------------------------------------------------+
//------- : функция поиска открытых ордеров по символу графика, подхват и установки уровней стопа и профита
double TradeSymbol()
   {
   int    TotalTradeSymbol = 0;
   int    SendGo           = 0;
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(StopLoss   > 0 && Bid < OrderOpenPrice()) {sl = NormalizeDouble(OrderOpenPrice() - StopLoss*Point, Digits);}  
          if(TakeProfit > 0)                           {tp = NormalizeDouble(OrderOpenPrice() + TakeProfit*Point, Digits);}
          }
        if(OrderType()== OP_SELL)
          {
          if(StopLoss   > 0 && Ask > OrderOpenPrice()) {sl = NormalizeDouble(OrderOpenPrice() + StopLoss*Point, Digits);}  
          if(TakeProfit > 0)                           {tp = NormalizeDouble(OrderOpenPrice() - TakeProfit*Point, Digits);} 
          }
        if(OrderStopLoss()   != sl){SendGo++;}
        if(OrderTakeProfit() != tp){SendGo++;}
        if(!UseVirtualTradeLevel && SendGo != 0) {OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,CLR_NONE);}
        TotalTradeSymbol++;
        }
      }
    return(TotalTradeSymbol);  
    }
// +----------------------------------------------------------------------+

cette partie se vérifie et se ferme à la prise

// +----------------------------------------------------------------------+
//------- : функция проверки тейкпрофита
void CheckTakeProfit()
   {
   if(tp == 0)return(0);
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(Bid > tp)
            {
            OrderClose(OrderTicket(), OrderLots(), Bid, SleepPage, Lime);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        if(OrderType()== OP_SELL)
          {
          if(Ask < tp)
            {
            OrderClose(OrderTicket(), OrderLots(), Ask, SleepPage, Lime);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        }
      }
    }
// +----------------------------------------------------------------------+

cette partie vérifie et se ferme à l'arrêt

// +----------------------------------------------------------------------+
//------- : функция проверки стоплоса
void CheckStopLoss()
   {
   if(sl == 0)return(0);
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(Bid < sl)
            {
            OrderClose(OrderTicket(), OrderLots(), Bid, SleepPage, Blue);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        if(OrderType()== OP_SELL)
          {
          if(Ask > sl)
            {
            OrderClose(OrderTicket(), OrderLots(), Ask, SleepPage, Blue);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        }
      }
    }
// +----------------------------------------------------------------------+
P.S.

Professionnels - ne vous moquez pas des autodidactes, peut-être que ça pourrait être différent, mais ça marche pour moi .....

 
elmucon:

Je ne suis pas un pro, mais je me demandais la même chose. Personnellement, je l'ai écrit de cette façon (si vous êtes un pro - corrigez-moi)

Cette partie récupère un ordre ouvert et attribue des valeurs stop et take aux variables.

cette partie se vérifie et se ferme à la prise

cette partie vérifie et se ferme à l'arrêt

P.S.

Professionnels - ne vous moquez pas des autodidactes, peut-être que ça pourrait être différent, mais ça marche pour moi .....

Tout est pratiquement parfait ! La seule chose est qu'il y a quelques bizarreries à l'entrée et à la sortie. Eh bien, et une telle stratégie ne permet pas d'éviter les dérapages. Mais merci beaucoup !
 

Pouvez-vous me dire comment déterminer le délai actuel de l'EA ?

Si le cadre temporel est M1, je dois remplir une condition, et si le cadre temporel est M5, je dois remplir une autre condition.

 
sss2019:

Pouvez-vous me dire comment déterminer le délai actuel de l'EA ?

Si le cadre temporel est M1, je dois remplir une condition, et si le cadre temporel est M5, je dois remplir une autre condition.


Utilisation de la fonction Period()
 
sss2019:

Comment puis-je déterminer le calendrier actuel de l'EA ?

Si le cadre temporel est M1, je dois remplir une condition, et si le cadre temporel est M5, je dois remplir une autre condition.

if (Period()==1) return; //Условие минуток
if (Period()==5) bool working=true; //Условие пятиминуток
 
splxgf:


Merci. Donc la période M1 correspond à la valeur 1, et la période M5 correspond à la valeur 5, il s'avère donc que la période H1 correspond à 60, et la période H4 à 240 n'est-ce pas ?

J'ai besoin que cette construction fonctionne : lorsque la période M1 est sélectionnée, le cas 1 et lorsque la période M15 est sélectionnée, le cas 15. Cela fonctionnera-t-il, ou faut-il faire le cas 1, le cas 2, le cas 3 - dans l'ordre ?

  switch(Period())
    {
    case 1 : Ba = 60;
    case 5 : Ba = 12;
    case 15 : Ba = 4;
    case 30 : Ba = 2;
    case 60 : Ba = 1;
    }