초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1420

 
Rustam Ayupov 거래 터미널에서 추적 손절매의 불필요한 관리에 놀랐습니다. 나는 추적 손절매 설정으로 수동으로 거래하고 데모 계좌에서 MetaQuotes 거래 터미널에 익숙해 졌을 때 다른 브로커와 오랫동안 작업해온 거래 시스템이 독립적으로 거래를 마감하기 시작했습니다.... 모두 임의의 순서로, 규칙성없이. 나는 이미 거래 서버가 느릴 때 시세 점프를 상상하면서 매개 변수를 검토했습니다. 매복에서 기다리고, 예정되지 않은 후행 손절매를 기다리는 것도 작동하지 않고, 짐승은 나보다 더 교활했습니다) 경험이 많은 트레이더의 누군가가 익숙하다면, 제발 깨달아 주시겠습니까? 아니면 그것이 무엇인지 제안 하시겠습니까? MT5를 사용하는 브로커가 많지 않고 시스템 자체가 MT4와 비교할 수 없기 때문에 MT5 거래 터미널과이 브로커를 마스터하고 싶습니다. 고마워요 .

3. DLL을 금지하고 이해하지 못하는 모든 지표와 조언자를 삭제하십시오.

2. 개인 캐비닛 DC에서 모든 그룹, 신호, 컨설턴트 및 이와 유사한 모든 것에서 연결을 끊습니다.

1. 거래 계좌 비밀번호 변경

 

CButton 객체에 OnSetColorBackground를 사용하는 올바른 방법은 무엇인가요? 조건에 따라 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 수정

손절 및/또는 테이크프로핏 레벨 수정을 위한 거래 주문입니다. 4개의 필드를 지정해야 합니다:

  • action
  • 기호
  • sl
  • tp
  • 포지션

헤징 시스템에서 포지션을 수정하거나 청산할 때는 반드시 해당 티켓(MqlTradeRequest::포지션)을 지정해야 합니다. 네팅 시스템에서도 티켓을 지정할 수 있지만 포지션은 심볼 이름으로 식별됩니다.


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::포지션)을 지정해야 합니다. 네팅 시스템에서도 티켓을 지정할 수 있지만 포지션은 심볼 이름으로 식별됩니다.


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이 발생하고 로그에 기록됩니다:


현재 매도 호가는 얼마입니까?
 
Sergey Gridnev #:
현재 매도 호가는 얼마입니까?
포지션은 0.85098의 가격으로 오픈되어 있습니다. 다른 쌍과 스톱까지의 거리가 다른 경우에도 마찬가지입니다.
 
Transslator #:
포지션은 0.85098의 가격으로 오픈되었습니다. 다른 쌍과 스톱까지의 거리가 다른 경우에도 마찬가지입니다.
포지션이 어떤 가격에 개설되었는지는 중요하지 않으며, 스톱 수정 시점의 가격이 중요합니다. 매도 포지션의 경우 매도호가입니다.
 
Sergey Gridnev #:
포지션이 어떤 가격에 개시되었는지는 중요하지 않으며, 중요한 것은 스톱 수정 시점의 가격입니다. 매도 포지션의 경우 이 가격이 매도호가입니다.
현재 가격은 계속 변하지만 스톱이 설정된 가격과는 분명히 멀리 떨어져 있습니다.
사유: