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

 

Pouvez-vous rester simple ?)))

Où puis-je trouver ça ?

L'indicateur a un code fermé, comment puis-je connaître le nom de cette énumération ?

Et de quel type de variable ai-je besoin ?

Je sais juste comment fusionner des indicateurs via iCustom, mais je ne suis pas capable d'aller plus loin).

Si ce n'est pas trop difficile, pourriez-vous le rendre plus simple)))).

ENUM_BASE_CORNER a été essayé, mais il ne s'affiche toujours pas.
 
Сергей:

Pouvez-vous rester simple ?)))

Où puis-je trouver ça ?

L'indicateur a un code fermé, comment puis-je connaître le nom de cette énumération ?

Et de quel type de variable ai-je besoin ?

Je sais juste comment fusionner des indicateurs via iCustom, mais je ne suis pas capable d'aller plus loin).

Si ce n'est pas trop difficile, pouvez-vous le faire plus simplement)))).

ENUM_BASE_CORNER a été essayé, mais il ne s'affiche toujours pas.

Voici un exemple.

La première option est l'utilisation de l'énumération standard ENUM_BASE_CORNER.

La deuxième variante consiste à utiliser l'enum personnalisé

Puis dans iCustom, où il doit être placé base ou my_base variable, selon la variante que vous choisissez.

Dossiers :
100.mq4  5 kb
 
Сергей:

Bonjour.

Pouvez-vous me donner un indice, je suis dépassé.

Je prescris l'indicateur par iCustom et je suis confronté à un problème - l'indicateur a un menu texte avec un choix, il s'ouvre et il y a plusieurs éléments prescrits, enfin, je pense que c'est clair)

Comment puis-je l'ajouter dans le menu ?

extern int HIT = 0 ; ne fonctionne pas, cesse de s'afficher, ne laissant aucun paramètre affiché.

Peut-être qu'à travers ENUM , il y a de quoi choisir, ou peut-être autre chose ?

Merci d'avance.

Avez-vous saisi tous les paramètres dans iCustom(,,,,,,,) dans l'ordre correct ?

 

Bonjour à tous. J'essaie de collecter des données lors de l'ouverture des ordres. Je veux écrire la valeur de l'indicateur adh sur les chandeliers 1,2,3 dans un fichier lors de l'ouverture d'un ordre.

Je fais ce qui suit. J'ai ouvert le répertoire des données, je suis allé dans le dossier du testeur, dans le dossier des fichiers et j'y ai créé un fichier appelé "ZNA4_ADX.csv". puis dans le fichier de la bibliothèque avec l'extension .mqh avec l'extension . Voici le code de la fonction commentée.

void writing_adx_screen1_to_file(int i_param) // ФУНКЦИЯ ЗАПИСИ ДАННЫХ В ФАЙЛ
   { //---НАЧАЛО ФУНКЦИИ ЗАПИСИ В ФАЙЛ ЗНАЧЕНИЯ АДХ ПО ПЕРВОМУ ЭКРАНУЭКРАНУ-----------------------------------------------------------------------+
   
   //-НАЧАЛО ПОЛУЧЕНИЯ ХЕНДЕЛА ОТКРЫВАЕМОГО ФАЙЛА------------------------------------------------------------------------------+
   int hendel= FileOpen("ZNA4_ADX.csv",FILE_WRITE,';');
   
   //-КОНЕЦ ПОЛУЧЕНИЯ ХЕНДЕЛА ОТКРЫВАЕМОГО ФАЙЛА------------------------------------------------------------------------------+
   
   
//---НАЧАЛО ПОЛУЧЕНИЯ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ------------------------------------------------------------------------+

  double adx1= iADX(Symbol(),//СИМВОЛ НА КОТОРОМ УСТАНОВЛЕН СОВЕТНИК
  PeriodForWork_screen1,// ТАЙМ ФРЕЙМ ПЕРВОГО ЭКРАНА
  period_adx_zapici_v_fail, //ПЕРИОД АДХ ДЛЯ ЗАПИСИ В ФАЙЛ 
  Price_adx_dl9_zapici,     // ЦЕНА РАСЧЁТА ЛИНИЙ АДХ ДЛЯ ЗАПИСИ В ФАЙЛ
  MODE_MAIN // ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ 
,1);

//---АДХ_СВЕЧА 2 НАЧАЛО------------------------------------------------------------------------------------------+

double adx2= iADX(Symbol(),//СИМВОЛ НА КОТОРОМ УСТАНОВЛЕН СОВЕТНИК
  PeriodForWork_screen1,// ТАЙМ ФРЕЙМ ПЕРВОГО ЭКРАНА
  period_adx_zapici_v_fail, //ПЕРИОД АДХ ДЛЯ ЗАПИСИ В ФАЙЛ 
  Price_adx_dl9_zapici,     // ЦЕНА РАСЧЁТА ЛИНИЙ АДХ ДЛЯ ЗАПИСИ В ФАЙЛ
  MODE_MAIN // ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ 
,2);
//---АДХ_СВЕЧА 2 КОНЕЦ---------------------------------------------------------------------------------------------+

//---АДХ_СВЕЧА 3 НАЧАЛО------------------------------------------------------------------------------------------+

double adx3= iADX(Symbol(),//СИМВОЛ НА КОТОРОМ УСТАНОВЛЕН СОВЕТНИК
  PeriodForWork_screen1,// ТАЙМ ФРЕЙМ ПЕРВОГО ЭКРАНА
  period_adx_zapici_v_fail, //ПЕРИОД АДХ ДЛЯ ЗАПИСИ В ФАЙЛ 
  Price_adx_dl9_zapici,     // ЦЕНА РАСЧЁТА ЛИНИЙ АДХ ДЛЯ ЗАПИСИ В ФАЙЛ
  MODE_MAIN // ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ АДХ 
,3);
//---АДХ_СВЕЧА 3 КОНЕЦ----------------------------------------------------------------------------------------+

//--КОНЕЦ ПОЛУЧЕНИЯ ЗНАЧЕНИЯ ОСНОВНОЙ ЛИНИИ//------------------------------------------------------------------------------+
if(hendel>0)
FileWrite(hendel,"ордер "+(string)i_param+" "+(string)adx1,(string)adx2,(string)adx3); // ЗАПИСЫВАЮ ДАННЫЕ В ФАЙЛ:)

FileClose(hendel);

   
   }//---КОНЕЦ ФУНКЦИИ ЗАПИСИ В ФАЙЛ ЗНАЧЕНИЯ АДХ ПО ПЕРВОМУ ЭКРАНУ----------------------------------------------------------------+

Je veux que les données soient écrites comme sur la capture d'écran ci-dessous.

EXEMPLE DE LA FAÇON DONT JE VEUX ENREGISTRER LES DONNÉES


C'est-à-dire que le texte rouge est un en-tête que je vais écrire manuellement. La ligne 2 est ce que je veux régler avec cette fonction. C'est un numéro d'ordre dans le test. Et nous avons trois valeurs adx. Ensuite, lorsque le deuxième ordre s'ouvre dans le test, nous avons besoin de la ligne suivante où le numéro de l'ordre devient 2, et les valeurs adx seront écrites pour trois chandeliers avant l'ouverture de cet ordre, et ainsi de suite, autant d'ordres dans le test...

J'appelle la fonction elle-même dans le code de l'EA, comme indiqué dans l'extrait de code ci-dessous.


  //---КОНЕЦ БАЙ ТРЕНДА СИГНАЛ АО------------------------------------------------------------------------------------------+
  if(f_end_trend_buy_ao_market_order() && count_orders_market_buy == 0 && count_orders_market_sell == 0)
  {// НАЧАЛО ЕСЛИ ЕСТЬ СИГНАЛ ОКОНЧАНИЯ БАЙ ТРЕНДА ДИВЕРЕГЕНЦИЯ АО
      if(OrderSend(Symbol(),OP_SELL,lot,Bid,slippages,Bid+sl , Bid-tp ,Coment, Magik_number)) Print("ОТКРЫВАЕМ ОРДЕР СЕЛЛ ПО СИГНАЛУ ОКОНЧАНИЯ ТРНЕДА- ДИВЕРЕГЕНЦИЯ АО"); // ОТКРКЫВВАЕМ СЕЛ ОРДЕР
      writing_adx_screen1_to_file(i_nomer_ordera);// ВЫЗОВ ФУНКЦИ ЗАПИСИ ДАННЫХ В ФАЙЛ
      if (GetLastError()==141){Alert("ОШИБКА № "+string(GetLastError())+"УДАЛЯЕМ ЭКСПЕРТА С ГРАФИКА"); ExpertRemove();}// ПРОВЕРКА ОТ ДОЛБАНИЯ СЕРВЕРА И БАНА СЧЁТА   


  } // КОНЕЦ ЕСЛИ ЕСТЬ СИГНАЛ ОКОНЧАНИЯ БАЙ ТРЕНДА ДИВЕРЕГЕНЦИЯ АО//-------------------------------------------------------------------------------------------------+
  



Le test se déroule sans aucune erreur, mais j'ai obtenu ce résultat dans le fichier (SCREEN BELOW ).

CE QUE J'AI OBTENU EN ÉCRIVANT DANS LE FICHIER


J'ai obtenu une ligne avec le premier ordre et trois valeurs, mais il y avait 189 ordres ouverts dans le test. Qu'est-ce que j'ai oublié et où ai-je oublié d'augmenter la variable pour compter le nombre de commandes et comment dois-je faire pour que les données suivant la première commande soient enregistrées dans les lignes 2,3-189 ? S'il vous plaît, ne m'envoyez pas vers la base de code et d'autres endroits où il m'est difficile de lire du texte, et où le code des autres est presque impossible. Dites-moi donc de manière claire ce qu'il faut ajouter et où je peux obtenir les données dont j'ai besoin ? P/S si cela ne vous dérange pas de souligner le point avec l'ajout ...

 
DanilaMactep:

Bonjour à tous. J'essaie de collecter des données lors de l'ouverture des ordres. Je veux écrire la valeur de l'indicateur adh sur les chandeliers 1,2,3 dans un fichier lors de l'ouverture d'un ordre.

Je fais ce qui suit. J'ai ouvert le répertoire des données, je suis allé dans le dossier du testeur, dans le dossier des fichiers et j'y ai créé un fichier appelé "ZNA4_ADX.csv". puis dans le fichier de la bibliothèque avec l'extension .mqh avec l'extension . Voici le code de la fonction commentée.

Je veux que les données soient écrites comme sur la capture d'écran ci-dessous.


C'est-à-dire que le texte rouge est un en-tête que je vais écrire manuellement. La ligne 2 est ce que je veux régler avec cette fonction. C'est un numéro d'ordre dans le test. Et nous avons trois valeurs adx. Ensuite, lorsque le deuxième ordre s'ouvre dans le test, nous avons besoin de la ligne suivante où le numéro de l'ordre devient 2, et les valeurs adx seront écrites pour trois chandeliers avant l'ouverture de cet ordre, et ainsi de suite, autant d'ordres dans le test...

J'appelle la fonction elle-même dans le code de l'EA, comme indiqué dans l'extrait de code ci-dessous.




Le test se déroule sans aucune erreur, mais j'ai obtenu ce résultat dans le fichier (SCREEN BELOW ).


J'ai obtenu une ligne avec le premier ordre et trois valeurs, mais il y avait 189 ordres ouverts dans le test. Qu'est-ce que j'ai oublié et où ai-je oublié d'augmenter la variable pour compter le nombre de commandes et comment dois-je faire pour que les données suivant la première commande soient enregistrées dans les lignes 2,3-189 ? S'il vous plaît, ne m'envoyez pas vers la base de code et d'autres endroits où il m'est difficile de lire du texte, et où le code des autres est presque impossible. Dites-moi donc de manière claire ce qu'il faut ajouter et où je peux obtenir les données dont j'ai besoin ? P/S si cela ne vous dérange pas de souligner le point avec l'ajout ...

Si le fichier est ouvert avec un seul drapeau FILE_WRITE, tout ce qui se trouve dans le fichier est supprimé. Pour enregistrer des données existantes dans un fichier, vous devez ouvrir le fichier pour la lecture et l'écriture.

N'oubliez pas ensuite de déplacer le pointeur à la fin du fichier.

 
Alexey Viktorov:

Si le fichier est ouvert avec un seul drapeau FILE_WRITE, tout le contenu du fichier est supprimé. Pour sauvegarder les données existantes dans le fichier, vous devez ouvrir le fichier en lecture et en écriture.

N'oubliez pas ensuite de déplacer le pointeur à la fin du fichier.

Alexey, merci beaucoup de m'avoir indiqué où "creuser" l'erreur - jusqu'à présent, j'ai réussi à faire un enregistrement ligne par ligne - il ne reste plus qu'à peigner le tout dans un format utilisable pour l'analyse)))).
 

Les valeurs du tableau se trouvent dans des cellules de RAM qui se suivent. La longueur maximale des cellules inoccupées peut dépendre de.

 
Pourquoi cela ne fonctionne-t-il pas avec les adresses de fonction ?
template<typename T>
typedef T (*Fun)(const int, const int, const double &[], const double &[], const double &[], const double &[], const int &[]);
Fun    calculation,
       function;

//------------------------------------------------------------------------------------------------------------------------------

int OnInit()
  {
   calculation  = test;
   function     = Dis_HL_Value;
  //-----------------------------------------------------------------
   return(INIT_SUCCEEDED);
  }
 
Bonjour, pouvez-vous me dire s'il s'agit d'une déclaration d'un tableau à deux dimensions ?
      ArrayInitialize(ZigZagBuffer,0.0);
Merci d'avance !
 
Дмитрий:
Bonjour, pouvez-vous me dire si ceci est une déclaration d'un tableau à deux dimensions ? Merci d'avance !

Non, il s'agit d'une initialisation d'un élément déjà déclaré.