Инжикатор для парного трейдинга

MQL5 Indicators

Specification

Предлагаю переделать с mql4 на  mql5 индикатор. Текст ниже:

 

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_color2 Blue

#property indicator_width1 2

#property indicator_width2 1

#property indicator_minimum -1

#property indicator_maximum 1


#define TWO_SYMBOLS 2


#define MAX_POINTS 1000000


extern string Symbol1 = "EURUSD";

extern string Symbol2 = "GBPUSD";

extern int Depth = 288;

extern int Shift = 0;

extern double ExpKoef = 0.01;


string Symbols[TWO_SYMBOLS];

double BaseMatrix[TWO_SYMBOLS][MAX_POINTS], MOMatrix[TWO_SYMBOLS][MAX_POINTS];

double CvarMatrix[TWO_SYMBOLS][TWO_SYMBOLS];

double Means[TWO_SYMBOLS], SVector[TWO_SYMBOLS];

int Times[MAX_POINTS], Shifts[TWO_SYMBOLS];

int MatrixRows;

int CurrPos, CurrTime;

double Exp;


double Buffer[], Buffer2[];


datetime GetStartTime( datetime StartTime )

{

  datetime Tmp;

  int Pos;


  for (int i = 0; i < TWO_SYMBOLS; i++)

  {

    Pos = iBarShift(Symbols[i], Period(), StartTime);

    Tmp = iTime(Symbols[i], Period(), Pos);


    if (Tmp > StartTime)

      StartTime = Tmp;

  }


  return(StartTime);

}


double GetPrice( string Symb, int time )

{

  double Price;


  Price = iClose(Symb, Period(), iBarShift(Symb, Period(), time));


  return(Price);

}


int GetNextTime( int CurrTime )

{

  static int Pos[TWO_SYMBOLS];

  int i, MinTime, Tmp = -1;


  for (i = 0; i < TWO_SYMBOLS; i++)

  {

    Pos[i] = iBarShift(Symbols[i], Period(), CurrTime) - 1;


    if (Pos[i] >= 0)

      Tmp = i;

  }


  if (Tmp < 0)

    return(Time[0]);


  MinTime = iTime(Symbols[Tmp], Period(), Pos[Tmp]);


  i = Tmp - 1;


  while (i >= 0)

  {

    if (Pos[i] >= 0)

    {

      Tmp = iTime(Symbols[i], Period(), Pos[i]);


      if (Tmp < MinTime)

        MinTime = Tmp;

    }


    i--;

  }


  return(MinTime);

}


void GetBaseMatrix()

{

  int i, NextTime;


  NextTime = GetNextTime(CurrTime);


  while (NextTime < Time[0])

  {

    CurrTime = NextTime;


    for (i = 0; i < TWO_SYMBOLS; i++)

      BaseMatrix[i][MatrixRows + Shifts[i]] = MathLog(GetPrice(Symbols[i], CurrTime));


    Times[MatrixRows] = CurrTime;


    MatrixRows++;


    NextTime = GetNextTime(CurrTime);

  }


  return;

}


void GetMeans( int Pos, int Len)

{

  int i, j;

  double Sum;


  for (i = 0; i < TWO_SYMBOLS;, i++)

  {

    Sum = 0;


    for (j = Pos; j > Pos - Len; j--)

      Sum += BaseMatrix[i][j];


    Means[i] = Sum / Len;

  }


  return;

}


void GetMOMatrix( int Pos, int Len)

{

  int i, j;


  for (i = 0; i < TWO_SYMBOLS;, i++)

    for (j = Pos; j > Pos - Len; j--)

      MOMatrix[i][j] = BaseMatrix[i][j] - Means[i];


  return;

}


void GetCvarMatrix( int Pos, int Len )

{

  int i, j, k;

  double Cvar;


  GetMeans(Pos, Len);

  GetMOMatrix(Pos, Len);


  for (i = 0; i < TWO_SYMBOLS; i++)

  {

     Cvar = 0;


     for (k = Pos; k > Pos - Len; k--)

       Cvar += MOMatrix[i][k] * MOMatrix[i][k];


     CvarMatrix[i][i] = Cvar / Len;

  }


  Cvar = 0;


  for (k = Pos; k > Pos - Len; k--)

    Cvar += MOMatrix[0][k] * MOMatrix[1][k];


  Cvar /= Len;


  CvarMatrix[0][1] = Cvar;


  return;

}


bool RealSymbol( string Symb )

{

  return(MarketInfo(Symb, MODE_BID) != 0);

}



string iIF( bool Cond, string Str1, string Str2 )

{

  if (Cond)

    return(Str1);


  return(Str2);

}


void init()

{

  Symbols[0] = iIF(Shift < 0, Symbol2, Symbol1);

  Symbols[1] = iIF(Shift < 0, Symbol1, Symbol2);


  Shifts[0] = 0;

  Shifts[1] = MathAbs(Shift);


  for (int i = 0; i < TWO_SYMBOLS; i++)

    if (!RealSymbol(Symbols[i]))

      Symbols[i] = Symbol();


  IndicatorDigits(8);

  SetIndexStyle(0, DRAW_LINE, DRAW_LINE);

  SetIndexBuffer(0, Buffer);

  SetIndexBuffer(1, Buffer2);

  SetIndexLabel(0, "Correlation");

  SetIndexLabel(1, "Exponential (ExpKoef = " + DoubleToStr(ExpKoef, 3) + ")");

  IndicatorShortName("Correlation (" + Depth + " bars): " + Symbols[0] + "(t) && " + Symbols[1] + "(t - " + Shifts[1] + ")");


  CurrTime = GetStartTime(0);

  MatrixRows = 0;


  GetBaseMatrix();


  CurrPos = Depth + Shifts[1];


  GetCvarMatrix(CurrPos - 1, Depth);

  Exp = GetCorrelation();


  return;

}


void GetNextMeans( int Pos, int Len )

{

  int Pos2 = Pos - Len;


  for (int i = 0; i < TWO_SYMBOLS; i++)

  {

    SVector[i] = (BaseMatrix[i][Pos2] - BaseMatrix[i][Pos]) / Len;

    Means[i] -= SVector[i];

  }


  return;

}


void GetNextCvarMatrix2( int Pos, int Len )

{

  int i, j;

  int Pos2 = Pos - Len;

  double Tmp1[TWO_SYMBOLS], Tmp2[TWO_SYMBOLS], Tmp3[TWO_SYMBOLS];


  GetNextMeans(Pos, Len);


  for (i = 0; i < TWO_SYMBOLS; i++)

  {

    Tmp1[i] = SVector[i];

    Tmp2[i] = BaseMatrix[i][Pos] - Means[i];

    Tmp3[i] = BaseMatrix[i][Pos2] - Means[i];


    CvarMatrix[i][i] += Tmp1[i] * Tmp1[i] + (Tmp2[i] * Tmp2[i] - Tmp3[i] * Tmp3[i]) / Len;


    if (CvarMatrix[i][i] < 0)

      CvarMatrix[i][i] = 0;

  }


  CvarMatrix[0][1] += Tmp1[0] * Tmp1[1] + (Tmp2[0] * Tmp2[1] - Tmp3[0] * Tmp3[1]) / Len;


  return;

}


double GetCorrelation()

{

  double Res = 0;

  double Var = MathSqrt(CvarMatrix[0][0] * CvarMatrix[1][1]);


  if (Var != 0)

    Res = CvarMatrix[0][1] / Var;


  return(Res);

}


void start()

{

  static int PrevTime = 0;

  double Corr;

  int Pos;


  if (PrevTime == 0)

  {

    PrevTime = Time[0];


    while (CurrPos < MatrixRows)

    {

      GetNextCvarMatrix2(CurrPos, Depth);


      Corr = GetCorrelation();

      Exp = Corr * ExpKoef + Exp * (1 - ExpKoef);


      Pos = iBarShift(Symbol(), Period(), Times[CurrPos]);

      Buffer[Pos] = Corr;

      Buffer2[Pos] = Exp;


      CurrPos++;

    }

  }


  if (PrevTime != Time[0])

  {

    PrevTime = Time[0];


    GetBaseMatrix();


    while (CurrPos < MatrixRows)

    {

      GetCvarMatrix(CurrPos, Depth);


      Corr = GetCorrelation();

      Exp = Corr * ExpKoef + Exp * (1 - ExpKoef);


      Pos = iBarShift(Symbol(), Period(), Times[CurrPos]);

      Buffer[Pos] = Corr;

      Buffer2[Pos] = Exp;


      CurrPos++;

    }

  }


  return;

Responded

1
Developer 1
Rating
(21)
Projects
49
39%
Arbitration
4
25% / 75%
Overdue
10
20%
Free
2
Developer 2
Rating
(169)
Projects
460
41%
Arbitration
39
18% / 31%
Overdue
193
42%
Free
3
Developer 3
Rating
(13)
Projects
34
76%
Arbitration
1
100% / 0%
Overdue
6
18%
Free
4
Developer 4
Rating
(46)
Projects
73
16%
Arbitration
13
8% / 92%
Overdue
37
51%
Free
5
Developer 5
Rating
(563)
Projects
932
47%
Arbitration
302
59% / 25%
Overdue
124
13%
Busy
6
Developer 6
Rating
(1)
Projects
2
50%
Arbitration
1
0% / 0%
Overdue
0
Free
Similar orders
Нужно доработать утилиту добавить новые функции, изменить интерфейс. Нужен человек имеющий опыт по связи терминала с Телеграм, по средствам Телеграм АПИ, нужно добавить 2 новые функции в утилиту. Подробнее в ТЗ, изменения нужно внести для мт4/5 версии
dify indicator MA_Cloud for mt4 and mt5, give source code with comments 1)Need to change alerts and arrows for cross price only true 2 MA without crossing (direction from small to big) 2)Fix the error when change to any timeframe for MA (disapeer) and for arrows (in history is very big on vertically out of see screenshot) 3)Add alerts for crossing of 2 MA (MA Small cross MA big) Arrows, Message, Sound - (True/False)
Изменить графический интерфейс утилиты, исправить расположение кнопок, изменить вид некоторых окон и добавить новые. Сохранить текущую адаптивность и работоспособность кнопок. Подробнее расскажу в ТЗ с наглядными скриншотами, что и где поменять. Правки нужно внести в МТ4 и МТ5 версии. Спасибо за ваши заявки, рассмотрю каждую
Мне нужен робот, который будет иметь следующие необходимые параметры: 1. робот должен работать на MT5 2. минимальный депозит $100 3. количество транзакций в день на депозит $100 с лотом 0,01 минимум 1000 4. макс прасат 15%
написать индикатор распознования флета. выявления флета из трёх частей проверки. в каждой части свой расчёт, по барам, по количеству поинтов, по ширине (высоте) баров, по минимальным значениям... когда все расчеты сошлись и не вышли из пропорций, тогда рисуется флет. Задание готово, отправлю подходящему кандидату. передача оплаты, когда индикатор будет работать без проблем, по всем параметрам расчетов. возможны не
был старый работоспособный скрипт на очень старом МТ4... есть необходимость переписать его на MQL5, чтобы проверить теоретическую работоспособность в современном мире описание вроде бы где-то сохранилось кто-нибудь сможет помочь с этим вопросом и за какие деньги

Project information

Budget
10- USD
Deadline
to 3 day(s)