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

 
teetrinker :

Myexpert.Time(10)이 차트의 10번째 막대 시간을 반환해야 합니까? 그리고 올바르게 쓰는 방법?

감사해요

이론상으로는 당연히...

문서에 따르면 Time 메서드는 지정된 인덱스에서 Timeseries 요소의 값을 가져옵니다. 더욱이 이것은 CExpertBase 클래스의 메소드이며, 이는 차례로 CExpert 클래스와 거래 전략의 모든 보조 클래스에 대한 기본 클래스입니다.

~에게 세르게예프 그것은 당신에게 올바르게 알려줍니다 ... Expert Advisor의 수명에서 Time() 메소드의 역할을 결정하기 위해 디버거를 사용하는 것이 가장 좋습니다 ...

 

고마워 예델킨!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

그리고 EnumToString(timeframe), 멋진 기능!! 그리고 난 램!!!!!!

 
기능이 있는지 알려주세요
 bool   PositionModify( ulong   PositionTicket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color= CLR_NONE )
      {   MqlTradeRequest request  = { 0 };
         MqlTradeResult result = { 0 };
        request.action= TRADE_ACTION_SLTP ; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol ();
        request.sl= stoploss;
        request.tp= takeprofit;
         return ( OrderSend ( request,   result    ));   
      }

함수에는 분명히 ,,side,,-이 있습니다.- request.symbol= Symbol (); Symbol()이 여기에 있는 이유는 무엇입니까? TP와 SL을 설정한 심볼은 여기로 옮겨야 합니다. 따라서 request.symbol= Symbol (); 행을 제거하는 것이 가능합니까? , Tipo 그녀는 바보인가 나다인가?

 

오픈된 메인오더 의 스톱레벨에서 반전주문 을 설정하고 TP에 의해 메인오더 가 마감된 경우 삭제하는 방법을 알려주세요.

코드에서 즉시 두 주문을 모두 설정했습니다.

        
 // основной ордер +++++++++++++++++++++++++++++++++++++++      
        {
         request.action = TRADE_ACTION_PENDING ;
         request.magic=magic_number;                   // ORDER_MAGIC
         request.symbol = "EURUSD" ;
         request.volume = NormalizeDouble (volume()/ 1 , 2 );
         request.price= NormalizeDouble (Ask+StopLevel* _Point , _Digits );
         request.sl = NormalizeDouble (request.price - SL* _Point , _Digits );
         request.tp = NormalizeDouble (request.price + TP* _Point , _Digits );
         request.deviation= 0 ;
         request.type= ORDER_TYPE_BUY_STOP ;
         request.type_filling= ORDER_FILLING_FOK ;
         
           {
             OrderSend (request,result);
             if (result.retcode== 10009 || result.retcode== 10008 )
               Print ( "Установлен ордер BuyStop" );
             else
              {
               Print (ResultRetcodeDescription(result.retcode));
                           
              }
           }      
 // переворотный ордер +++++++++++++++++++++++++++++++++++++++
        
         request.action = TRADE_ACTION_PENDING ;
         request.magic=magic_number1;                   // ORDER_MAGIC
         request.symbol = "EURUSD" ;
         request.volume = NormalizeDouble (volume()/ 2 , 2 );
         request.price= NormalizeDouble (Bid-(SL- 45 ) * _Point , _Digits );
         request.sl = NormalizeDouble (request.price + SL* _Point , _Digits );
         request.tp = NormalizeDouble (request.price - (TP- 900 )* _Point , _Digits );
         request.deviation= 0 ;
         request.type= ORDER_TYPE_SELL_STOP ;
         request.type_filling= ORDER_FILLING_FOK ;
         
           {
             OrderSend (request,result);
             if (result.retcode== 10009 || result.retcode== 10008 )
               Print ( "Установлен ордер SellStop" );
             else
              {
               Print (ResultRetcodeDescription(result.retcode));
               return ;
              }
           }        
       } } 
}

메인 오더는 TP에 의해 열리고 닫히는 반면 플립 오더는 매달려 있습니다. 메인이 정류장에서 닫히면 문제가 없을 것입니다.)). 닫기에 사용하는 가장 좋은 기능은 무엇입니까?

디버거를 반복하고 다음과 같이 삭제하시겠습니까?:

      {
         request.action = TRADE_ACTION_REMOVE ;
         request.magic=magic_number1;                   // ORDER_MAGIC
         request.symbol = "EURUSD" ;
         request.volume = 0 ;
         request.price= 0 ;
         request.sl = 0 ;
         request.tp = 0 ;
         request.deviation= 0 ;
         request.type= 0 ;
         request.type_filling= 0 ;
         
           {
             OrderSend (request,result);
아니면 더 빠른 것일까요?


	          
 
Crucian : 메인 오더는 TP에 의해 열리고 닫히고 반전이 걸려 있습니다. 메인이 정류장에서 닫히면 문제가 없을 것입니다.)). 닫기에 사용하는 가장 좋은 기능은 무엇입니까? 이런 식으로 체납자를 분류하고 제거합니까? 아니면 더 빠른 것일까요?

문제는 특정 이벤트가 발생할 때(특히 TP 주문이 열린 위치에서 트리거될 때) SL 또는 TP 주문이 아닌 보류 주문을 정확히 삭제하는 방법으로 요약됩니다.

현재 이러한 보류 중인 주문은 해당 "대기 중인 주문 삭제" 요청을 보내야 강제로 삭제할 수 있습니다. 저것들. 터미널 측에서 해당 이벤트의 발생을 추적하고 요청을 보내야 합니다. 그러나 귀하의 버전과 달리 요청에는 두 개의 필드만 필요하며 그 중 하나는 요청입니다. 주문 .

귀하가 지적한 상황에서 OCO 주문("하나는 다른 하나 취소" - "하나는 다른 하나 취소")이 도움이 될 수 있습니다. 오픈 포지션, 그리고 미결 주문은 SL 수준에서 위치를 "반전"하기 위해 저자의 의도에 따라 필요한 양의 주문이 될 것입니다. 이러한 OCO 주문 중 하나가 실행되면 두 번째 주문은 서버 측에서 자동으로 삭제됩니다. 그러나 이 포럼이 존재하는 동안 플랫폼 개발자는 OCO 주문을 포함하여 추가 유형의 주문을 도입하는 데 절대 동의하지 않습니다.

 
Yedelkin :

그러나 이 포럼이 존재하는 동안 플랫폼 개발자는 OCO 주문을 포함하여 추가 유형의 주문을 도입하는 데 절대 동의하지 않습니다.

프로그래밍 방식으로 구현할 수 있다면 왜 도입할까요?
 
A100 : 프로그래밍 방식으로 구현할 수 있다면 왜 도입합니까?
포럼 검색에서 'OCO'라는 단어를 라틴어와 키릴 자모로 입력하고 읽으십시오.
 
Yedelkin :
포럼 검색에서 'OCO'라는 단어를 라틴어와 키릴 자모로 입력하고 읽으십시오.
OSO는 독립적인 주문이 아니며 입력할 필요가 없습니다.
 
A100 : OSO는 별도의 주문이 아니며 입력할 필요가 없습니다.
분명한. 저것들. 당신은 아무것도 읽지 않았습니다. 그러나 우리는 우리의 의견을 나눌 준비가 되어 있습니다. 알겠습니다. 귀하의 의견을 수용합니다. 이러한 유형의 주문은 필요 하지 않습니다.
 
Yedelkin :
이런 종류의 주문은 필요 하지 않습니다.
일부 플랫폼에는 1(때로는 2) OCO 주문을 연결할 수 있는 기능이 있습니다. MT4/5에서는 관련 주문 체인(때로는 상당히 복잡함)을 프로그래밍 방식으로 구현하며 이것이 더 편리한 옵션이라고 생각합니다.
사유: