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

 
Vladimir Karputov :

문제는 고문에게 있습니다. 그건 그렇고, 가상 호스팅 dll에 대한 규칙은 금지되어 있습니다.

이전에는 모든 것이 잘 작동했습니다. 무료 호스팅 을 시도했어야 했습니다. 일반적으로 그는 메타쿼터에게 15달러를 주었습니다)))

답변 해주셔서 감사합니다!

 

EA는 시장 주문을 연 다음 수정하고 TP와 SL을 설정합니다. 테스터 확인. 첫 번째 주문은 필요한 매개변수로 수정됩니다. 두 번째 주문은 동일한 방향으로 열리고 첫 번째 주문은 활성화되지만 첫 번째 주문은 두 번째 주문의 매개변수에 따라 수정되고 두 번째 주문은 0 SL 및 TP로 유지됩니다. 동시에 SL == 0 및 TP == 0인 경우 어떤 이유로 인해 수정 중이므로 이러한 표시기가 더 이상 0이 아닌 상태입니다. 왜요? 처음부터 끝까지 반복을 변경해도 아무 것도 변경되지 않습니다.

그리고 더. 테스터의 이익 열에는 두 개의 미결 주문이 있는 경우 주문의 이익이 반대로 표시됩니다. 첫 번째 미결 주문에는 두 번째 주문의 이익이 있고 그 반대의 경우도 마찬가지입니다. 왜요?

그리고 더. 두 극값에 대한 추세선 을 그려야 합니다. 선은 그려지지만 막대에서 막대로 스텁입니다. 이것은 추세선이 아니라 세그먼트일 뿐인데 정확히 그 선을 보고 싶습니다.

 void PositionModifiSell()
{
   int     i;
   double sl    = 0 ; 
   double tp    = 0 ;  
   int     total = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {
               if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )
               {
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );                
                                    
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  
                   if (!m_trade.PositionModify( _Symbol , sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кода: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko :

EA는 시장 주문을 연 다음 수정하고 TP와 SL을 설정합니다. 테스터 확인. 첫 번째 주문은 필요한 매개변수로 수정됩니다. 두 번째 주문은 동일한 방향으로 열리고 첫 번째 주문은 활성화되지만 첫 번째 주문은 두 번째 주문의 매개변수에 따라 수정되고 두 번째 주문은 0 SL 및 TP로 유지됩니다. 동시에 SL == 0 및 TP == 0인 경우 어떤 이유로 수정되고 있으므로 이러한 표시기가 더 이상 0이 아닌 상태입니다. 왜요? 처음부터 끝까지 반복을 변경해도 아무 것도 변경되지 않습니다.

그리고 더. 테스터의 이익 열에서 두 개의 미결 주문이 있는 경우 주문의 이익이 반대 방향으로 표시됩니다. 두 번째 이익은 첫 번째 미결 주문에 대해 표시되고 그 반대의 경우도 마찬가지입니다. 왜요?

그리고 더. 두 극값에 대한 추세선 을 그려야 합니다. 선은 그려지지만 막대에서 막대로 스텁입니다. 이것은 추세선이 아니라 세그먼트일 뿐인데 정확히 그 선을 보고 싶습니다.

1. 주문이 아니라 위치

2. 질문을 공식화하십시오 - 내레이션을 보는 동안 질문과 "작동 방법" 알고리즘을 보지 못했습니다.

 
Vladimir Karputov :

1. 주문이 아니라 위치

2. 질문을 공식화하십시오 - 내레이션을 보는 동안 질문과 "작동 방법" 알고리즘을 보지 못했습니다.

mql5 언어 이기 때문에 위치가 무엇인지 명확합니다. 그리고 코드에는 위치가 있습니다. 문제는 조건이 다음과 같이 명시되어 있지만 첫 번째 위치가 마지막 위치가 아닌 수정된 이유입니다.

 if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )
 
Youri Lazurenko :

mql5 언어 이기 때문에 위치가 무엇인지 명확합니다. 그리고 코드에는 위치가 있습니다. 문제는 조건이 다음과 같이 명시되어 있지만 첫 번째 위치가 마지막 위치가 아닌 수정된 이유입니다.

질문은 어디에??? 알고리즘을 설명하십시오. "알고리즘이 이런 식으로 ...".

 
Vladimir Karputov :

질문은 어디에??? 알고리즘을 설명하십시오. "알고리즘이 이런 식으로 ...".

추세선이 깨지고 막대가 선 위/아래로 닫히면 SL 및 TP가 0인 위치가 열립니다. 개봉 직후에 필요한 TP, SL을 설정(위치 수정). 조건을 위반하면서 마지막 위치가 수정되는 것이 아니라 이전 위치인 이유:

 if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )

이제 명확해 졌습니까? 조건에 포지션 오픈 시간 을 입력해도 달라지는 것은 없습니다. 포지션 수에는 제한이 없습니다.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Свойства позиций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko :

추세선이 깨지고 막대가 선 위/아래로 닫히면 SL 및 TP가 0인 위치가 열립니다. 개봉 직후에 필요한 TP, SL을 설정(위치 수정). 조건을 위반하면서 마지막 위치가 수정되는 것이 아니라 이전 위치인 이유:

이제 명확해 졌습니까? 조건에 포지션 오픈 시간 을 입력해도 달라지는 것은 없습니다. 포지션 수에는 제한이 없습니다.

수정 시점에 새 위치가 이미 존재한다고 확신합니까? (거래 요청을 보낸다고 해서 아직 포지션이 있다는 보장은 없습니다).

조건(SL == 0.0 및 TP == 0.0)을 입력할 때 위치 티켓을 인쇄하십시오.

 
Vladimir Karputov :

수정 시점에 새 위치가 이미 존재한다고 확신합니까? (거래 요청을 보낸다고 해서 아직 포지션이 있다는 보장은 없습니다).

조건(SL == 0.0 및 TP == 0.0)을 입력할 때 위치 티켓을 인쇄하십시오.

예, 두 번째 위치는 이미 있습니다. 나는 잡지를 읽고 있다. 성공적으로 생성된 판매 방법, 코드 10009. (티켓 #3). 그런 다음 수정은 성공적으로 완료된 티켓 #2가 있는 위치만 따릅니다(수정, 강조하지만 조건에 따라 발생해서는 안 되지만 SL은 더 이상 0이 아닙니다!).

이미 작성, 무화과가 아닌 개장 시간 과 티켓으로 시도하여 이전 위치를 수정합니다. 예를 들어:

 void PositionModifiSell()
{
   int       i;
   datetime Time;
   double    sl    = 0 ; 
   double    tp    = 0 ;  
   datetime time  = 0 ;
   int       total = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {
               Time = m_position.Time();
               
               if (Time > time)
               {
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );
                  
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  
                   if (!m_trade.PositionModify( _Symbol , sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кода: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
                  time = Time;
               }
            }
         }
      }
   }
}
//------------ или
void PositionModifiSell()
{
   int       i;
   ulong   Ticket;
   double sl     = 0 ; 
   double tp     = 0 ;  
   ulong   ticket = 0 ;
   int     total  = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {
               Tiсket = m_position.Ticket();
               
               if (ticket != Ticket)
               {
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );
                  
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  
                   if (!m_trade.PositionModify( _Symbol , sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кодa: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
                  ticket = Ticket;
               }
            }
         }
      }
   }
}
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Свойства позиций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko :

예, 두 번째 위치는 이미 있습니다. 나는 잡지를 읽고 있다. 성공적으로 생성된 판매 방법, 코드 10009. (티켓 #3). 그런 다음 수정이 이어지며 티켓 # 2가있는 위치 만 성공적으로 완료되었습니다.

이미 작성, 무화과가 아닌 개장 시간 과 티켓으로 시도하여 이전 위치를 수정합니다. 예를 들어:


즉, 포지션의 출현 결과를 확인하지 않고 티켓을 인쇄하고 싶지도 않습니다. 이 경우 전체 코드를 첨부합니다(버튼을 사용하여 첨부 파일을 첨부 )

 
Vladimir Karputov :

즉, 포지션의 출현 결과를 확인하지 않고 티켓을 인쇄하고 싶지도 않습니다. 이 경우 전체 코드를 첨부합니다(버튼을 사용하여 첨부).

티켓을 인쇄하고 싶지도 않습니다. 이해하지 못했습니다. 다음은 저널 발췌문입니다.

2021.02.01 12:54:55.338 2018.01.02 17:00:00 시장 매도 0.01 EURUSD (1.20384 / 1.20402)

2021.02.01 12:54:55.338 2018.01.02 17:00:00 거래 #2 1.20384에서 0.01 EURUSD 매도 완료(주문 #2 기준)

2021.02.01 12:54:55.338 2018.01.02 17:00:00 거래 수행 [#2 매도 0.01 EURUSD at 1.20384]

2021.02.01 12:54:55.338 2018.01.02 17:00:00 주문이 1.20384에 0.01을 매도 [#2 매도 0.01 EURUSD 1.20384]

2021.02.01 12:54:55.344 2018.01.02 17:00:00 CTrade::OrderSend: 시장 매도 0.01 EURUSD [1.20384에서 완료]

2021.02.01 12:54:55.344 2018.01.02 17:00:00 Sell() 메서드가 성공했습니다. 턴 코드 = 10009(1.20384에서 완료)

2021.02.01 12:54:55.344 2018.01.02 17:00:00 포지션 수정 [#2 매도 0.01 EURUSD 1.20384 sl: 1.20813 tp: 1.20013]

2021.02.01 12:54:55.346 2018.01.02 17:00:00 CTrade::OrderSend: 포지션 #2 EURUSD 수정 (sl: 1.20813, tp: 1.20013) [완료]

2021.02.01 12:54:55.346 2018.01.02 17:00:00 PositionModify() 메서드가 성공했습니다. 턴 코드 = 10009(완료)

===================================================== ==================================================== ======== 분할, 두 번째 위치의 모양

2021.02.01 12:55:48.819 2018.01.03 09:00:00 시장 매도 0.01 EURUSD (1.20442 / 1.20460)

2021.02.01 12:55:48.819 2018.01.03 09:00:00 거래 #3 매도 0.01 EURUSD 1.20442 완료(주문 #3 기준)

2021.02.01 12:55:48.819 2018.01.03 09:00:00 거래 수행 [#3 매도 0.01 EURUSD at 1.20442]

2021.02.01 12:55:48.819 2018.01.03 09:00:00 주문이 1.20442에 0.01 매도 [#3 매도 0.01 EURUSD 1.20442]

2021.02.01 12:55:48.821 2018.01.03 09:00:00 CTrade::OrderSend: 시장 매도 0.01 EURUSD [1.20442에서 완료]

2021.02.01 12:55:48.821 2018.01.03 09:00:00 Sell() 메서드가 성공했습니다. 턴 코드 = 10009(1.20442에서 완료)

==================================================== ===================================================== ================ 성공적으로 열린 위치, 수정, 그러나 이전 순서

2021.02.01 12:55:48.821 2018.01.03 09:00:00 포지션 수정 [#2 매도 0.01 EURUSD 1.20384 sl: 1.20663 tp: 1.20154]

2021.02.01 12:55:48.823 2018.01.03 09:00:00 CTrade::OrderSend: 포지션 #2 EURUSD 수정 (sl: 1.20663, tp: 1.20154) [완료]

2021.02.01 12:55:48.823 2018.01.03 09:00:00 PositionModify() 메서드가 성공했습니다. 턴 코드 = 10009(완료)


Sell에서 옵션과 함께 위치를 수정하기 위한 전체 코드를 게시했습니다.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
사유: