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

 
Artyom Trishkin:

Publicité d'une ressource tierce et canaux privés. Si ce n'était pas pour moi, j'aurais pu être banni.

Quelle annonce ? Un tutoriel vidéo sur ce qui est demandé.

 
Andrey Sokolov:

Quel genre de publicité ? Un tutoriel vidéo sur ce qui est demandé.

Leçons vidéo via le bouton
 
Qu'est-ce que je fais de mal ?
int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0,Buy);
   SetIndexBuffer(1,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue (0, 0);
   SetIndexEmptyValue (1, 0);
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle (0, DRAW_ARROW);
   SetIndexStyle (1, DRAW_ARROW); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow(0, 234);  //Стрелка "вниз" для продаж
   SetIndexArrow(1, 233);  //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel(0, "Продаём");
   SetIndexLabel(1, "Покупаем");
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits (Digits);
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ("Мой первый индикатор");
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    int limit=rates_total-prev_calculated-5;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,0); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,0); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
     
     if (in1b/* && in2b*/)
           Buy[i]=high[i];
     if (in1s/* && in2s*/)
            
             Sell[i]=low[i];
   
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
jarikn:
Qu'est-ce que je fais mal ?
if (in1b)

quoi ? plus, moins ou égal... à quoi comparez-vous "in1b" ?

 

Bonjour à tous. J'essaie d'attacher un profit à points fixes à mon conseiller expert en plus du profit calculé dans la taille du risque. Le profit dans la taille du risque fonctionne bien. Mais il fixe une valeur irréelle en pips. J'ai une liste de ce que sera le profit dans la taille du risque ou en points.

  enum enumTP //ПЕРЕЧИСЛЕНИЕ ДЛЯ ТЕЙК ПРОФИТА
  {
   en_fiks_tp = 1, // ФИКСИРОВАННЫЙ В ПУНКТАХ
   en_v_r = 0,  // В КОЛИЧЕСТВЕ Р
  };


J'ai défini une variable qui définit la taille du profit en points.

extern int Razmer_tp = 1500; // ТЕЙК ПРОФИТ В ПУНКТАХ

Ensuite, j'écris le calcul de profit suivant et je vérifie son exactitude dans le on-tick.

//+--НАЧАЛО РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

if(sl > 0 && Tip_tp == en_v_r) // ЕСЛИ ПРОФИТ В КОЛИЧЕСТВЕ Р
//{// НАЧАЛО ПРОВЕРКИ НА НОЛЬ
  tp=sl*tp_v_R; // ВЫЧИСЛЯЕМ ПРОФИТ УМНОЖАЯ СТОП ЛОС НА КОЛИЧЕСТВО РИСКА
  //-НАЧАЛО РАСЧЁТА ПРОФИТА В ПУНКТАХ---------------------------------------------------------------------------------------------+
  
  if(Tip_tp == en_fiks_tp)
  {//--НАЧАЛО ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp = Razmer_tp;  // ПРОФИТУ ПРИСВАЕВАЕМ КОЛИЧЕСТВО ПУНКТ
  
  }//---КОЕНЦ ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp= NormalizeDouble(tp, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  
  // ПРОВЕРКА ТЕЙК ПРОФИТА НА СТОП ЛЕВЕЛ ОТ МАКАРА--
  if(tp<stoplevel)                                                           // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
  {
         tp=NormalizeDouble(stoplevel*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


Pour le profit en taille de risque, cela fonctionne bien, mais pas pour le profit fixe en pips. Veuillez me conseiller sur ce que je fais mal et ce qui doit être corrigé pour que le calcul des bénéfices en pips fonctionne correctement.

 
DanilaMactep:

Bonjour à tous. J'essaie d'attacher un profit à points fixes à mon EA en plus du profit calculé dans la taille du risque. Le profit dans la taille du risque fonctionne bien. Mais il fixe une valeur irréelle en pips. J'ai une liste de ce que sera le profit dans la taille du risque ou en points.


J'ai défini une variable qui définit la taille du profit en points.

Ensuite, j'écris le calcul de profit suivant et je vérifie son exactitude dans le on-tick.


Pour le profit en taille de risque, cela fonctionne bien, mais pas pour le profit fixe en pips. Veuillez m'indiquer ce que je fais mal et ce qui doit être corrigé lors du calcul du bénéfice en points.

Je voudrais vous demander de multiplier le bénéfice en pips par"Point".

 
jarikn:
Qu'est-ce que je fais de mal ?

Qu'est-ce que tu fais ?

 
MakarFX:

quoi ? plus, moins ou égal... à quoi comparez-vous "in1b" ?

Je n'ai pas le bouton d'ajout de capture d'écran dont vous avez parlé, je vais ajouter une capture d'écran de cette façon.

Je l'ai écrit un peu mais ça ne marche toujours pas)

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    int limit=rates_total-prev_calculated-
1 ;
   if(limit<1) return(0);
   for(int i=limit;i>=0;i--)
     {
     
      // Снимем показания индикатора
     double in1b = iCustom(NULL,0,"in1",1,1); // индикатор 1 стрелка вверх
     double in1s = iCustom(NULL,0,"in1",0,1); // индикатор 1 стрелка вниз
     
     double in2b = iCustom(NULL,0,"in2",0,0); // индикатор 2 стрелка вверх
     double in2s = iCustom(NULL,0,"in2",1,0); // индикатор 2 стрелка вниз
      Comment("in1b = "+in1b+"\n""in1s = "+in1s);
     if (in1b<999999 && in1s>999999)
           Sell[i]=low[i];
     if (in1s<999999 && in1b>999999)
            Buy[i]=high[i];
             
   
     }
     
//--- return value of prev_calculated for next call
   return(rates_total);
  }
Dossiers :
 
jarikn:

Je n'ai pas le bouton d'ajout de capture d'écran dont vous avez parlé, je vais ajouter une capture d'écran de cette façon.

Je l'ai fait un peu, mais ça ne marche toujours pas).

Exécutez votre indicateur sur un graphique propre, ouvrez la fenêtre de données et faites une capture d'écran.
 
Par exemple, voici 2 indicateurs. Quand une flèche et un point apparaissent sur une bougie, il faut un signal d'achat et vice versa.
Dossiers :
in1.ex4  11 kb
in2.ex4  3 kb
Raison: