Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#6476
56 минут назад, diodio сказал:

Только теперь я не понимаю почему нулевой бар не давал сигнал на открытие ордера

Телепатить без кода сложно, но предположу, что сигнал от индикатора получаем при открытии 0-го бара, но показания индюка считываем по ближайшей закрытой свече, т.е. 1-й.

#6477

Ребят, а можно ли получить имена файлов в каталоге? Такое вообще возможно на mql4 ?

#6478

Здравствуйте! Подскажите пожалуйста неопытному как правильно использовать функцию iMAOnArray() в советнике для получения средних значений индикатора на последней закрывшейся свече,

extern string a = "WPR";
extern int    period_indicatora = 8;
extern int    period_usredneniy = 15;
extern int    metod_usredneniy  = 3; //значения 0,1,2,3
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
    double h=ABC();
      Comment("h="+DoubleToString(h));       
  }
//+------------------------------------------------------------------+
 double ABC()
 {
   double sz[];
   double ss,wpr;

     for(int i=0; i<period_usredneniy; i++)
     {
      wpr=iWPR(NULL,0,period_indicatora,i+1);
      sz[i]=wpr;
     }
      ss=iMAOnArray(sz,0,period_usredneniy,0,metod_usredneniy,0);
      
     return(ss);
  }

#6479
8 часов назад, Gamakiv сказал:

Ребят, а можно ли получить имена файлов в каталоге? Такое вообще возможно на mql4 ?

Прошу прощения за то, что долбился в глаза. Нашел.

https://docs.mql4.com/ru/files/filefindfirst

#6480
20 часов назад, chww сказал:

Подскажите пожалуйста неопытному как правильно использовать функцию iMAOnArray()

А что, переменная ss , получает не то, что ожидается?

#6481

usver73  спасибо что откликнулись, написал функцию и для проверки вывел данные на экран , при запуске тестера в журнале пишет массив вне диапазона. то есть расчет не производится.

#6482
7 часов назад, chww сказал:

при запуске тестера в журнале пишет массив вне диапазона

Если это весь код, то правильно пишет.

Вы нигде не устанавливаете размер массива sz.

double sz[]; объявите на глобальном уровне
В double ABC() добавьте
ArrayInitialize(sz, 0.0);
В OnInit добавьте 

ArrayResize(sz, period_usredneniy);

p.s.
В OnTick() вызов Print(ABC()); нужно завернуть в NewBar(), чтобы расчеты делались на на каждом тике, а при поступлении нового бара

 

 

Изменено 18 октября, 2021 пользователем usver73

#6483

usver73 Спасибо,с этим разобрался, но появился новый вопрос, как программируется Moving Average( с применением  к First 

Indicators Data) , а так же не понятно индикатор рассчитывает среднее значение за определенный период и рисуется на последней закрывшейся свече с определенным числовым значением, при этом это числовое значение не является расчетным средним.

#6484
7 часов назад, chww сказал:

как программируется Moving Average( с применением  к First 

Indicators Data)

Что значит "программируется"?
Вы же вызов у себя прописали. Если что-то не получилось, конкретизируйте.

8 часов назад, chww сказал:

при этом это числовое значение не является расчетным средним.

сильное заявление.
Если считаете не SMA, то имеет значение последовательность значений в передаваемом массиве.
Иными словами, массив sz нужно сделать AsSerias (см. справку iMAOnArray)

#6485
5 часов назад, usver73 сказал:

Вы же вызов у себя прописали. Если что-то не получилось, конкретизируйте.

Я хотел получить значения Moving Average наложенной на индикатор WPR с возможностью изменения метода усреднения, при запуске в тестере выдает на график какое то расчетное число.

EURUSDH1.png

#6486
22 минуты назад, chww сказал:

при запуске в тестере выдает на график какое то расчетное число.

Проведите эксперимент:
перед вызовом iMaOnArray  сделайте принты входных параметров, в первую очередь массив sz. Можно прямо в цикле, где записываете значения WPR
Возьмите небольшой период усреднения, например, 5.
Метод усреднения -SMA.
Посчитайте среднее значение полученных принтов.
Сравните с тем, что выдает функция iMAOnArray

Изменено 20 октября, 2021 пользователем usver73

#6487
2 часа назад, usver73 сказал:

Проведите эксперимент:

Провел с методом SMA все сходится, а вот при смене метода, "MA" на графике не соответствует тому что выдает функция.

#6488
9 часов назад, usver73 сказал:

Иными словами, массив sz нужно сделать AsSerias (см. справку iMAOnArray

Сделали?

#6489
В 20.10.2021 в 17:26, usver73 сказал:

Сделали?

Сделал и все получилось. Я Вам признателен! Спасибо!

#6490

Всем доброго времени!

У меня есть код вот такой, очень простой:

Спойлер

   int BuyTotal = 0, SellTotal = 0;
   int i;
   
//Подсчитываем отдельно бай и селл ордеры
   for(i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
        {
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
          {
         if(OrderType()==OP_BUY)
            BuyTotal++;
         if(OrderType()==OP_SELL)
            SellTotal++;
          }    
        }
     }         

      if(SellTotal<1)
        {
 ..........
        }   
     
     if(BuyTotal<1)
       {
 .........
       }

Может ли сие означать торговлю одновременно в обе стороны??? Именно одновременно, а не ждать когда одни ордера на бай допустим закроются и только в этом случае откроются на селл. Нужно чтоб открывались на бай и селл одновременно, но не открываются почему-то, подозрение на малое проскальзывание, которое поставил.

#6491
6 часов назад, diodio сказал:

подозрение на малое проскальзывание, которое поставил

Должно работать в обе стороны.

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

#6492

Доброго времени всем!

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

Что ещё должно быть разным? Не хочется делать мультивалютник и впихивать в него название пар, по коду получается много повторов, могу запутаться)

#6493
3 часа назад, diodio сказал:

то что при этом должно быть разным у каждой пары??? Магик

Не поверишь-название пары, оно же Symbol() :)

#6494

Подскажите, пожалуйста, что нужно добавить или изменить:
Когда индикатор берет значения Current или младших ТФ - линии и текст отображаются ок. А когда из старших ТФ, то текст дублируется на каждом баре. Т.е. если в настройках указан ТФ = H1, а у нас на графике М30, то текст дублируется дважды, когда М15 = 4 раза..


if(price1_0<price_a1&&DistPoint<=price1_4/Point)
{
if(ObjectFind(0,"OOO_LEVEL_UP"+(string)time)!=0)
{
TrendCreate(0,"OOO_LEVEL_UP"+(string)time,0,time,price_abc,time+_Period*60*LineBars,price_abc,
ColorLe1,StyleLe1,WidthLe1,false,false,false,false,true,0);
TextCreate(0,"OOO_tLEVEL_UP"+(string)time,0,time,price_abc,
"LEVEL_UP ("+DoubleToStr(price_abc,Digits)+") ",ColorLe1,ANCHOR_LEFT_LOWER);
}
}

1H.PNG

M30.PNG

M15.PNG

#6495
2 часа назад, sashbek сказал:

текст дублируется дважды

Скорее всего приведенный кусок кода вызывается раз в свечу текущего ТФ графика.

Далее вы пытаетесь найти объект, но делаете странную проверку на 0.

Напишите 

if(ObjrctFinnd(.....)<0)

TrendCreate()

#6496
15 часов назад, usver73 сказал:

Скорее всего приведенный кусок кода вызывается раз в свечу текущего ТФ графика.

Далее вы пытаетесь найти объект, но делаете странную проверку на 0.

Напишите 

if(ObjrctFinnd(.....)<0)

TrendCreate()

К сожалению, проблема осталась прежней.

#6497

тогда нужен весь код, точнее, куски кода, где происходит вызов функций рисования

Изменено 2 ноября, 2021 пользователем usver73

#6498
10 часов назад, usver73 сказал:

тогда нужен весь код, точнее, куски кода, где происходит вызов функций рисования

Спасибо, что откликнулись!
прикрепил файл

etc.mq43 скач.

#6499
8 часов назад, sashbek сказал:

прикрепил файл

у Вас МТФ индикатор (почему-то я подумал, что речь шла о советнике- невнимательно прочел изначальный вопрос).
Проблема в вычислении limit- Вам необходимо учитывать разницу между Period() и TimeFrame1.
Переделывать Ваш код некогда, посмотрите чужие МТФ индикаторы

multi.period.ma22.mq42 скач. mtf_bollinderbands.mq43 скач.

#6500

Всем доброго времени!

Кто может поделиться кусочком грамотного кода, где увеличивается лот при увеличении эквити.

Возможно ее надо сделать как функцию.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025