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

 
Artyom Trishkin :

nnc_arr_in 배열의 크기를 구조 배열의 셀 0에 있는 크기보다 1만큼 더 변경합니다.

고맙습니다.

 

문제   mql5

두 개의 열린 위치 가 있고 신호가 있습니다( 플래그 == true ).

단 하나의 포지션, 즉 더 많은 이익을 내야 하는 포지션.

어떻게   더 많은 이익있는 사람 만 닫으십시오?

이 이벤트를 처리하는 가장 좋은 방법.

나는 이것을 이렇게 하려고 노력하고 있다:

if (invertStart == true ) // получил событие, о том что есть две позиции и одну можно закрыть.
   {     
   int npos_L1= 0 ;   NPos_L1(npos_L1);
   if (npos_L1== 1 )
   {
   int positions= PositionsTotal ();
   for ( int i= 0 ;i<=positions;i++)
   {
   ulong ticket= PositionGetTicket (i);
   if (ticket!= 0 && PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL && POSITION_PROFIT >= 50 ) //  50  допустим...
   {
   m_trade.PositionClose(ticket); 
   i--;
   invertStart = false ;
   return ;  
   }
   }
   }
   }  

결과적으로 마지막 열린 위치가 닫힙니다.

올바르게 구현하는 방법을 알려주세요. 나는 예를 원한다. 참고 문헌과 입문서를 읽었지만 항상 미묘함을 이해하지는 못합니다.

 
Vladpedro :

문제   mql5

두 개의 열린 위치 가 있고 신호가 있습니다( 플래그 == true ).

단 하나의 포지션, 즉 더 많은 이익을 내야 하는 포지션.

어떻게   더 많은 이익있는 사람 만 닫으십시오?

이 이벤트를 처리하는 가장 좋은 방법.

나는 이것을 이렇게 하려고 노력하고 있다:

결과적으로 마지막 열린 위치가 닫힙니다.

올바르게 구현하는 방법을 알려주세요. 나는 예를 원한다. 참고 문헌과 입문서를 읽었지만 항상 미묘함을 이해하지는 못합니다.

코드:

   ulong ticket= ULONG_MAX ;
   double profit= DBL_MIN ;
   if (invertStart == true )   // получил событие, о том что есть две позиции и одну можно закрыть.
     {
       int positions= PositionsTotal ();
       for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--)
        {
         ulong tmp_ticket= PositionGetTicket (i);
         if (ticket!= 0 )
           {
             double tmp_profit= PositionGetDouble ( POSITION_PROFIT );
             if (tmp_profit>profit)
              {
               ticket=tmp_ticket;
               profit=tmp_profit;
              }
           }
        }
       //---
       if (ticket!= ULONG_MAX )
         m_trade.PositionClose(ticket);
     }
 
Vladimir Karputov :

코드:

정말 감사합니다. 효과가 있는 것 같습니다. 이러한 지역 변수 가 이미 존재하기 때문에 티켓에 대해서만 불평합니다.

'티켓'의 선언은 지역 변수를 숨깁니다 Lim_Stop_03_Sell_pos_06.mq5 299

이 티켓 중 일부는 분명히 내부에 숨겨져 있어야 합니다.

 
Vladpedro :

정말 감사합니다. 효과가 있는 것 같습니다. 이러한 지역 변수 가 이미 존재하기 때문에 티켓에 대해서만 불평합니다.

'티켓'의 선언은 지역 변수를 숨깁니다 Lim_Stop_03_Sell_pos_06.mq5 299

이 티켓 중 일부는 분명히 내부에 숨겨져 있어야 합니다.

변수 이름 바꾸기

 ulong ticket= ULONG_MAX ;

~에

 ulong close_ticket= ULONG_MAX ;

물론 코드에서도 이름을 바꾸는 것을 잊지 마십시오.

 
Vladimir Karputov :

변수 이름 바꾸기

~에

물론 코드에서 이름을 바꾸는 것을 잊지 마십시오.

예 감사합니다. 이미 이해했습니다... 이름이 변경되었습니다.

 

안녕하세요!

가격이 위쪽 라인 보다 높거나 아래쪽 라인(선이 수평 또는 경사이며 차트에서 이동할 수 있음)보다 낮은 경우 이메일이나 푸시 레터를 보내는 어드바이저를 어디에서 찾을 수 있는지 알려주십시오.

가지고 계신 분 계시면 공유 부탁드립니다.

MT5에서만

고맙습니다!

 

EA에서 표시기를 연결하면

 int OnInit ()
{
   ind_handle = iCustom ( _Symbol , indperiod, "MyInd" , indParam);
   return ( INIT_SUCCEEDED );
}

그런 다음 CopyBuffer(ind_handle, 0, 1, 3, buffer1)를 사용하여 표시기 버퍼를 얻습니다.


매 틱마다 표시기 버퍼 를 읽어야 합니까?

답이 필요하고 가급적이면 출처가 필요합니다. 부두, 기사:

1. 지표는 항상 병렬로 계산됩니다.

2. 표시기는 CopyBuffer() 호출 시에만 계산됩니다.

 
Igor Makanu :

EA에서 표시기를 연결하면

그런 다음 CopyBuffer(ind_handle, 0, 1, 3, buffer1)를 사용하여 표시기 버퍼를 가져옵니다.


매 틱마다 표시기 버퍼 를 읽어야 합니까?

우리는 답변이 필요하고 가급적이면 출처가 필요합니다. 부두, 기사:

1. 지표는 항상 병렬로 계산됩니다.

2. 표시기는 CopyBuffer() 호출 시에만 계산됩니다.

Igor, 음, 순전히 논리적으로 표시기가 올바르게 작성되면 현재 막대의 값만 변경할 수 있습니다. 따라서 현재 값이 필요한 경우 이러한 새로운 값을 사용하기 직전에 CopyBuffer가 필요합니다. 그리고 역사적 가치가 필요하다면 그것들은 변하지 않고 그것을 다시 읽을 이유가 없습니다.

어딘가에 각 틱의 지표 계산에 대한 정보가 있습니다. 내가 기억하는 한, 기본적으로 표시기는 액세스할 때만 다시 계산되지만 매 틱마다 강제로 다시 계산되도록 할 수 있습니다. 이 작업을 수행하는 방법은 설명서에서 찾을 수 있습니다.

 
Alexey Viktorov :
Igor, 음, 순전히 논리적으로 표시기가 올바르게 작성되면 현재 막대의 값만 변경할 수 있습니다. 따라서 현재 값이 필요한 경우 이러한 새로운 값을 사용하기 직전에 CopyBuffer가 필요합니다. 그리고 역사적 가치가 필요하다면 그것들은 변하지 않으며 그것을 다시 읽을 이유도 없다.

어딘가에 각 틱의 표시기 계산에 대한 정보가 있습니다. 내가 기억하는 한, 기본적으로 표시기는 액세스할 때만 다시 계산되지만 매 틱마다 강제로 다시 계산되도록 할 수 있습니다. 이 작업을 수행하는 방법은 설명서에서 찾을 수 있습니다.

좋아, 그래서 당신은 여전히 테스트해야합니다

문제는 표시기를 다시 그리는 데 있습니다. 아직 표시기를 다시 쓰고 싶지 않습니다.