Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1525

 
Artyom Trishkin:

Anunciar um recurso de terceiros e canais privados. Se não fosse por mim, eu poderia ter sido banido.

Que anúncio? Um tutorial em vídeo sobre o que está sendo pedido.

 
Andrey Sokolov:

Que tipo de comercial? Um tutorial em vídeo sobre o que está sendo pedido.

Aulas em vídeo através do botão
 
O que eu estou fazendo de errado?
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:
o que estou fazendo de errado?
if (in1b)

o quê??? mais, menos ou igual... o que você está comparando "in1b" com?

 

Boa tarde a todos. Estou tentando anexar um lucro de pontos fixos ao meu consultor especializado, além do lucro calculado no tamanho do risco. O lucro em tamanho de risco está funcionando bem. Mas estabelece um valor irreal em pips. Tenho uma lista do que será o lucro no tamanho do risco ou em pontos

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


Eu defino uma variável que define o tamanho do lucro em pontos.

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

Em seguida, escrevo o seguinte cálculo de lucro e verifico sua exatidão no bastão.

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

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); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
  //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


Para lucro em tamanho de risco funciona bem, mas não para lucro fixo em pips. Por favor, me informe o que estou fazendo de errado e o que deve ser corrigido para que meu cálculo de lucro funcione corretamente em pontos?

 
DanilaMactep:

Boa tarde a todos. Estou tentando anexar um lucro de pontos fixos à minha EA, além do lucro calculado no tamanho do risco. O lucro em tamanho de risco está funcionando bem. Mas estabelece um valor irreal em pips. Tenho uma lista do que será o lucro no tamanho do risco ou em pontos


Eu defino uma variável que define o tamanho do lucro em pontos.

Em seguida, escrevo o seguinte cálculo de lucro e verifico sua exatidão no bastão.


Para lucro em tamanho de risco funciona bem, mas não para lucro fixo em pips. Por favor, informe o que estou fazendo de errado e o que deve ser corrigido ao calcular o lucro em pontos?

Gostaria de pedir-lhe que multiplicasse o lucro em pips por"Ponto".

 
jarikn:
O que eu estou fazendo de errado?

O que você está fazendo?

 
MakarFX:

o quê??? mais, menos ou igual... o que você está comparando "in1b" com?

eu não tenho o botão " add screenshot" sobre o qual você escreveu, vou adicionar uma imagem de tela desta forma.

Eu escrevi um pouco, mas ainda não funciona)

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);
  }
Arquivos anexados:
 
jarikn:

Não tenho o botão " add screenshot" sobre o qual você escreveu, vou adicionar um screenshot desta forma.

Eu o fiz um pouco, mas ainda não funciona)

Execute seu indicador em um gráfico limpo, abra a janela de dados e tire uma foto da tela
 
Por exemplo, aqui estão 2 indicadores. Quando uma flecha e um ponto aparecem em uma vela, precisamos de um sinal de compra e vice-versa.
Arquivos anexados:
in1.ex4  11 kb
in2.ex4  3 kb
Razão: