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

 
Les gars, c'est une question pour laquelle je n'ai pas trouvé de réponse nulle part. Quelle fonction écrire dans l'indicateur pour que les nouvelles barres ne s'ouvrent pas et le ticking dans la barre zéro, jusqu'à ce qu'il fonctionne ma condition, s'il vous plaît répondez-moi en privé))
 

Bonjour !

Je suis confus dans trois pins :

J'ai défini des nombres extern int a =2 ; extern int b =3 ; extern int c =4 ; comment puis-je maintenant définir le nombre abcpour changer sa valeur lorsque je change a, ou b, ou c pour le comparer à un certain d donné (par exemple d=344)?

Merci !

 
novichok2018:

Bonjour !

Je suis confus dans trois pins :

J'ai défini des nombres extern int a =2 ; extern int b =3 ; extern int c =4 ; comment puis-je maintenant définir le nombre abcpour changer sa valeur lorsque je change a, ou b, ou c pour le comparer à un certain d donné (par exemple d=344)?

Merci !

x = c + b*10 + a*100

 
Сергей Таболин:

x = c + b*10 + a*100

Oh, mon Dieu ! Je me creuse les méninges ! Merci !

 
Bonjour, 2020.10.03_13:33 GMT+3. J'ai pris l'EA moyenne mobile standard pour MetaTrader 4. Et a commencé à le changer pour qu'il devienne rentable. Lorsque vous avez essayé de décrire les conditions de clôture à l'aide de la fonction OrderProfit() dans le testeur de stratégie, le conseiller expert a cessé de clôturer les transactions à cette condition. Elle ne va pas jusqu'à la clôture d'une transaction. Cependant, je doute d'avoir écrit correctement les conditions de clôture. Dans le cas contraire, le conseiller expert fermerait les transactions. Je vais probablement essayer d'écrire le prix d'ouverture du deal et les derniers prix. Une fois que la différence maximale entre le prix d'ouverture et le dernier prix est atteinte et que cette différence est réduite -- fermez la transaction. Je joins le fichier du conseiller expert. 13 H 50 GMT+3.
Dossiers :
 
Николай Никитюк:
Bonjour, 2020.10.03_13:33 GMT+3. J'ai pris l'EA moyenne mobile standard pour MetaTrader 4. Et a commencé à le changer pour qu'il devienne rentable. Lorsque vous avez essayé de décrire les conditions de clôture à l'aide de la fonction OrderProfit() dans le testeur de stratégie, le conseiller expert a cessé de clôturer les transactions à cette condition. Elle ne va pas jusqu'à la clôture d'une transaction. Cependant, je doute d'avoir écrit correctement les conditions de clôture. Dans le cas contraire, le conseiller expert fermerait les transactions. Je vais probablement essayer d'écrire le prix d'ouverture du deal et les derniers prix. Une fois que la différence maximale entre le prix d'ouverture et le dernier prix est atteinte et que cette différence est réduite -- fermez la transaction. Je joins le fichier du conseiller expert. 13 H 50 GMT+3.
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
   //--- check order type
      // 
      if(OrderType()==OP_BUY)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }  
         else break;     
         break;
        }
      if(OrderType()==OP_SELL)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())        // Исходя из ваших условий, то вот
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         else break;  
         break;
        }
     }      

//+------------------------------------------------------------------+
 

Bonjour !

J'ai commencé à écrire une fonction pour normaliser les données d'entrée. Mais je ne peux pas "remplacer" les valeurs originales par les valeurs normalisées. En d'autres termes, je ne peux pas mettre à jour les valeurs du tampon de séries chronologiques Open avec les nouvelles valeurs du tableau Temp. Quelle est mon erreur ? J'ai l'impression que j'essaie de croiser OOP et non-OOP)).

Open=new CiOpen();
   if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
      return;
//---
   int bars=10;
   double Temp[];                //Создаем массив для временного хранения входных данных
   ArraySetAsSeries(Temp,true);  //Устанавливает флаг AS_SERIES
   Open.GetData(0,bars,Temp);    //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);    //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize(double &buffer[],int bars)
  {
   double d1=-1;
   double d2=1;
   double x_min=buffer[ArrayMinimum(buffer,0,bars)];
   double x_max=buffer[ArrayMaximum(buffer,0,bars)];
   for(int i=0; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return;
  }

Je suis sûr que cela peut être fait d'une manière plus simple ! Dans ce cas, veuillez m'enseigner)

 
Aleksei Lesnikov:

Bonjour !

J'ai commencé à écrire une fonction pour normaliser les données d'entrée. Mais je ne peux pas "remplacer" les valeurs originales par les valeurs normalisées. En d'autres termes, je ne peux pas mettre à jour les valeurs du tampon de séries chronologiques Open avec les nouvelles valeurs du tableau Temp. Quelle est mon erreur ? J'ai l'impression que j'essaie de croiser OOP et non-OOP)).

Je suis sûr que cela peut être fait d'une manière plus simple ! Dans ce cas, veuillez m'enseigner)

Lire la documentation sur la langue

La valeur des variables prédéfinies est définie par le terminal client avant de lancer l'exécution d'un programme mql4. Les variables prédéfinies sont constantes et ne peuvent pas être modifiées à partir du programme mql4.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov:

Lire la documentation sur la langue

Alexey, merci ! Il est clair maintenant que ce n'est pas possible.

C'est vrai, je ne suis pas vraiment mql4. J'essaie de modifier des données par le biais de la classe CiOpen. Je suis confus par la méthode Update, qui devrait changer l'élément à une position spécifiée du tableau.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov:

Alexei, merci ! Il est clair maintenant que ce n'est pas possible.

C'est vrai, je n'ai pas exactement mql4. J'essaie de modifier des données par le biais de la classe CiOpen. Je suis confus par la méthode Update, qui devrait changer l'élément à une position spécifiée du tableau.

Puisque la question est posée dans la section mql4, j'ai répondu concernant mql4. Il n'y a aucune allusion à mql5 dans votre question. Mais le résultat est le même.

Raison: