Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 91

 
Vitaly Muzichenko:
Vous devez trier par prix, car vous ne pouvez pas chercher par taille, la grille peut être différente, et vous trouverez soit le plus grand soit le plus petit, mais pas le premier ni le dernier

Je veux dire la fonction que Marina a postée.

Le dernier ordre est déterminé par le temps.

 
Alekseu Fedotov:

Je veux dire la fonction que Marina a postée.

Le dernier ordre est déterminé par le temps.

Ils ont tous été passés en même temps, donc avec 14 ordres, il peut y avoir une différence d'une seconde, et vous ne pouvez pas les trier par temps, seulement par prix.
 
Marina Korotkih:

Parce que je le résume de cette façon

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
Je l'ai.
 

Chers programmateurs ! Aidez-moi à résoudre cette question. Le conseiller expert entre dans une transaction sur M15, mais prend également les conditions de H1. Lorsque les conditions sur H1 sont remplies sur M15, il peut y avoir plusieurs points d'entrée. En fait, le problème est que je veux utiliser uniquement le premier point d'entrée, jusqu'à ce que les conditions sur H1 soient inversées.

k=0 ;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates() ;
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0 ;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++ ;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // achat

 
customer03:

Chers programmateurs ! Aidez-moi à résoudre cette question. Le conseiller expert entre dans une transaction sur M15, mais prend également les conditions de H1. Lorsque les conditions sur H1 sont remplies sur M15, il peut y avoir plusieurs points d'entrée. En fait, le problème est que je veux limiter le premier point d'entrée, jusqu'à ce que les conditions sur H1 ne soient pas modifiées en sens inverse.

k=0 ;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates() ;
si(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0 ;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++ ;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // achat

Mais qu'en est-il sans le code ? En particulier, le code n'est pas clair.

Que voulez-vous exactement ? Pas dans l'abstrait, mais exactement ce que vous voulez obtenir.

 
customer03:

Chers programmateurs ! Aidez-moi à résoudre cette question. Le conseiller expert entre dans une transaction sur M15, mais prend également les conditions de H1. Lorsque les conditions sur H1 sont remplies sur M15, il peut y avoir plusieurs points d'entrée. En fait le problème est que je veux me limiter au premier point d'entrée, alors que sur H1 les conditions ne changent pas en sens inverse.

k=0 ;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates() ;
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0 ;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++ ;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // achat

Un algorithme approximatif :

bool flag = false;
bool flagH1 = true;
bool flagM15 = true;

if(!flag && flagH1 && flagM15)
{
  flag = true;
}

if(!flagH1 && flag)
flag = false;
 
Artyom Trishkin:

Et sans le code ? Raison de plus pour ne pas comprendre le code.

Que voulez-vous exactement ? Pas dans l'abstrait, mais exactement ce que vous voulez obtenir.

Artyom bonjour ! L'objectif est de limiter l'entrée sur M15 à un (premier signal) tant qu'il y a un signal sur H1.
#property strict
extern double    Lot= 0.1;

extern int    stoploss=20;
extern int takeprofit=50;
// если stoploss и / или takeprofit = 0, то отключены.
//if stoploss and/or takeprofit = 0, are disconnected.



extern int  Magic = 99999999;
// уникальный номер, кот. советник метит свои ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными
extern int Slipp = 1;        
// величина максимально возможного проскальзывания.
//  slippage
extern int sec = 2000;
// количество миллисекунд сна советника между повторами отправки торгового поручения в случае неудачи
// number of milliseconds sleep of the EA between repetitions of sending a trade assignment in case of failure


//============================= Stochastic
input int InpKPeriod=13; // K Period
input int InpDPeriod=3; // D Period
input int InpSlowing=3; // Slowing

//============================= Stochastic
input int InpKPeriod1=13; // K Period
input int InpDPeriod1=3; // D Period
input int InpSlowing1=3; // Slowing





int A, a, b, i, ii, o;


    double SL, TP, op, stH0, stH1, stM0, stM1;
    bool c;
    datetime OldTime, Time0, opp;

int init()
  {    
  
   OldTime = iTime(NULL,Period(),0);
  
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  

                      
//====================================================================

stH0 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,0);
stH1 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,1);

stM0 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,0);
stM1 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,1);
  
//====================================================================  

          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != Time[0]) // покупка
      {
       opp = Time[0];

    RefreshRates();
    op = Ask;
   A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
    o = GetLastError();
         while (A < 0 && o != 4109 && o != 132 && o != 133)
         {
          Print("Error =", o);
         Sleep(sec);
         RefreshRates();
         op = Ask;
         A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
         o = GetLastError();
        }      
        
SL = op-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;        
        
    if (SL != 0 || TP != 0)
      {
    RefreshRates();
    if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
    c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
    o = GetLastError();
      while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  o = GetLastError();
                  }  }          
     }

//---------------------------------------------------------------------------------------------------------+                          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }


if( stM1 >= 80 && stM0 < 80  &&  stH0 < 30   && b==0   && opp != Time[0]) // продажа
     {
     opp = Time[0];

      RefreshRates();
      op = Bid;
         A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
         o = GetLastError();
            while (A < 0 && o != 4109 && o != 132 && o != 133)
            {
             Print("Error =", o);
            Sleep(sec);
            RefreshRates();
            op = Bid;
            A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
            o = GetLastError();
            }    

SL = op+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;
        
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         o = GetLastError();
         while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);                  
                  o = GetLastError();
                  } }
      }
      
    

   return(0);
   }      

  
//+------------------------------------------------------------------+
 
customer03:
Artyom bonjour ! L'objectif est de limiter l'entrée sur M15 à un (premier signal) tant qu'il y a un signal sur H1.

Vérifiez donc le nombre de positions ouvertes sur la bougie nulle M15. Si vous avez déjà une position et qu'elle est ouverte sur une bougie nulle M15, alors n'en ouvrez pas d'autres.
 

Bonjour, chers membres du forum. Existe-t-il un moyen de définir la valeur du stop suiveur intégré à Metatrader4 depuis l'EA ? C'est cela qui m'intéresse et non l'ajout à l'EA d'un code pour l'exécution d'un trailing stop indépendant du trailing stop intégré.

Merci d'avance pour les réponses.

 
Dr_G:

Bonjour, chers membres du forum. Existe-t-il un moyen de définir la valeur du stop suiveur intégré à Metatrader4 depuis l'EA ? C'est cela qui m'intéresse et non l'ajout à l'EA d'un code pour l'exécution d'un trailing stop indépendant du trailing stop intégré.

Merci d'avance pour les réponses.

Non.