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

 
sibiriyak73:

Où est l'erreur ?

S'il y a beaucoup de personnages, alors il y a beaucoup d'"ouvertures".

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

S'il y a beaucoup de personnages, alors il y a beaucoup d'"ouvertures".

Merci, mon pote. Comment puis-je faire en sorte qu'il une transaction par jour pour s'arracher à l'instrument actuel et ne pas tenir compte des autres instruments (EA se tient sur plusieurs instruments)
 
sibiriyak73:
Merci mon pote. Comment le préparer une transaction par jour pour s'arracher au symbole actuel et ne pas tenir compte des autres instruments (EA se tient sur plusieurs symboles)

- regarder dans l'historique des ordres par son numéro magique et son symbole, si l'heure d'ouverture (ou de fermeture ?) de l'ordre correspond à la date du jour, alors exit OnTick()

- contrôler la "nouvelle barre" sur TF D1


la première méthode - plus d'écriture, mais dans le testeur, MT4 fonctionnera très rapidement ; la deuxième méthode - 3 lignes de code, mais dans le testeur il "mâchera" le disque dur et le temps de test sera plus long

 
sibiriyak73:
(EA se tient debout sur plusieurs instruments)

Ah, je pense que j'ai compris, si vous avez une EA qui se tient sur plusieurs instruments, alors vous devez juste ajouter une vérification que l'ordre appartient à l'EA.

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

Ah, je pense que j'ai compris, si vous avez une EA sur plusieurs instruments, alors vous devez juste ajouter une vérification que l'ordre appartient à l'EA.

Ce code ouvre un grand nombre d'offres. L'idée est correcte, mais comment la mettre en œuvre correctement.

 
sibiriyak73:

Ce code permet d'ouvrir un très grand nombre de transactions. L'idée est correcte mais comment la mettre en œuvre correctement.

Vous avez besoin de ceci

Fonction isTradeToDay().

Cette fonction renvoie le drapeau commercial pour aujourd'hui

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

Que pouvez-vous deviner d'un morceau de code ici ?

Faites un contrôle, pas plus d'une fois par jour.

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

Les gars de l'aide dans le conseiller besoin d'ouvrir un commerce par jour sur l'outil.

Vous pouvez essayer ceci

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

Vous pouvez essayer ceci.

Tout cela a été écrit il y a longtemps... il y a très longtemps.

Ce code vérifie ce qui est déjà sur le marché et ce qui est dans l'historique au cas où il serait déjà fermé aujourd'hui.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

Que pouvez-vous deviner d'un morceau de code ici ?

Faites un contrôle, pas plus d'une fois par jour.

Salutations. Le problème est que si l'EA voit une transaction ouverte sur le compte, il n'ouvre pas d'autres transactions. C'est comme "vous avez des transactions ouvertes sur votre compte, pourquoi voulez-vous que je fasse ça". Je dois lui expliquer qu'il ne faut pas ouvrir plus d'un trade sur CET OUTIL(EUR USD par exemple) car cet EA est ouvert sur peu de symboles. Je pense que ce serait une erreur de montrer tout le code (c'est un gros code avec des variables déclarées, etc.).