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

MQL5 Göstergeler

İş Gereklilikleri

Предлагаю переделать с 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;

Yanıtlandı

1
Geliştirici 1
Derecelendirme
(21)
Projeler
49
39%
Arabuluculuk
4
25% / 75%
Süresi dolmuş
10
20%
Serbest
2
Geliştirici 2
Derecelendirme
(169)
Projeler
460
41%
Arabuluculuk
39
18% / 31%
Süresi dolmuş
193
42%
Serbest
3
Geliştirici 3
Derecelendirme
(13)
Projeler
34
76%
Arabuluculuk
1
100% / 0%
Süresi dolmuş
6
18%
Serbest
4
Geliştirici 4
Derecelendirme
(46)
Projeler
73
16%
Arabuluculuk
13
8% / 92%
Süresi dolmuş
37
51%
Serbest
5
Geliştirici 5
Derecelendirme
(563)
Projeler
932
47%
Arabuluculuk
302
59% / 25%
Süresi dolmuş
124
13%
Meşgul
6
Geliştirici 6
Derecelendirme
(1)
Projeler
2
50%
Arabuluculuk
1
0% / 0%
Süresi dolmuş
0
Serbest
Benzer siparişler
Нужно доработать утилиту добавить новые функции, изменить интерфейс. Нужен человек имеющий опыт по связи терминала с Телеграм, по средствам Телеграм АПИ, нужно добавить 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, чтобы проверить теоретическую работоспособность в современном мире описание вроде бы где-то сохранилось кто-нибудь сможет помочь с этим вопросом и за какие деньги

Proje bilgisi

Bütçe
10- USD
Son teslim tarihi
to 3 gün