Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1525

 
Artyom Trishkin:

Реклама стороннего ресурса и частных каналов. Был бы не я, мог бы и забанить.

Какая реклама??? Видеоурок по тому что спрашивают. 

 
Andrey Sokolov:

Какая реклама??? Видеоурок по тому что спрашивают. 

Видео уроки через кнопку
 
Что я не так делаю?
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:
Что я не так делаю?
if (in1b)

что??? больше, меньше или равно...с чем ты сравниваешь "in1b"?

 

Всем добрый день. Пытаюсь прикрутить в советник профит фиксированный в пунктах в дополнение к профиту рассчитанному в размере риска. Профит в размере риска работает нормально. А вот в пунктах выставляет какое-то нереальное значение О_о. делаю так. Есть перечисление какой будет профит в размере риска или в пунктах

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


Есть переменная в которую задаю размер профита в пунктах.

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

Далее в он тик пишу вот такую штуку расчёта профита и проверки его корректности.

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

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


Для профита в размере риска всё отлично работает, а вот с фиксированным в пунктах профитом нет. Подскажите пожалуйста что не так пишу и где что нужно исправить для корректной работы выставления профита в пунктах?

 
DanilaMactep:

Всем добрый день. Пытаюсь прикрутить в советник профит фиксированный в пунктах в дополнение к профиту рассчитанному в размере риска. Профит в размере риска работает нормально. А вот в пунктах выставляет какое-то нереальное значение О_о. делаю так. Есть перечисление какой будет профит в размере риска или в пунктах


Есть переменная в которую задаю размер профита в пунктах.

Далее в он тик пишу вот такую штуку расчёта профита и проверки его корректности.


Для профита в размере риска всё отлично работает, а вот с фиксированным в пунктах профитом нет. Подскажите пожалуйста что не так пишу и где что нужно исправить для корректной работы выставления профита в пунктах?

профита в пунктах на умножить на "Point"

 
jarikn:
Что я не так делаю?

А что ты делаешь?

 
MakarFX:

что??? больше, меньше или равно...с чем ты сравниваешь "in1b"?

нету у меня кнопки добавления скринов о которой вы писали, добавлю скрин так. 

немного дописал но все равно ничего не получается)

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);
  }
Файлы:
 
jarikn:

нету у меня кнопки добавления скринов о которой вы писали, добавлю скрин так. 

немного дописал но все равно ничего не получается)

Запусти на чистом графике свой индикатор, открой окно данных и сделай скрин
 
В общем вот к примеру 2 индикатора. Нужно когда стрелка и точка появились на одной свече то сигнал в бай и наоборот
Файлы:
in1.ex4  11 kb
in2.ex4  3 kb