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

 
RogozaIV :
최근에 mql4에서 mql5로 전환했습니다. 나는 RTS 인덱스에 대한 어드바이저를 테스트하고 있는데 그러한 문제가 있었습니다. 비록 거래를 만들기 위한 조건 중 하나가 작성되었지만 여러 거래를 엽니다: if (...OrdersTotal()==0). 이 조건이 작동하지 않는 이유는 무엇입니까? 하나의 거래만 열려면 무엇을 할 수 있습니까?

주문 합계

OrdersTotal 활성 주문 수를 반환합니다.

총 포지션

PositionsTotal 열린 위치 의 수를 반환합니다.


메모

활성 보류 주문 을 "도구" 패널의 "거래" 탭에도 표시되는 포지션과 혼동하지 마십시오. 주문은 거래 작업 을 수행하라는 지시이며, 포지션은 하나 이상의 거래 의 결과입니다.

"상계" 위치 회계( ACCOUNT_MARGIN_MODE_RETAIL_NETTINGACCOUNT_MARGIN_MODE_EXCHANGE )를 사용하면 언제든지 각 기호 에 대해 하나의 위치 만 열 수 있으며 이는 하나 이상의 거래 의 결과입니다. 위치와 활성 보류 주문 은 "도구" 패널의 "거래" 탭에도 표시되는 서로 혼동되어서는 안 됩니다.

위치의 독립적 표현( ACCOUNT_MARGIN_MODE_RETAIL_HEDGING )을 사용하면 각 기호에 대해 여러 위치를 동시에 열 수 있습니다.


즉, OrdersTotal을 사용하여 현재 PENDING ORDERS가 몇 개인지 확인합니다.

ORDER_TYPE_BUY_LIMIT

보류 중인 주문 구매 한도

ORDER_TYPE_SELL_LIMIT

보류 중인 주문 판매 한도

ORDER_TYPE_BUY_STOP

대기 중인 주문 매수 정지

ORDER_TYPE_SELL_STOP

보류 중인 주문 판매 중지

ORDER_TYPE_BUY_STOP_LIMIT

주문 가격에 도달하면 StopLimit 가격으로 Buy Limit 보류 주문이 배치됩니다.

ORDER_TYPE_SELL_STOP_LIMIT

주문 가격에 도달하면 보류 중인 판매 제한 주문이 StopLimit 가격에 배치됩니다.


현재 열려 있는 POSITIONS 수를 확인해야 합니다.

POSITION_TYPE_BUY

구입

POSITION_TYPE_SELL

판매


- 이를 위해서는 PositionTotal을 사용해야 합니다.

 

Vladimir Karputov 감사합니다.

 
Agat :
안녕하세요. 빌드 1604에 대한 마지막 MT5 업데이트 후 표시기가 올바르게 작동하지 않았습니다. 나는 사용한다
소위 "액체" 표시기. 예를 들어, 서로 다른 기간의 여러 스토캐스틱이 하나의 창에 설정됩니다. 이제 짧은 것이 그려집니다.
일반적으로 이전과 같이 약간 더 긴 것은 몇 개의 막대만 그리고 가장 긴 것은 전혀 그려지지 않습니다.

스토리가 많이 부족해진 것 같습니다. 무슨 일이 있었는지 제안할 수 있습니까?
더 낮은 시간 프레임이 열리지 않은 MT에서 결함이 발생한 것으로 나타났습니다. TF M1 이상에서 차트를 스크롤해야 했고 모든 것이 잘 되었습니다. 질문이 마감되었습니다.
 
예, 터미널이 다시 시작되면 모든 것이 동일합니다. 매번 앉아서 모든 차트를 클릭해야 합니다.
작동하지 않습니다. 작동하지 않습니다. 글쎄, 적어도 누군가가 문제의 장점에 대해 한 마디 말할 것입니까? 분명히 버그가 있는 업데이트입니다.

그들은 이런 질문을 하러 어디로 가나요?
 
안녕하세요! 2017.06.02_17:45 GMT+3. 질문이 있습니다. .mq5 프로그램이 로트 계산을 작성했습니다. 결과적으로 전략 테스터 의 프로그램은 매우 큰 로트와 거래를 시도합니다. 1.09의 위험 비율로. 입금액이 입금액보다 많습니다(기본 $10,000). Include>Expert>Money>MoneyFixedRisk.mqh 폴더에서 표준 OOP 파일을 사용하려고 했습니다. 결과: 프로그램이 0랏으로 거래를 시작하려고 합니다. (0.00). 나는 이것이 기업 프로그래머들의 농담이라고 생각한다. 아니면 내가 뭔가를 이해하지 못하고 있습니까? 글쎄, 당신의 고문이 쓸모가 없었는지 확인하십시오. 부지를 옆으로 구부립니다. 조언자가 주어진 위험 비율로 계산된 로트를 거래하기 위해 무엇을 작성해야 하는지 아는 사람이 있을까요? 나 혼자 할 수 없어, 그냥 시간을 낭비하고 있어. 회사의 프로그래머가 너무 기분이 상하지 않기를 바랍니다. 포함 파일 Lot.mqh를 첨부합니다. 누군가가 대답해주기를 바랍니다. 18:00 GMT+3. 18:11 GMT+3에 삽입됨.
파일:
Lot.mqh  2 kb
 
Agat :
안녕하세요. 빌드 1604에 대한 마지막 MT5 업데이트 후 표시기가 올바르게 작동하지 않았습니다. 나는 사용한다
소위 "액체" 표시기. 예를 들어, 서로 다른 기간의 여러 스토캐스틱이 하나의 창에 설정됩니다. 이제 짧은 것이 그려집니다.
일반적으로 이전과 같이 약간 더 긴 것은 몇 개의 막대만 그리고 가장 긴 것은 전혀 그려지지 않습니다.

스토리가 많이 빠진 것 같습니다. 무슨 일이 있었는지 제안할 수 있습니까?


다른 사람의 기간 기록에 어떻게 액세스합니까? 어떤 액세스 검사를 수행합니까? 어떤 오류 코드가 표시 됩니까?

 
Николай Никитюк :
안녕하세요! 2017.06.02_17:45 GMT+3. 질문이 있습니다. .mq5 프로그램이 로트 계산을 작성했습니다. 결과적으로 전략 테스터 의 프로그램은 매우 큰 로트와 거래를 시도합니다. 1.09의 위험 비율로. 입금액이 입금액보다 많습니다(기본 $10,000). Include>Expert>Money>MoneyFixedRisk.mqh 폴더에서 표준 OOP 파일을 사용하려고 했습니다. 결과: 프로그램이 0랏으로 거래를 시작하려고 합니다. (0.00). 나는 이것이 기업 프로그래머들의 농담이라고 생각한다. 아니면 내가 뭔가를 이해하지 못하고 있습니까? 글쎄, 당신의 고문이 쓸모가 없었는지 확인하십시오. 부지를 옆으로 구부립니다. 조언자가 주어진 위험 비율로 계산된 로트를 거래하기 위해 무엇을 작성해야 하는지 아는 사람이 있을까요? 나 혼자 할 수 없어, 그냥 시간을 낭비하고 있어. 회사의 프로그래머가 너무 기분이 상하지 않기를 바랍니다. 포함 파일 Lot.mqh를 첨부합니다. 누군가가 대답해주기를 바랍니다. 18:00 GMT+3. 18:11 GMT+3에 삽입됨.

이 Expert Advisor 실행: Money Fixed Risk - 입력 매개변수를 모두 변경하고 터미널의 "전문가" 탭에서 인쇄물을 확인하십시오.
 

내 지표에서 지표 데이터를 전혀 가져올 수 없습니다.

 int OnInit ()
  {  
   handle1= iMA ( NULL , 0 ,per1, 0 , MODE_LWMA , PRICE_CLOSE );
   handle2= iMA ( NULL , 0 ,PLength1, 0 , MODE_LWMA , PRICE_CLOSE );
  }
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int copied1= CopyBuffer (handle1, 0 , 0 ,toCount,TMP_Buf1);
   if (copied1<= 0 )
     {
       Sleep ( 50 );
       for ( int i= 0 ;i< 100 ;i++)
        {
         if ( BarsCalculated (handle1)> 0 )
             break ;
         Sleep ( 50 );
        }
      copied1= CopyBuffer (handle1, 0 , 0 ,toCount,TMP_Buf1);
       if (copied1<= 0 )
        {
         Print ( __FUNCTION__ + ": copying indicator data failed. Error=" , GetLastError ());
         return ( 0 );
        }
     }  
   int copied2= CopyBuffer (handle2, 0 , 0 ,toCount,TMP_Buf2);
   if (copied2<= 0 )
     {
       Sleep ( 50 );
       for ( int i= 0 ;i< 100 ;i++)
        {
         if ( BarsCalculated (handle2)> 0 )
             break ;
         Sleep ( 50 );
        }
      copied2= CopyBuffer (handle2, 0 , 0 ,toCount,TMP_Buf2);
       if (copied2<= 0 )
        {
         Print ( __FUNCTION__ + ": copying indicator data failed. Error=" , GetLastError ());
         return ( 0 );
        }
     }
  }

아무것도 복사되지 않습니다. copy1/2 변수는 항상 0보다 작습니다. 디버거에서는 이 코드를 전혀 지나칠 수 없습니다. 그것을 올바르게하는 방법은 이미 그의 머리를 부러 뜨 렸습니다.

 
흠.. 그 전에는 4806, 지금은 4807 오류가 있었는데 OnInit()에서 핸들 생성이 옮겨졌네요. 어떻게 합니까?
 
이해한 것 같습니다. 핸들이 생성되지 않았습니다. 모든 데이터가 초기화되지 않았습니다.
사유: