Скрипт из МТ4 в МТ5

 

Добрый день. 
Есть добрые люди кто может перенести скрипт из MT4 в MT5
Суть простая.
Перетянул на график, получаешь три линии
Желтая цена по которой будем ставить
Красная стоп лосс
Зеленая тейк
Линии соответственно можно двигать для удобного выбора цены и целей.
Так же есть два поля для указания объема ордера, комментария к ордеру и кнопка "ОК" по нажатию которой все это дело устанавливается.


На MT4 работает прекрасно 

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с...
Файлы:
buy_stop.mq4  11 kb
 
Evgeny Fedorenko:

Добрый день. 
Есть добрые люди кто может перенести скрипт из MT4 в MT5
Суть простая.
Перетянул на график, получаешь три линии
Желтая цена по которой будем ставить
Красная стоп лосс
Зеленая тейк
Линии соответственно можно двигать для удобного выбора цены и целей.
Так же есть два поля для указания объема ордера, комментария к ордеру и кнопка "ОК" по нажатию которой все это дело устанавливается.


На MT4 работает прекрасно  

Если хочется побыстрее то сюда 

https://www.mql5.com/ru/job

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • 2024.10.04
  • www.mql5.com
Самый большой фриланс c разработчиками программ на MQL5
 
Evgeny Fedorenko:

Добрый день. 
Есть добрые люди кто может перенести скрипт из MT4 в MT5
Суть простая.
Перетянул на график, получаешь три линии
Желтая цена по которой будем ставить
Красная стоп лосс
Зеленая тейк
Линии соответственно можно двигать для удобного выбора цены и целей.
Так же есть два поля для указания объема ордера, комментария к ордеру и кнопка "ОК" по нажатию которой все это дело устанавливается.


На MT4 работает прекрасно 

вот

//+------------------------------------------------------------------+
//|                                                      BuyStop.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                       https://www.mql5.com       |
//+------------------------------------------------------------------+
#property script_show_inputs
#define Ask SymbolInfoDouble(_Symbol,SYMBOL_ASK)
#include <Trade\Trade.mqh>
CTrade         mTrade;

input double DefaultLotSize = 0.03; // Исходный размер лота
input int Slippage = 3; // Допустимое проскальзывание
//+------------------------------------------------------------------+
void OnStart()
  {
   mTrade.SetDeviationInPoints(Slippage);
// Установка линий
   double buyStopPrice = 0;
   double takeProfitPrice = 0;
   double stopLossPrice = 0;
   string orderComment = "";

// Создание линии Buy Stop
   if(ObjectFind(0, "BuyStopLine") < 0)
     {
      buyStopPrice = NormalizeDouble(Ask + 20 * _Point, _Digits);
      ObjectCreate(0, "BuyStopLine", OBJ_HLINE, 0, iTime(_Symbol, PERIOD_CURRENT, 0), buyStopPrice);
      ObjectSetInteger(0, "BuyStopLine", OBJPROP_COLOR, clrYellow);
      ObjectSetInteger(0, "BuyStopLine", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSetInteger(0, "BuyStopLine", OBJPROP_SELECTABLE, true);
      ObjectSetInteger(0, "BuyStopLine", OBJPROP_SELECTED, true);
     }

// Создание линии Take Profit
   if(ObjectFind(0, "TakeProfitLine") < 0)
     {
      takeProfitPrice = NormalizeDouble(buyStopPrice + 20 * _Point, _Digits); // Устанавливаем выше buyStopPrice
      ObjectCreate(0, "TakeProfitLine", OBJ_HLINE, 0, iTime(_Symbol, PERIOD_CURRENT, 0), takeProfitPrice);
      ObjectSetInteger(0, "TakeProfitLine", OBJPROP_COLOR, clrLime);
      ObjectSetInteger(0, "TakeProfitLine", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSetInteger(0, "TakeProfitLine", OBJPROP_SELECTABLE, true);
      ObjectSetInteger(0, "TakeProfitLine", OBJPROP_SELECTED, true);
     }

// Создание линии Stop Loss
   if(ObjectFind(0, "StopLossLine") < 0)
     {
      stopLossPrice = NormalizeDouble(buyStopPrice - 40 * _Point, _Digits); // Устанавливаем ниже buyStopPrice
      ObjectCreate(0, "StopLossLine", OBJ_HLINE, 0, iTime(_Symbol, PERIOD_CURRENT, 0), stopLossPrice);
      ObjectSetInteger(0, "StopLossLine", OBJPROP_COLOR, clrRed);
      ObjectSetInteger(0, "StopLossLine", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSetInteger(0, "StopLossLine", OBJPROP_SELECTABLE, true);
      ObjectSetInteger(0, "StopLossLine", OBJPROP_SELECTED, true);
     }

// Создание поля для лота
   if(ObjectFind(0, "LotEdit") < 0)
     {
      ObjectCreate(0, "LotEdit", OBJ_EDIT, 0, 0, 0);
      ObjectSetInteger(0, "LotEdit", OBJPROP_CORNER, 0);
      ObjectSetInteger(0, "LotEdit", OBJPROP_XDISTANCE, 10);
      ObjectSetInteger(0, "LotEdit", OBJPROP_YDISTANCE, 20);
      ObjectSetInteger(0, "LotEdit", OBJPROP_WIDTH, 80); // Ширина для 20 символов
      ObjectSetString(0, "LotEdit", OBJPROP_TEXT, DoubleToString(DefaultLotSize, 2)); // Округление до сотых
     }

// Создание текстового поля для комментария
   if(ObjectFind(0, "CommentEdit") < 0)
     {
      ObjectCreate(0, "CommentEdit", OBJ_EDIT, 0, 0, 0);
      ObjectSetInteger(0, "CommentEdit", OBJPROP_CORNER, 0);
      ObjectSetInteger(0, "CommentEdit", OBJPROP_XDISTANCE, 80); // Отступ от поля лота
      ObjectSetInteger(0, "CommentEdit", OBJPROP_YDISTANCE, 20);
      ObjectSetInteger(0, "CommentEdit", OBJPROP_WIDTH, 320); // Увеличенная ширина для комментария
     }

// Создание кнопки "ОК"
   if(ObjectFind(0, "OkButton") < 0)
     {
      ObjectCreate(0, "OkButton", OBJ_BUTTON, 0, 0, 0);
      ObjectSetString(0, "OkButton", OBJPROP_TEXT, "OK");
      ObjectSetInteger(0, "OkButton", OBJPROP_CORNER, 0);
      ObjectSetInteger(0, "OkButton", OBJPROP_XDISTANCE, 150); // Расположить кнопку справа от полей
      ObjectSetInteger(0, "OkButton", OBJPROP_YDISTANCE, 20);
      ObjectSetInteger(0, "OkButton", OBJPROP_WIDTH, 50);
     }

// Основной цикл
   while(!IsStopped())
     {
      // Проверка нажатия кнопки "ОК"
      if(ObjectGetInteger(0, "OkButton", OBJPROP_STATE) == 1)
        {
         // Получение лота и комментария
         double lotSize = StringToDouble(ObjectGetString(0, "LotEdit", OBJPROP_TEXT));
         lotSize = NormalizeDouble(lotSize, 2); // Округление лота до сотых
         orderComment = ObjectGetString(0, "CommentEdit", OBJPROP_TEXT);

         // Получение цен линий
         buyStopPrice = ObjectGetDouble(0, "BuyStopLine", OBJPROP_PRICE);
         takeProfitPrice = ObjectGetDouble(0, "TakeProfitLine", OBJPROP_PRICE);
         stopLossPrice = ObjectGetDouble(0, "StopLossLine", OBJPROP_PRICE);

         // Проверка корректности цен
         if(buyStopPrice > Ask && takeProfitPrice > buyStopPrice && stopLossPrice < buyStopPrice)
           {
            // Normalize prices to the correct number of decimal places
            buyStopPrice = NormalizeDouble(buyStopPrice, _Digits);
            takeProfitPrice = NormalizeDouble(takeProfitPrice, _Digits);
            stopLossPrice = NormalizeDouble(stopLossPrice, _Digits);

            // Открытие ордера Buy Stop
            mTrade.BuyStop(lotSize, buyStopPrice, _Symbol, stopLossPrice, takeProfitPrice, 0, 0, orderComment);
            ulong ticket = mTrade.ResultOrder();

            if(ticket <= 0)
              {
               Print("Ошибка открытия ордера: ", GetLastError());
              }
            else
              {
               Print("Buy Stop ордер открыт: ", ticket);
              }

            // Удаляем линии и кнопку после открытия ордера
            ObjectDelete(0, "BuyStopLine");
            ObjectDelete(0, "TakeProfitLine");
            ObjectDelete(0, "StopLossLine");
            ObjectDelete(0, "OkButton");
            ObjectDelete(0, "CommentEdit");
            ObjectDelete(0, "LotEdit");
           }
         else
           {
            Print("Некорректные цены для открытия ордера.");
           }
         break;
        }
      Sleep(100);
     }
  }
//+------------------------------------------------------------------+
Файлы:
buy_stop.mq5  13 kb
 
Aleksandr Slavskii #:

вот

Александр, огромное спасибо. 
очень выручили. 

 

посмотрите  VirtualTradePad One Click Trading Panel в маркете.

в бесплатной(!) версии почти всё необходимое есть - в том числе установка таких ордеров.

 

чтобы не создавать новую тему - может кто сможет и такое на мт5 переписать:

линия по средней цене ордеров (отдельно на покупку и продажу для хеджсчетов)

//+------------------------------------------------------------------+
//|                                         Middle_Order_Price_5.mq4 |
//|                                                         StSpirit |
//|                                                                  |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                           Middle_Order_Price.mq4 |
//|                                                         StSpirit |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "StSpirit"
#property link      ""

#property indicator_chart_window

extern color LineColor = Magenta;              //цвет линии
extern int LineWidth = 2;                      //толщина линии

extern bool Text_With_Line = true;             //включить или выключить подпись к линии
extern string Text="Middle Order Price";       //текст подписи к линии
extern color TextColor = Violet;               //цвет шрифта подписи к линии
extern int FontSize = 8;                       //размер шрифта подписи к линии

string LineName = "Middle_Order_Price";        //название линии
string TextName = "Text_MOP";                  //название метки с текстом


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
  
  void OrderMiddleLine(string Name, double Value)
   {
   string objectName = Name;
   if(ObjectFind("Middle_Order_Price")!=0)// такого объекта нет
      {
   ObjectCreate(objectName, OBJ_HLINE, 0, 0, Value);
   ObjectSet(objectName, OBJPROP_COLOR, LineColor);
   ObjectSet(objectName, OBJPROP_WIDTH, LineWidth);
   ObjectSet(objectName, OBJPROP_BACK, true);
      }
   else  // объект есть, передвигаем его
      {
      ObjectMove(objectName, 0, Time[0],Value);
      }
   return(0);
  }

    void LineText(string Name, double MOP)
   {
   string objectName = Name;
   if(ObjectFind("Text_MOP")!=0)// такого объекта нет
      {
      ObjectCreate(objectName, OBJ_TEXT, 0, Time[5],MOP);
      ObjectSetText(objectName, Text, FontSize, "Arial", TextColor); //параметры вывода объекта
      ObjectSet(objectName, OBJPROP_BACK, true);
      }
   else  // объект есть, передвигаем его
      {
      ObjectMove(objectName, 0, Time[5],MOP);
      }
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete(LineName);
   ObjectDelete(TextName);
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  double a=0, b=0, price_ask=0, price_bid=0;
//----

   if (OrdersTotal()!=0)
      {
      for (int i = 0; i < OrdersTotal(); i++)
         {
         if (OrderSelect(i, SELECT_BY_POS)==true)
            {
            if (OrderSymbol() == Symbol())
               {
               if (OrderType() == OP_BUY)
                  {
                  price_ask = price_ask + OrderOpenPrice() * OrderLots();
                  a = a + OrderLots();
                  }
            
               if (OrderType() == OP_SELL)
                  {
                  price_bid = price_bid + OrderOpenPrice() * OrderLots();
                  b = b + OrderLots();
                  }
               }
            }
         }
      }
      if (a==0 && b==0)
         {
         ObjectDelete(LineName);
         ObjectDelete(TextName);
         Comment("AVERAGE NONE");       
         }
      if (a != 0)
         {
         Comment("AVERAGE"," BUY = ",a," : ",DoubleToStr(price_ask/a,6));
         OrderMiddleLine(LineName, price_ask/a);
         if (Text_With_Line!=false) LineText(TextName, price_ask/a);
         a=0;
         price_ask=0;
         }
      if (b != 0)
         {
         Comment("AVERAGE"," SELL = ",b," : ", DoubleToStr(price_bid/b,6));
         OrderMiddleLine(LineName, price_bid/b);
         if (Text_With_Line!=false) LineText(TextName, price_bid/b);
         b=0;
         price_bid=0;
         
         
/*         if (OrdersTotal()==0)
            {
            ObjectDelete(LineName);
            ObjectDelete(TextName);                   
            }*/

  }

//----
   return(0);
  }
//+------------------------------------------------------------------+


Очень хочется) буду премного благодарен.