Эксперт доделать

Эксперты

Работа завершена

Время выполнения 5 дней

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

Доработать эксперт  для метатрейдера 4

extern double StopLoss   =200;     // SL для открываемого ордера
extern double TakeProfit =39;      // ТР для открываемого ордера
extern int    Period_MA_1=11;      // Период МА 1
extern int    Period_MA_2=31;      // Период МА 2
extern double Rastvor    =28.0;    // Расстояние между МА 
extern double Lots       =0.1;     // Жестко заданное колич. лотов
extern double Prots      =0.07;    // Процент свободных средств
 
bool Work=true;                    // Эксперт будет работать.
string Symb;                       // Название финанс. инструмента
//--------------------------------------------------------------- 2 --
int start()
  {
   int
   Total,                           // Количество ордеров в окне 
   Tip=-1,                          // Тип выбран. ордера (B=0,S=1)
   Ticket;                          // Номер ордера
   double
   MA_1_t,                          // Значен. МА_1 текущее
   MA_2_t,                          // Значен. МА_2 текущее 
   Lot,                             // Колич. лотов в выбран.ордере
   Lts,                             // Колич. лотов в открыв.ордере
   Min_Lot,                         // Минимальное количество лотов
   Step,                            // Шаг изменения размера лота
   Free,                            // Текущие свободные средства
   One_Lot,                         // Стоимость одного лота
   Price,                           // Цена выбранного ордера
   SL,                              // SL выбранного ордера 
   TP;                              // TP выбранного ордера
   bool
   Ans  =false,                     // Ответ сервера после закрытия
   Cls_B=false,                     // Критерий для закрытия  Buy
   Cls_S=false,                     // Критерий для закрытия  Sell
   Opn_B=false,                     // Критерий для открытия  Buy
   Opn_S=false;                     // Критерий для открытия  Sell
//--------------------------------------------------------------- 3 --
   // Предварит.обработка
   if(Bars < Period_MA_2)                       // Недостаточно баров
     {
      Alert("Недостаточно баров в окне. Эксперт не работает.");
      return;                                   // Выход из start()
     }
   if(Work==false)                              // Критическая ошибка
     {
      Alert("Критическая ошибка. Эксперт не работает.");
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
//--------------------------------------------------------------- 5 --
   // Торговые критерии
   MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_1
   MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_2
 
   if (MA_1_t > MA_2_t + Rastvor*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1_t < MA_2_t - Rastvor*Point)         // Если разница между
     {                                          // ..МА 1 и 2 большая
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
//--------------------------------------------------------------- 6 --
   // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
 
      if (Tip==1 && Cls_S==true)                // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert("Попытка закрыть Sell ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Ask,2);      // Закрытие Sell
         if (Ans==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Sell ",Ticket);
            break;                              // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }
//--------------------------------------------------------------- 7 --
   // Стоимость ордеров
   RefreshRates();                              // Обновление данных
   Min_Lot=MarketInfo(Symb,MODE_MINLOT);        // Миним. колич. лотов 
   Free   =AccountFreeMargin();                 // Свободн средства
   One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
   Step   =MarketInfo(Symb,MODE_LOTSTEP);       // Шаг изменен размера
 
   if (Lots > 0)                                // Если заданы лоты,то 
      Lts =Lots;                                // с ними и работаем 
   else                                         // % свободных средств
      Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытия
 
   if(Lts < Min_Lot) Lts=Min_Lot;               // Не меньше минимальн
   if (Lts*One_Lot > Free)                      // Лот дороже свободн.
     {
      Alert(" Не хватает денег на ", Lts," лотов");
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------- 8 --
   // Открытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Total==0 && Opn_B==true)              // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=Bid - New_Stop(StopLoss)*Point;     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      if (Total==0 && Opn_S==true)              // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         SL=Ask + New_Stop(StopLoss)*Point;     // Вычисление SL откр.
         TP=Ask - New_Stop(TakeProfit)*Point;   // Вычисление TP откр.
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Открытие Sel
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Sell ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ф-ия обработ ошибок
  {
   switch(Error)
     {                                          // Преодолимые ошибки            
      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 135:Alert("Цена изменилась. Пробуем ещё раз..");
         RefreshRates();                        // Обновим данные
         return(1);                             // Выход из функции
      case 136:Alert("Нет цен. Ждём новый тик..");
         while(RefreshRates()==false)           // До нового тика
            Sleep(1);                           // Задержка в цикле
         return(1);                             // Выход из функции
      case 137:Alert("Брокер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
         Sleep(500);                            // Простое решение
         return(1);                             // Выход из функции
         // Критические ошибки
      case  2: Alert("Общая ошибка.");
         return(0);                             // Выход из функции
      case  5: Alert("Старая версия терминала.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 64: Alert("Счет заблокирован.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 133:Alert("Торговля запрещена.");
         return(0);                             // Выход из функции
      case 134:Alert("Недостаточно денег для совершения операции.");
         return(0);                             // Выход из функции
      default: Alert("Возникла ошибка ",Error); // Другие варианты   
         return(0);                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr)                      // Проверка стоп-прик.
  {
   int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Миним. дистанция
   if (Parametr < Min_Dist)                     // Если меньше допуст.
     {
      Parametr=Min_Dist;                        // Установим допуст.
      Alert("Увеличена дистанция стоп-приказа.");
     }
   return(Parametr);                            // Возврат значения
  }
//-------------------------------------------------------------- 12 --

в этот эксперт вставить некоторые детали:
алгоритм такой:
покупает начальное количество лотов,
если срабатывает стоп лосс ,покупает другое количество лотов,срабатывает стоп лосс ,эксперт покупает другое количество лотов
и так далее,до 15-го порядка.Если срабатывает тэйк профит-начинает сначала-покупает начальное количество лотов.
количество лотов можно менять на любом этапе(порядке). Заранее спасибо.





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

1
Разработчик 1
Оценка
(254)
Проекты
572
36%
Арбитраж
64
20% / 58%
Просрочено
147
26%
Свободен
2
Разработчик 2
Оценка
(8)
Проекты
38
47%
Арбитраж
6
33% / 50%
Просрочено
10
26%
Свободен
3
Разработчик 3
Оценка
(548)
Проекты
825
73%
Арбитраж
15
53% / 13%
Просрочено
193
23%
Работает
4
Разработчик 4
Оценка
(10)
Проекты
28
14%
Арбитраж
4
0% / 50%
Просрочено
7
25%
Свободен
5
Разработчик 5
Оценка
(71)
Проекты
254
53%
Арбитраж
16
50% / 38%
Просрочено
83
33%
Свободен
Похожие заказы
Рассматриваю любые устойчивые системы с высоким KPI, от супер агрессивных с доходностью 50%-100% в месяц ( слив не чаще чем раз 12 месяцев ) , до супер консервативных с доходностью 15%-20% в год при просадке не более 2%-4% и наличием SL или Stop Out / С возможностью доработка под ТЗ или покупка готового решения
Нужен советник который можно установить на МТ5, функции которые требуются; 1) отключать возможность торговать если трейдер допустил просадку в -2% от депозита (уровень просадки админ может менять) 2) отключать возможность торговать если трейдер сделал тейк на более чем 10% от депозита (уровень тейка админ может менять) функция торговли автоматически отключается на 24 часа, также админ может включать функцию. Доп.инфу
#### Описание задачи: Необходимо разработать торгового бота на языке программирования MQL4 для работы в терминале MetaTrader 4. Бот должен использовать уровни, нанесенные на график с помощью объектов типа `trendline` и `rectangle`, и работать согласно заданным правилам. #### Правила работы бота: 1. **Определение уровней**: - Объекты `trendline` и `rectangle` имеют строку в поле `Имя`, содержащую команду для бота
Есть советник MT 5 для Мосбиржи с простой стратегией основанной на двух скользящих средних: на нижней МА покупка, на верхней МА продажа. Нужно исправить две вещи: 1. Сейчас на покупку выставляются лимитные ордера, а продажа набранной позиции осуществляется тейк-профитом. Нужно изменить советник, так, чтобы закрывалась позиция также лимитным ордером, а не тейк-профитом. Здесь нужно учесть что закрытие может быть
Есть советник, нужно только поменять название,описание, сделать привязку к счету, чтобы была защита,чтобы мы могли клиенту давать советник, и была привязка к 1-3 счетам только. Если возможно , сделать привязку к времени, чтобы была привязка лицензии еще на время, например на месяц, 2-3 по ценам договоримся отдельно
Нужен эксперт который будет проверять есть ли интернет соединение, есть ли связь с брокером, есть ли обновления котировок если нет то реконнект аккаунта через интервал времини. терминалов можеть быть дестяки открыто в каждом терминале свой реконнект MQL5 expert цена вопросы? конверт mql5 на mql5 смотреть файл
Нужен советник который может скачать файл с любым расширением (png, jpg, exe и т.д.) по заданной ссылке и сохранить в указанную папку. Без использования сторонних библиотек, только WinAPI. Файл советника нужен с открытым исходным кодом
Куплю Вашего прибыльного советника дорого Должна быть возможность протестировать его на истории и реальные статистические показатели РЕАЛЬНОГО счета Желательно не мартингейл, после тестирования и предоставления статистики счета предложу свою цену
Тех задания 1. Открывает сделки по сигналу индикатора. Перед открытием смотреть на фильтр и если фильтр тоже в этом направлении то открывает сделку если фильтр показывает тренд в противоположенную сторону то не открывает сделку. 2. Можно было выбирать торговлю но БООМ или КРАШ. 3. Стоплос 2 типа по пипсам и по кирпичикам. (при закрытие по кирпичикам если фильтр меняет тренд то задаем N кирпичиков после смени тренда
Необходимо разработать ПО для торговли на финансовых рынках с возможностью подключения к различным брокерам и управлением торговыми операциями по нашим сигналам. Сигналы поступают в табличку формата .csv, которая находится на удаленном сервере. Видим это примерно так: в нашу таблицу поступает сигнал negative (на продажу) или positive (на покупку) актива. Клиент получает этот сигнал и заданным количеством лотов

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

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