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

 
Rewerpool:

Pourquoi l'écrire de cette façon ?

Si vous ne mettez l'EA que sur un seul symbole, mais qu'il fonctionnera sur tous les symboles ? Et le magicien verra le sien !

Je suis confus !

Dans l'ancienne mql4, la condition était vérifiée du début à la fin, indépendamment du résultat de la vérification de la première condition de la liste. D'où cette vilaine écriture, volonté de réduire le temps de traitement.

De nos jours, il est écrit quelque part, mais je ne me souviens plus où, que si la première condition n'est pas remplie, alors la vérification s'arrête. Par conséquent, se gratter l'oreille gauche avec l'auriculaire du pied droit n'a aucun sens.

 

@Konstantin Nikitin Donc si j'écris au début de l'itération comme ceci


 for (int i=OrdersTotal()-1; i>=0; i--)
   {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  
   if (OrderSymbol() != Symbol()) continue;
   
   if (OrderMagicNumber() != Magic) continue;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

Donc si j'écris au début de l'itération comme ceci

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
Quelque chose comme ça.
 

Bon après-midi. Voici ce qu'ils écrivent.

" Le produit ne peut contenir qu'un seul fichier EX4, aucun fichier supplémentaire n'est autorisé. Le nom du fichier EX4 et les noms des paramètres d'entrée doivent être écrits en lettres latines. Il est recommandé d'utiliser lesressources afin de créer une interface conviviale.

Pour des raisons de sécurité, les appels à des DLL ne sont pas autorisés dans le programme. Si des données de test sont nécessaires pour le programme de démonstration, le programme doit créer lui-même le fichier requis et en informer l'utilisateur. Vous pouvez également ajouter les fichiers requis à l'aide de la fonction ResourceLoad, mais sachez que tous les produits sont vérifiés pour détecter d'éventuelles activités malveillantes avant d'être publiés sur la place de marché.

Il est interdit d'intégrer des restrictions au produit en fonction de l'heure, du type ou du nombre de comptes de trading, d'instruments financiers, etc. Toute action de ce type sera considérée comme inamicale pour l'Acheteur et ne sera pas tolérée."

Dites HOW..... Faire une demande d'EA à un indicateur.

 
Oleksandr Kulibaba:

Bon après-midi. Voici ce qu'ils écrivent.

" Le produit ne peut contenir qu'un seul fichier EX4, aucun fichier supplémentaire n'est autorisé. Le nom du fichier EX4 et les noms des paramètres d'entrée doivent être écrits en lettres latines. Il est recommandé d'utiliser lesressources afin de créer une interface conviviale.

Pour des raisons de sécurité, les appels à des DLL ne sont pas autorisés dans le programme. Si des données de test sont nécessaires pour le programme de démonstration, le programme doit créer lui-même le fichier requis et en informer l'utilisateur. Vous pouvez également ajouter les fichiers requis à l'aide de la fonction ResourceLoad, mais sachez que tous les produits sont vérifiés pour détecter d'éventuelles activités malveillantes avant d'être publiés sur la place de marché.

Il est interdit d'intégrer des restrictions au produit en fonction de l'heure, du type ou du nombre de comptes de trading, d'instruments financiers, etc. Toute action de ce type sera considérée comme inamicale pour l'Acheteur et ne sera pas tolérée."

Dites HOW..... Faites une demande d'EA à l'indicateur.

Vous avez vous-même écrit la réponse : Utiliser une ressource

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

Vous avez écrit la réponse vous-même : Utilisez la ressource

Merci pour la réponse. Mais je l'ai déjà lu et j'ai essayé de l'insérer. Je n'y arrive pas. Je fais quelque chose de mal ou je le mets au mauvais endroit. Je fais appel à trois indicateurs. Veuillez décrire ce script plus en détail.

Quoi, où, quels paramètres... Merci d'avance.

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

Merci pour la réponse. Mais je l'ai déjà lu et j'ai essayé de l'intégrer. Je n'arrive pas à le faire fonctionner. Soit je le fais mal, soit je le mets au mauvais endroit. Je fais appel à trois indicateurs. Veuillez décrire ce script plus en détail.

Quoi, où, quels paramètres... Merci d'avance.

Créez trois variables ou autant que vous le souhaitez et appelez-les comme dans l'exemplehandle_ind=iCustom(_Symbol,_Period,"::Indicators\\blah-blah-blah) Insérez le code. Juste pour que les gens comprennent !

iCustom, c'est ça !

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
Si
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

Créez trois variables ou autant que vous le souhaitez et interrogez-les comme dans l'exemplehandle_ind=iCustom(_Symbol,_Period,"::Indicators\\blah-blah-blah) Insérez le code. Juste pour que les gens comprennent !

iCustom, c'est ça !

Si

Je vais essayer. Merci.

 
@Oleksandr Kulibaba Insérez votre code, erreurs ! Avoir de la compréhension ! Les bonnes personnes aideront ! Votre problème n'est pas clair !
 
@Konstantin Nikitin Beau travail. Supprimé du code
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

L'arrêt se déclenche maintenant à chaque tic-tac )))))


Dans le post vous avez indiqué la fermeture du code pour le magicien ! Je comprends cela ! La situation est la suivante : je trade à la main, mais soudainement, je dois prendre du recul et donner le contrôle à l'EA (recherche d'un modèle et d'un point d'entrée). Je veux séparer toutes les opérations. Mais l'arrêt et la sortie, comme requis par tous. Peut-être que je ne le creuse pas encore bien !

Raison: