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

MQL5 Индикаторы

Техническое задание

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

Откликнулись

1
Разработчик 1
Оценка
(21)
Проекты
49
39%
Арбитраж
4
25% / 75%
Просрочено
10
20%
Свободен
2
Разработчик 2
Оценка
(169)
Проекты
460
41%
Арбитраж
39
18% / 31%
Просрочено
193
42%
Свободен
3
Разработчик 3
Оценка
(13)
Проекты
34
76%
Арбитраж
1
100% / 0%
Просрочено
6
18%
Свободен
4
Разработчик 4
Оценка
(46)
Проекты
73
16%
Арбитраж
13
8% / 92%
Просрочено
37
51%
Свободен
5
Разработчик 5
Оценка
(563)
Проекты
932
47%
Арбитраж
301
59% / 25%
Просрочено
124
13%
Работает
6
Разработчик 6
Оценка
(1)
Проекты
2
50%
Арбитраж
1
0% / 0%
Просрочено
0
Свободен
Похожие заказы
Необходимо конвертировать индикатор в Mql5. Индикатор должен индентично работать иметь тот же функционал. Ссылка на индикатор а скриншоте . Планирую конвертировать в общей сложности 5 индикаторов. Надеюсь на продолжительное сотрудничество. Опыт в конвертации обязателен. Скриншот в приложении
Необходимо написать индикатор и торговую стратегию по алгоритму (на мой взгляд алгоритм сложный) на pine script. Кратко: На часовом графике будут искаться точки остановки движения, и устанавливаться уровни. на м5 при подходе к этим уровням, будут искаться точки входа по алгоритму. ТЗ с полным алгоритмом вышлю
Есть советник, нужно только поменять название,описание, сделать привязку к счету, чтобы была защита,чтобы мы могли клиенту давать советник, и была привязка к 1-3 счетам только. Если возможно , сделать привязку к времени, чтобы была привязка лицензии еще на время, например на месяц, 2-3
Приобрету готовый продукт, стратегию на pine TradingView или уже переведенный на python , который имеет 1.5-2+ профит фактор. Желательно чтобы торговля осуществлялась и в длинную, и в короткую. Робот обязательно должен контролировать риски, соответственно иметь SL ( не динамический!) на каждую сделку и не иметь огромных просадок (не в эквити, ни на чистом балансе). Просадки MDD выше 30% при оптимальных настройках
1. Понимание экспоненциальной и линейной функций: - Экспоненциальная функция имеет вид: y = a * b^x, где a - начальное значение, b - основание экспоненты. - Линейная функция имеет вид: y = mx + b, где m - коэффициент наклона, b - свободный член. 2. Определение целевых значений: - Необходимо определить, к каким значениям на линейном графике должны соответствовать точки на экспоненциальном графике. 3. Решение
Нужен скрипт или советник. В программе заложены будут как сигналы так и данные индикаторов. В этом скрипте/советнике или возможно программе, будут различные индикаторы такие как Стохастик, RSI,RVI, MACD, Momentum, MFI, OBV, A/D, а также несколько Muving, BollingerB, ParabolicSAR, Semafor, также учитываться точки Pivot, линии тренда и уровни поддержки/сопротивления. Необходимо чтобы вышеуказанные индикаторы давали
требуется организовать копирование сигналов с телеграмм канала в платформу Metatrader4 бюджет обсуждаем до 100$ - в закрытый телеграмм канал поступает информация с сигналами #EURUSD BUY TP нужно чтобы в мт4 автоматически открылась сделка с данными параметрами
В качестве кнопок будет использоваться стандартный текстовой объект LABEL. При помощи команд (через ХотКеи) за каждой кнопкой будет закреплен необходимый графический объект со всеми нужными параметрами. Кнопки планируется создавать для объектов - V . Line , H . Line , Tr . Line , Rectangle , Text , Ellipse , Fibo. Создание объекта на графке через кнопку будет происходить в 2 шага: 1) Нажали на кнопку + команда ХотКей

Информация о проекте

Бюджет
10- USD
Сроки выполнения
до 3 дн.