Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 662

 
Ну а может у кого-то уже есть готовый индюк iMAOnArray от RSI?
 
berezhnuy:
Ну а может у кого-то уже есть готовый индюк iMAOnArray от RSI?

Теперь понятно, почему Вам никто особо не откликнулся "в помощь"...
 
berezhnuy:
Ну а может у кого-то уже есть готовый индюк iMAOnArray от RSI?

в кодобазе есть, надо лишь поискать
 
Товарищи. Решил ради практики закодить простейшее отображение поглощений. Но в итоге возникла проблема, что при смене таймфрейма на графике и возвращении на таймфрейм с пошлощением, алерт снова срабатывает. Нашёл вариант алертить только один раз за бар, но опять же всё обнуляется при переключении тф.
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
Вот сам код, без графических рисовалок, только логика. Как исправить?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.S. индюк сбрасывает условный "ThisBarTrade" при деиницализации во время перехода на другие тф.
 

Подскажите плз как разделить тикеты для бая и селл отдельно ? 

 

 ticket=OrderSend("EURUSD",OP_SELL,SellLot,Bid,3,0,0,"",MAGICMA,0,Red);


else

{

 OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES);

 OrderClose(ticket-3,SellLot,Ask,3,Red);


 

ticket-3 специально, ТК торговля ведется как бы усредненной ценой по нескольким ордерам ) но как мне разделить Бай тикеты от селл тикетов ? чтоб я мог взять ордер который отрыт был 3 бая назад )  так же для селл 

 

Здравствуйте, други!) у меня такая проблема: 

написал прогу, которая открывает шаблон (с нужными мне индикаторами и графическим объектом) при запуске, потом анализирует данные и торгует. когда я его просто запускаю на графике, все нормально работает. когда его запускаю в тестере, он работает только при визуализации. я так понимаю, шаблон можно загрузить только на визуально открытый график... поэтому в обычном режиме теста прога не работает, так как прогоняется просто по графику без загрузки шаблона... и как быть с оптимизацией? у меня немало параметров, и как-то очень не разумно каждый вариант прогонять в ручную с визуализацией.

помогите плиз)) как можно решить проблему с оптимизацией и шаблоном? 

 
evillive:

Зачот )))


Только я не на MQL писал, а формально, вот ведь закавыка (:

А как это можно было определить?

Поскольку количество значений сильно ограничено, можно проверить прямым brute force'ом:

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

Получаем:

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

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

Если вместо переменной используется выражение, например, вызов функции, то равнозначность становится "равнозначностью с оговорками" из-за короткой схемы вычисления логических выражений.

 

Всем привет!

Сделал индикатор на основе другого индикатора.

Первый буфер считает, как надо.

Второй нет: нужно, чтобы после «line1 > 0», начался отсчет на каждом баре.

Что в принципе я и делал в советнике вот так:

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

и уже после «shift >= shet» срабатывает условие отрисовки.

Меняю внешние параметры переменной «shet», никакого изменения в индикаторе.

В чем может быть проблема?

Код индикатора:

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Всем привет!

Сделал индикатор на основе другого индикатора.

Первый буфер считает, как надо.

Второй нет: нужно, чтобы после «line1 > 0», начался отсчет на каждом баре.

Что в принципе я и делал в советнике вот так:

и уже после «shift >= shet» срабатывает условие отрисовки.

Меняю внешние параметры переменной «shet», никакого изменения в индикаторе.

В чем может быть проблема?

Код индикатора:


Есть непонятки с прибавлением 0, но пробуйте так:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

Доброго времени суток.

В терминале, если я дважды щелкаю мышью на линию ордера, то открывается окно модификации.

Но если на линии находится цена открытия одного ордера и тейк профит другого, то открывается последний измененный ордер.

Уважаемые Профи, подскажите есть ли в mql4 функция вызова окна модификации ордера путем клика мышью на нужном ордере в индикаторе?