Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1418

 

Всем привет,

Вопрос следующий.

Есть файл csv с сигналами 1 и 0 на покупку и продажу. Можете ли посоветовать код простого советника для бэктеста, чтобы просто прикрутить ТП СЛ и этот файл? А то ради такой простой задачи изучать MQL5 не очень хочется.

Заранее спасибо.  

 
Здравствуйте ! Я не новичек, но удивило, как чайника, постороннее управление моими стоплоссами трейлинг стопа в торговом терминале MT5. Торгую вручную, с установкой трейлинг стопа и вот, при знакомстве с торговым терминалом MetaQuotes, на демосчету, моя давно отработанная у других брокеров торговая система, начала закрывать сделки самостоятельно... все в случайном порядке, никакой закономерности. Я уже и перебрал параметры, вообразив скачки котировки, при нерасторопности торгового сервера. Высиживать в засаде, выжидая такое неплановое закрытие стоплосса трейлингстопа, тоже не получается, зверь оказался хитрее меня) Если кому то, из более опытных трейдеров, это знакомо, просветите плиз ? Или предположите что это может быть ? Брокеров с МТ5 не так много, а сама система просто несопоставима с МТ4, хочется освоить торговый терминал МТ5 и этого брокера. СПАСИБО.
 
Rustam Ayupov #:
Здравствуйте ! Я не новичек, но удивило, как чайника, постороннее управление моими стоплоссами трейлинг стопа в торговом терминале MT5. Торгую вручную, с установкой трейлинг стопа и вот, при знакомстве с торговым терминалом MetaQuotes, на демосчету, моя давно отработанная у других брокеров торговая система, начала закрывать сделки самостоятельно... все в случайном порядке, никакой закономерности. Я уже и перебрал параметры, вообразив скачки котировки, при нерасторопности торгового сервера. Высиживать в засаде, выжидая такое неплановое закрытие стоплосса трейлингстопа, тоже не получается, зверь оказался хитрее меня) Если кому то, из более опытных трейдеров, это знакомо, просветите плиз ? Или предположите что это может быть ? Брокеров с МТ5 не так много, а сама система просто несопоставима с МТ4, хочется освоить торговый терминал МТ5 и этого брокера. СПАСИБО.

3. запретите DLL и удалите все непонятные вам индикаторы и советники

2. в личном кабинете DC, отключитесь от всяких групп, сигналов, консультантов, и всего подобного.

1. смените пароли торговых счетов

 

 

А как правильно воспользоваться  OnSetColorBackground для объекта CButton? Мне нужно из OnTick разукрашивать кнопку в зависимости от условий. Никакого нажатия на кнопку не предполагается.

Объявляю и использую функцию "раскраски" в таком виде: 


public:
bool              OnSetClrButtonMA(void);

---------------

bool CControlsDialog::OnSetClrButtonMA(void)
  {
   if(CL>MA)
      m_button_MA.ColorBackground(colBtn_Pos);
   else
      m_button_MA.ColorBackground(colBtn_Neg);
     return(true);
  }

void OnTick{
................

	OnSetClrButtonMA();

}

Может есть какой то пример, где в коде такое реализуется? В библиотеке не нашел.

Документация по MQL5: Стандартная библиотека / Панели и диалоги / CButton / OnSetColorBackground
Документация по MQL5: Стандартная библиотека / Панели и диалоги / CButton / OnSetColorBackground
  • www.mql5.com
OnSetColorBackground - CButton - Панели и диалоги - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Здравствуйте! 

Не подскажите, почему скрипт для изменения стоп-лосса не работает и выдает ошибку 4756?

При этом точно такой же скрипт для изменения тейк-профита прекрасно работает.

//+------------------------------------------------------------------+
//|                                                    Modify SL.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
#property description "Скрипт"
#property script_show_inputs
input  int Magic_Number = 0;
input double Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------
MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
MqlDateTime tm;
//--------------------------------------------------------------------
void OnStart()
{  
   double Position_SL;
   ulong  Position_Magic = 0;
   for(int i=0; i<PositionsTotal(); i++)
   {
      if(_Symbol == PositionGetSymbol(i))
      {
         Position_Magic = PositionGetInteger(POSITION_MAGIC);
         if(Position_Magic == Magic_Number)
         {
            ZeroMemory(request);
            ZeroMemory(result);
            request.position = PositionGetInteger(POSITION_TICKET);
            Position_SL = PositionGetDouble(POSITION_SL);

            if (Position_SL != Price_of_New_Stop_Loss)
            {
               request.action = TRADE_ACTION_SLTP;
               request.sl = NormalizeDouble(Price_of_New_Stop_Loss,_Digits);
               Print(TimeToString(TimeCurrent()), " Modify ", request.position,
                     " with Position_Magic ", IntegerToString(Position_Magic));
               Print("  SL ", DoubleToString(Position_SL,_Digits),
                     " -> ", DoubleToString(request.sl,_Digits));
               if(!OrderSend(request,result)) Print("error ",GetLastError());
            }
         }
      }  
   }
   //--- cycle until the script is not halted
   while(!IsStopped()) Comment("Сделано");
   Comment("");
}
// End OnStart()
//+------------------------------------------------------------------+
 
Transslator #:

Здравствуйте! 

Не подскажите, почему скрипт для изменения стоп-лосса не работает и выдает ошибку 4756?

При этом точно такой же скрипт для изменения тейк-профита прекрасно работает.

В справочнике есть хороший пример по данной теме

         request.action  =TRADE_ACTION_SLTP; // тип торговой операции
         request.position=position_ticket;   // тикет позиции
         request.symbol=position_symbol;     // символ 
         request.sl      =sl;                // Stop Loss позиции
         request.tp      =tp;                // Take Profit позиции
         request.magic=EXPERT_MAGIC;         // MagicNumber позиции

Структура торгового запроса

SL & TP Modification

Торговый приказ на модификацию уровней StopLoss и/или TakeProfit. Требуется указание 4 полей:

  • action
  • symbol
  • sl
  • tp
  • position

При модификации или закрытии позиции в системе хеджинга обязательно указывайте ее тикет (MqlTradeRequest::position). В системе неттинга тикет также можно указывать, однако идентификации позиции осуществляется по имени символа.


https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Структура торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
2022.08.31 13:15:39.943 2012.01.08 23:24:00   failed market sell 0.2 EURJPY [Market closed]
Подскажите как проверить что рынок не закрыт ?
 
Vladimir Deryagin #:

В справочнике есть хороший пример по данной теме

При модификации или закрытии позиции в системе хеджинга обязательно указывайте ее тикет (MqlTradeRequest::position). В системе неттинга тикет также можно указывать, однако идентификации позиции осуществляется по имени символа.


https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Спасибо за ответ!

Переделал скрипт так:

//+------------------------------------------------------------------+
//|                                                 Modify SL TP.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
#property description "Скрипт"
#property script_show_inputs
input  int Magic_Number = 0;
input double Price_of_New_Take_Profit = 0.0;
input double Price_of_New_Stop_Loss = 0.0;
//--------------------------------------------------------------------
//--- объявление запроса и результата
//MqlTick tick;
MqlTradeRequest request;
MqlTradeResult result;
//MqlTradeCheckResult check;
//MqlDateTime tm;
//--------------------------------------------------------------------
void OnStart()
{  
//   double Position_SL,Position_TP;
//   ulong  Position_Magic = 0;
   //--- перебор всех открытых позиций
   for(int i=0; i<PositionsTotal(); i++)
   {
      if(_Symbol == PositionGetSymbol(i))
      {
         //--- параметры ордера
         ulong  Position_Ticket = PositionGetTicket(i);// тикет позиции
         string Position_Symbol = PositionGetString(POSITION_SYMBOL); // символ 
         int    Symbol_Digits = (int)SymbolInfoInteger(Position_Symbol,SYMBOL_DIGITS); // количество знаков после запятой
         ulong  Position_Magic = PositionGetInteger(POSITION_MAGIC); // MagicNumber позиции
         double Position_Volume = PositionGetDouble(POSITION_VOLUME);    // объем позиции
         double Position_SL = PositionGetDouble(POSITION_SL);  // Stop Loss позиции
         double Position_TP = PositionGetDouble(POSITION_TP);  // Take Profit позиции
         ENUM_POSITION_TYPE Position_Type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позици   
         if(Position_Magic == Magic_Number)
         {
            if (Position_SL != Price_of_New_Stop_Loss || Position_TP != Price_of_New_Take_Profit)
            {
               //--- обнуление значений запроса и результата
               ZeroMemory(request);
               ZeroMemory(result);
               //--- установка параметров операции
               request.action   = TRADE_ACTION_SLTP; // тип торговой операции
               request.position = Position_Ticket;   // тикет позиции
               request.symbol   = Position_Symbol;     // символ 
               request.sl       = NormalizeDouble(Price_of_New_Stop_Loss,_Digits); // Stop Loss позиции
               request.tp       = NormalizeDouble(Price_of_New_Take_Profit,_Digits); // Take Profit позиции
               request.magic    = Position_Magic;         // MagicNumber позиции
               //--- вывод информации о модификации
               Print(TimeToString(TimeCurrent()), " Modify ", request.position,
                     " with Position_Magic ", IntegerToString(Position_Magic));
               Print("  SL ", DoubleToString(Position_SL,_Digits), " -> ", DoubleToString(request.sl,_Digits),
                     ";  TP ", DoubleToString(Position_TP,_Digits), " -> ", request.tp);
               //--- отправка запроса и вывод информации об ошибке, если отправить запрос не удалось
               if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError());
               //--- информация об операции   
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u", result.retcode, result.deal, result.order);
            }
         }
      }  
   }
   //--- Цикл, пока скрипт не будет прерван
   while(!IsStopped()) Comment("Сделано");
   Comment("");
}
// End OnStart()
//+------------------------------------------------------------------+

Тейк профит меняется замечательно. А при попытке изменить стоп лосс с явно заданным значением выдаётся ошибка 4756, а в журнале это:


 
Transslator #:

Тейк профит меняется замечательно. А при попытке изменить стоп лосс с явно заданным значением выдаётся ошибка 4756, а в журнале это:


А цена Ask чему равна в этот момент?
 
Sergey Gridnev #:
А цена Ask чему равна в этот момент?
Позиция открыта по цене 0.85098. Такая же история и на других парах, и при самом разном расстоянии до выставляемого стопа.