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

 

안녕하세요,

저는 두 종가를 비교하고 이를 기반으로 매수 또는 매도 주문을 여는 매우 간단한 EA를 만들려고 합니다.

첫 번째 주문에서는 모든 것이 순조롭게 진행되지만 조건이 매도에서 매수로 전환되는 즉시 여러 주문이 동시에 발생합니다.

m_trade는 Ctrade 객체 입니다.

 // Current position information

bool Buy_openend = false ;
bool Sell_openend = false ;

double currentVolume = 0 ;

if ( PositionSelect ( _Symbol ) == true )
  {
   if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
     {
      Buy_openend = true ;
     }
       if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
     {
      Sell_openend = true ;
      }   
        currentVolume = PositionGetDouble ( POSITION_VOLUME );   
  } 

// Check for trade conditions

bool SellCondition = close <= closeprev && bar[ 1 ].time == startTime;
bool BuyCondition = close >= closeprev && bar[ 1 ].time == startTime;


// Entering trade

if (SellCondition)
  {
   if (Sell_openend)
   {
   Print ( "We already have a sell open" );
   return ;
   }
   m_trade.Sell(TradeVolume+currentVolume, _Symbol ,m_symbol.Ask(), NULL , NULL , NULL );
  }
if (BuyCondition)
  {
   if (Buy_openend)
     {
       Print ( "We already have a buy open" );
   return ;
     }
     m_trade.Buy(TradeVolume+currentVolume, _Symbol ,m_symbol.Bid(), NULL , NULL , NULL );
  }
 
Divania111 Ctrade 객체 입니다.

'startTime' 시간을 재설정해야 한다는 사실을 잊었습니다.

 
Vladimir Karputov # :

'startTime' 시간을 재설정해야 한다는 사실을 잊었습니다.

Vladimir에게 감사드립니다. 힌트를 바탕으로 수정하도록 노력하겠습니다.

그럼에도 불구하고 나는 여전히 놀랐다. 거래를 입력하기 위한 if 문에서 동일한 유형의 기존 주문 배치를 확인하기 때문입니다. 이것이 사실이라면 주문을 해서는 안됩니다. 그래서 이 문장으로 한 번에 한 종류의 주문만 입력할 수 있다고 생각했습니다.

이 생각이 잘못된 것인가?

 
Divania111 # :

Vladimir에게 감사드립니다. 힌트를 바탕으로 수정하도록 노력하겠습니다.

그럼에도 불구하고 나는 여전히 놀랐다. 거래를 입력하기 위한 if 문에서 동일한 유형의 기존 주문 배치를 확인하기 때문입니다. 이것이 사실이라면 주문을 해서는 안됩니다. 그래서 이 문장으로 한 번에 한 종류의 주문만 입력할 수 있다고 생각했습니다.

이 생각이 잘못된 것인가?

어떤 식으로든 ORDERS를 제어하지 않으며 코드에서 POSITION의 번호와 유형을 확인합니다. 게다가 - POSITIONS를 잘못 사용했습니다(계정 유형이 헤징인 경우 'PositionSelect(_Symbol)' 사용 오류). 알고리즘에 심각한 설계 오류가 있습니다.

해야 할 일:

1. 새로운 바가 탄생할 때 독점적으로 일하십시오. 새 막대가 없으면 아무 것도하지 말고 불필요한 움직임을 수행하지 마십시오.

2. 이 항목은 1번 항목이 완료된 후 공개됩니다.

 
안녕하세요. void OnTick()에서 주석 을 표시하지 마십시오. EA가 느려질 수 있습니다. Put in int OnInit()가 훨씬 빠르게 작동합니다.
 
Marco Nicholas 주석 을 표시하지 마십시오. EA가 느려질 수 있습니다. Put in int OnInit()가 훨씬 빠르게 작동합니다.

예, MT5에서는 작업 속도가 크게 느려집니다.

OnInit에서는 초기화 중에 한 번만 작동하며 더 이상 작동하지 않습니다.

 
Marco Nicholas 의 주석 이 EA 속도를 늦추는지 알려주실 수 있습니까? int에 넣어 OnInit() 훨씬 빠르게 작동합니다.

Comment() 함수를 말씀하시는 건가요?

그렇다면 그것은 분명합니다. OnInit() 에서 주석은 한 번만 업데이트되는 반면 OnTick() 에서는 주석이 매 틱마다 업데이트될 수 있습니다.

해결책은 필요할 때만 주석을 업데이트하는 것입니다. 정적이면 OnInit( )에서만 업데이트되고 OnDeinit () 에서 지우지만 동적이면 OnTick()에서 주석을 변경해야 할 때만 주석을 업데이트합니다.

편집: 이 게시물은 원래 영어 포럼에서 작성되었습니다.

 
안녕하세요 선생님들 클라이언트 SocketConnect() 함수를 사용할 때 사용자 지침에 따라 매개 변수를 올바르게 입력한 후에도 여전히 서버와 연결을 설정할 수 없습니다 테스트 후 서버를 정상적으로 사용할 수 있습니다 어떤 문제를 주의해야 SocketConnect() 함수를 사용할 때?
 

모두에게 좋은 하루.

질문이 있습니다

티켓으로 행을 선택하도록 sqlite 에 요청하는 방법.

db 구조는 다음과 같습니다.

기호 텍스트

티켓 텍스트

진짜를 뚫다

s_l - 진짜

t_p - 진짜

티켓의 전체 줄을 구조로 가져와야합니다.

 
안녕하세요, switch()에서 동일한 Print 대신 Comment() 를 사용할 수 있다고 알려주세요.
사유: