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

 
Sergei Tarasov #:
вот эту первую часть из вашего ответа в какую часть кода нужно прописать

Никуда, это из справки

Эту строку поправте

 ct.PositionOpen(Symbol(), ORDER_TYPE_SELL, Lot, currentPrice, 0, 0,comment); 
 
Tretyakov Rostyslav #:

Здесь помогают, а не делают за Вас.

Покажите что уже Вы сделали и Вам помогут.

Я и не прошу сделать. Если у кого-то есть код с учётом перерывов в торговле, то могут скинуть. Если нет, то просто привести в пример, как использовать. Где я просил сделать что-то? Временной отрезок я выбрал случайно, просто для примера
 
Здравствуйте! Запускаю этот код в тестере и он создает эти линии только на историческом графике в режиме генерации тиков линии перестают создаваться. В MQL4 все работает, а в MQL5 - нет. Подскажите пожалуйста, как это можно исправить?
           if(a<1 && high[bar] > MA_Buffer[bar] && low[bar] < MA_Buffer[bar]){
           a=bar;
           }    
            if(a>0&&time[a]<time[bar] && low[bar] < low[bar+1]&& high[bar] > high[bar+1])
              {
               b=bar;
             }
         if(a>0&&b>0)
        {    
         if(a-b<=8)  ObjectCreate(0,"Line"+bar,OBJ_TREND,0,time[a],high[a],time[b],high[b]);
           a=0; b=0;
           }
 
duologue #:
Также после проведения оптимизации, я запускаю одиночное тестирование полученных конфигураций настроек советника - и они никогда не сходяться. Настолько, что конфигурация которая была на 10 месте в оптимизаторе, в рамках одиночного теста показывает результаты лучше, нежели конфигурация находящаяся на первом месте оптимизатора. 

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

 
Tretyakov Rostyslav #:

Большое, прибольшое  Вам спасибо.

Получилось очень круто.

 
Игорь #:

Получилось очень круто.

Было бы еще круче если вырезать цитируемую портянку. )))

 
Grigori.S.B #:

Было бы еще круче если вырезать цитируемую портянку. )))

Извините забыл убрать. Но получилось круто.

сдвоенны зиг-заг

 
Игорь #:
Извините забыл убрать.

На будущее, код вставляйте через кнопку


 

Прошу помочь с iStdDevOnArray для мт5

Функция для мт5 есть, но она без выбора методов сглаживания, простая MODE_SMA

Как сделать функцию универсальной с выбором сглаживания, что добавить?

Как минимум, помогите добавить MODE_LWMA

MODE_SMA

0

Простое усреднение

MODE_EMA

1

Экспоненциальное усреднение

MODE_SMMA

2

Сглаженное усреднение

MODE_LWMA

3

Линейно-взвешенное усреднение


//+------------------------------------------------------------------+
// Сейчас код работает в мт4 и мт5, но без выбора метода
//
#property indicator_separate_window
#property strict
#property indicator_buffers    3
#property indicator_plots      3
#property indicator_type1      DRAW_LINE
#property indicator_type2      DRAW_LINE
#property indicator_type3      DRAW_LINE
#property indicator_type4      DRAW_NONE
#property indicator_color1     clrLimeGreen
#property indicator_color2     clrRed
#property indicator_color3     clrRed
#property indicator_color4     clrNONE


input int             BandPeriod     = 55;
input ENUM_MA_METHOD  BandMAMode     = MODE_LWMA;
input double          BandMultiplier = 2;


double BuffC[];
double BuffU[];
double BuffD[];
double temp[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
{
  IndicatorBuffers(4);
  SetIndexBuffer(0,BuffC);
  SetIndexBuffer(1,BuffU);
  SetIndexBuffer(2,BuffD);
  SetIndexBuffer(3,temp,INDICATOR_CALCULATIONS);
  return(INIT_SUCCEEDED);
}

#include <MovingAverages.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 = MathMin(rates_total-prev_calculated,rates_total-BandPeriod-1);
  for(int i=limit; i>=0; i--) {
    temp[i] = iRSI(NULL,0,BandPeriod,PRICE_CLOSE,i);
  }
  //--
  for(int i=limit; i>=0; i--) {
    //-
    double deviation = StdDevOnArray(temp, BandPeriod, BandMAMode, i);
 // double deviation = iStdDevOnArray(temp,0,BandPeriod,0,BandMAMode,i); МТ4
    double   average = LWMA(rates_total,temp,BandPeriod,i); //(MT4)iMAOnArray(temp,0,BandPeriod,0,BandMAMode,i);
    BuffU[i] = average+BandMultiplier*deviation;
    BuffD[i] = average-BandMultiplier*deviation;
    BuffC[i] = average;
  }
  return (rates_total);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double StdDevOnArray(double &arr[], int period, ENUM_MA_METHOD method, int s)
{ // method?
  int elements=period;
  double mean=0;
  for (int i=s; i<s+elements; i++) {
    mean+=arr[i];
  }
  mean/=elements;
  double mdev2sum=0;
  for (int i=s; i<s+elements; i++) {
    mdev2sum+=pow(arr[i]-mean,2);
  }
  return sqrt(mdev2sum/elements);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LWMA(const int rates_total,const double &array_src[],const int period,const int shift)
{
  if(period<1 || shift>rates_total-period-1)
    return 0;
  double sum=0;
  double weight=0;
  for(int i=0; i<period; i++) {
    weight+=(period-i);
    sum+=array_src[shift+i]*(period-i);
  }
  return(weight>0 ? sum/weight : 0);
}
//+------------------------------------------------------------------+

Спасибо!

 

Мне нужно, чтоб на одном торговом инструменте был запущен только один эксперт.

Задача, проверить все открытые графики на наличие запущенных экспертов.

Написал функцию. Работает. Но получилось как то монструозно. Может у кого есть более красивое решение, поделитесь пожалуйста..

void ChartExpert()
  {
   long chart_id = ChartFirst();
   for(int j = 0; j < CHARTS_MAX; j++)
     {
      if(chart_id != ChartID())
         if(ChartSaveTemplate(chart_id, "\\Files\\" + __FILE__ + ".tpl"))
           {
            short data[];
            FileLoad(__FILE__ + ".tpl", data);
            string str = ShortArrayToString(data);
            if(StringFind(str, "<expert>") >= 0)
               if(ChartSymbol(chart_id) == _Symbol)
                  Print("Ой бедаа, насяльника :(");
            FileDelete(__FILE__ + ".tpl");
           }
      chart_id = ChartNext(chart_id);
      if(chart_id < 0)
         break;
     }
  }