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

 
깨달아보니 그냥 깨진 파일인데 실행파일이 통째라서 잘되네요...
 
xxz :

......
어드바이저는 작동하지만 편집기에서 열려고 할 때

......

xxx :

이것은 실행 파일이 아니라 mq5 파일입니다...

이것은 내 코드입니다 ...

글쎄, 올바른 문구를 형성하십시오.

이 주제에. 나는 보통 메모장 ++에서 그러한 문제가있는 것을 엽니 다. 도움이 됩니다. 그러나 항상 그런 것은 아닙니다)))

 
Сергей Таболин :

글쎄, 올바른 구문을 형성하십시오.

이 주제에. 나는 보통 메모장 ++에서 그러한 문제가있는 것을 엽니 다. 도움이 됩니다. 그러나 항상 그런 것은 아닙니다)))

그래서 나는 어떤 편집기를 보기로 결정했고 파일 크기는 정상적이었지만 거의 0만 있었습니다. 그래야 하기 때문에...

 
이 주제와 관련이 없는 댓글은 " MQL4 MT4 MetaTrader 4 초보자의 질문 "으로 이동되었습니다.
 

고문이 작성했습니다. 그가 편지를 쓴 사람은 처음 시작할 때 즉시 두 위치를 차례로 엽니다. 이 문제를 직접 재현할 수 없습니다. 도와주세요.

OnTick() 함수

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   
   GetData();
   CheckForOpen();
   CheckForCloseCP();
   CheckForCloseAll();

}
//+------------------------------------------------------------------+

CheckForOpen() 함수만 위치를 여는 역할을 합니다. 위치는 다음과 같습니다.

 enum opp_mode {
   DoClose,       // Close and reverse with initial lot
   DoReverse,     // Close and reverse (continue Martingale last lot)
   DoHedge,       // No closing reversal (Hedge mode)
};

// Trade & MM Section
input opp_mode Mode_opp    = DoHedge;     // Trading Mode

//+------------------------------------------------------------------+
//| Check for Open function                                          |
//+------------------------------------------------------------------+
void CheckForOpen() {

   if (!IsBarNew) return ;

double lot= 0 ;
positions=Positions();

   if (Signal==OP_BUY) {
       if (longs> 0 ) return ;
       if (shorts== 0 ) {     // First Order Placing
         Print ( "   *** MSG ***   " +msg);
         PlaceMarketOrder(OP_BUY, Lot, _ask, _SL, _TP);
      }
       if (shorts> 0 ) {
         if (Mode_opp==DoClose) {       // Closing by Opposite Signal
             Print ( "   *** MSG ***   " +msg);
             Print ( "   ***   Close mode SELL by opposite signal." ); 
            ClosePositions(OP_SELL);
            PlaceMarketOrder(OP_BUY, Lot, _ask, _SL, _TP);
         }
         if (Mode_opp==DoReverse) {     // Reverse by Opposite Signal
             Print ( "Reversing SELL by opposite signal." );
            lot=GetMaxLot( ORDER_TYPE_SELL );
             if (IsMartingale) lot=lot*LotMult;
            ClosePositions(OP_SELL);
            PlaceMarketOrder(OP_BUY, lot, _ask, _SL, _TP);
         }
         if (Mode_opp==DoHedge) {       // Hedging by Opposite Signal
             Print ( "Hedging SELL by opposite signal." ); 
            MartinCounterB= 50 ; MartinCounterS= 50 ;
            PlaceMarketOrder(OP_BUY, GetMaxLot( ORDER_TYPE_SELL )*LotMult, _ask, _SL, _TP);
         }
      }
   }
   if (Signal==OP_SELL) {
       if (shorts> 0 ) return ;
       if (longs== 0 ) {     // First Order Placing
         Print ( "   *** MSG ***   " +msg);
         PlaceMarketOrder(OP_SELL, Lot, _bid, _SL, _TP);
      }
       if (longs> 0 ) {
         if (Mode_opp==DoClose) {       // Closing by Opposite Signal
             Print ( "   *** MSG ***   " +msg);
             Print ( "   ***   Close mode BUY by opposite signal." ); 
            ClosePositions(OP_BUY);
            PlaceMarketOrder(OP_SELL, Lot, _bid, _SL, _TP);
         }
         if (Mode_opp==DoReverse) {     // Reverse by Opposite Signal
             Print ( "Reversing BUY by opposite signal." ); 
            lot=GetMaxLot( ORDER_TYPE_BUY );
             if (IsMartingale) lot=lot*LotMult;
            ClosePositions(OP_BUY);
            PlaceMarketOrder(OP_SELL, lot, _bid, _SL, _TP);
         }
         if (Mode_opp==DoHedge) {       // Hedging by Opposite Signal
             Print ( "Hedging BUY by opposite signal." ); 
            MartinCounterB= 50 ; MartinCounterS= 50 ;
            PlaceMarketOrder(OP_SELL, GetMaxLot( ORDER_TYPE_BUY )*LotMult, _bid, _SL, _TP);
         }
      }
   }
}
//+------------------------------------------------------------------+

시장에서 포지션 개설 요청을 보내는 기능입니다. 서버 오류의 경우 지연된 반복을 추가했습니다. MetaQuotes MT5 데모에서 테스트할 때 인용/견적을 매우 자주 받았습니다.

 //+------------------------------------------------------------------+
//| Place Market Order function                                      |
//+------------------------------------------------------------------+
bool PlaceMarketOrder( int oper, double lot, double oop, double sl, double tp) {   //  mn - Magic Number

double d_sl= 0 , d_tp= 0 ;

   MqlTick stTick;
   if ( SymbolInfoTick ( _Symbol ,stTick)== false ) {
       Print ( "SymbolInfoTick function returned FALSE. Error=" , GetLastError ());
   }

   Print ( "Placing market order. Type=" +( string )oper+ ", OrderOpenPrice=" + DoubleToString (oop, _Digits )+
         ", Bid=" + DoubleToString (_bid, _Digits )+ ", Ask=" + DoubleToString (_ask, _Digits ));

   if ( MathAbs (lot-Lot)< 1 e- 5 ) {MartinCounterB= 0 ; MartinCounterS= 0 ;}
     
   if (oper==OP_BUY)  {
       for ( int i= 0 ; i< 5 ; i++) {
         if ( SymbolInfoTick ( _Symbol ,stTick)== false ) {
             Print ( "SymbolInfoTick function returned FALSE. Error=" , GetLastError ());
         }
         _ask=stTick.ask;
         d_sl=ND(_ask-sl*pips); if ( MathAbs (sl)< 1 e- 5 ) d_sl=ND( 0.0 );
         d_tp=ND(_ask+tp*pips); if ( MathAbs (tp)< 1 e- 5 ) d_tp=ND( 0.0 );
         if (m_trade.Buy(NormalizeLot(lot), NULL ,_ask,d_sl,d_tp,Comm)) { PlaySound ( "expert.wav" ); return ( true );}
         else { PlaySound ( "disconnect.wav" ); Sleep ( 5000 );}
      }
   }
   if (oper==OP_SELL) {
       for ( int i= 0 ; i< 5 ; i++) {
         if ( SymbolInfoTick ( _Symbol ,stTick)== false ) {
             Print ( "SymbolInfoTick function returned FALSE. Error=" , GetLastError ());
         }
         _bid=stTick.bid;
         d_sl=ND(_bid+sl*pips); if ( MathAbs (sl)< 1 e- 5 ) d_sl=ND( 0.0 );
         d_tp=ND(_bid-tp*pips); if ( MathAbs (tp)< 1 e- 5 ) d_tp=ND( 0.0 );
         if (m_trade.Sell(NormalizeLot(lot), NULL ,_bid,d_sl,d_tp,Comm)) { PlaySound ( "expert.wav" ); return ( true );}
         else { PlaySound ( "disconnect.wav" ); Sleep ( 5000 );}
      }
   }
     
   return ( false );
     
}
//+------------------------------------------------------------------+

새로운 바 개방 제어 기능:

 //+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
bool    IsBarNew= false ;


//+------------------------------------------------------------------+
//| Bar refreshing function                                          |
//| true - new bar opened, false - not opened                        |
//+------------------------------------------------------------------+
bool IsNewBar() {

static datetime SavedTime= iTime ( NULL , PERIOD_CURRENT , 0 );
       datetime curTime  = iTime ( NULL , PERIOD_CURRENT , 0 );

   if (curTime>SavedTime) {
         SavedTime=curTime;
         return ( true );
   }
   else return ( false );
}
//+------------------------------------------------------------------+

두 번째 위치는 첫 번째 직후에 열리며 같은 초에 티켓이 하나씩 다릅니다. 처음에는 고문의 두 번째 사본이 두 번째 차트에 매달려 있다고 가정하고 모든 것을 닫고 하나의 차트를 남겨두고 고문을 시작하도록 요청했지만 말과 고객의 스크린 샷으로 판단하면 이것은 아닙니다. 이유. 후속 위치는 한 번에 하나씩 열리며 더 이상 이중선이 없습니다. 나는 재현 할 수 없습니다. 이미 그것에 대해 머리가 깨졌습니다. MT5 데모 ICMarkets 헤지에서 고객으로 테스트. 듀플렉스의 스크린샷.


모든 고문.

파일:
 
Grigori.SB :

고문이 작성했습니다. 그가 편지를 쓴 사람은 처음 시작할 때 즉시 두 위치를 차례로 엽니다. 이 문제를 직접 재현할 수 없습니다. 도와주세요.

OnTick() 함수

CheckForOpen() 함수만 위치를 여는 역할을 합니다. 위치는 다음과 같습니다.

시장에서 포지션 개설 요청을 보내는 기능입니다. 서버 오류의 경우 지연된 반복을 추가했습니다. MetaQuotes MT5 데모에서 테스트할 때 인용/견적을 매우 자주 받았습니다.

새로운 바 개방 제어 기능:

두 번째 위치는 첫 번째 직후에 열리며 같은 초에 티켓이 하나씩 다릅니다. 처음에는 고문의 두 번째 사본이 두 번째 차트에 매달려 있다고 가정하고 모든 것을 닫고 하나의 차트를 남겨두고 고문을 시작하도록 요청했지만 말과 고객의 스크린 샷으로 판단하면 이것은 아닙니다. 이유. 후속 위치는 한 번에 하나씩 열리며 더 이상 이중선이 없습니다. 나는 재현 할 수 없습니다. 이미 그것에 대해 머리가 깨졌습니다. MT5 데모 ICMarkets 헤지에서 고객으로 테스트. 듀플렉스의 스크린샷.


모든 고문.

이러한 기능을 사용 하여 새 막대 를 제어합니다. 막대의 날짜를 복사할 때 오류가 발생합니다.

 //+------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если появился новый бар на текущем ТФ
//+------------------------------------------------------------------------------------------------------------------+
bool isNewBar()
  {
   datetime tm[];
   static datetime prevBarTime= 0 ;

   if ( CopyTime ( _Symbol , 0 , 0 , 1 ,tm)< 0 )
     {
       Print ( "%s CopyTime error = %d" , __FUNCTION__ , GetLastError ());
     }
   else
     {
       if (prevBarTime!=tm[ 0 ])
        {
         prevBarTime=tm[ 0 ];
         return true ;
        }
       return false ;
     }
   return true ;
  }
 
Aleksey Vyazmikin :

이러한 기능을 사용 하여 새 막대 를 제어합니다. 막대의 날짜를 복사할 때 오류가 발생합니다.

고맙습니다. 교체하려고 합니다. 지금까지는 내가 사용한 기능이 잘 작동했지만. 바 오픈 시간과 가격을 인쇄물로 표시하려는 아이디어가 있었는데 이것이 실수임을 분명히 알 수 있습니다.

그러나 첫 번째 위치를 열 때만 이중선이 나타나고 후속 위치가 올바르게 열리며 어드바이저가 수십 시간 동안 작업하여 수십 개를 생성한다는 것이 혼란 스럽습니다. 그리고 바 열림 제어 기능은 매번 작동합니다. 네, 그리고 조건에 따라 어드바이저는 포지션이 없을 때 첫 번째 포지션을 오픈하고, 첫 포지션을 오픈한 후 가격이 충분한 거리를 이동한 경우에만 후속 포지션을 오픈합니다.

 
Grigori.SB :

고문이 작성했습니다. 그가 편지를 쓴 사람은 처음 시작할 때 즉시 두 위치를 차례로 엽니다. 이 문제를 직접 재현할 수 없습니다. 도와주세요.

OnTick() 함수

CheckForOpen() 함수만 위치를 여는 역할을 합니다. 위치는 다음과 같습니다.

시장에서 포지션 개설 요청을 보내는 기능입니다. 서버 장애의 경우 지연과 함께 반복에 추가되었습니다. MetaQuotes MT5 데모에서 테스트할 때 인용/견적을 매우 자주 받았습니다.

새로운 바 개방 제어 기능:

두 번째 위치는 첫 번째 직후에 열리며 같은 초에 티켓이 하나씩 다릅니다. 처음에는 고문의 두 번째 사본이 두 번째 차트에 매달려 있다고 가정하고 모든 것을 닫고 하나의 차트를 남겨두고 고문을 시작하도록 요청했지만 말과 고객의 스크린 샷으로 판단하면 이것은 아닙니다. 이유. 후속 위치는 한 번에 하나씩 열리며 더 이상 이중선이 없습니다. 나는 재현 할 수 없습니다. 이미 그것에 대해 머리가 깨졌습니다. MT5 데모 ICMarkets 헤지에서 고객으로 테스트. 듀플렉스의 스크린샷.


모든 고문.

이 바에서 아직 포지션이 열리지 않았는지 어떻게 확인합니까?

 
Artyom Trishkin :

이 바에서 아직 포지션이 열리지 않았는지 어떻게 확인합니까?

아니요, 그런 수표는 없습니다.

다음과 같은 검사가 있습니다.

  • 새 막대가 열리면 첫 번째 눈금으로 위치를 열 수 있습니다.
  • 포지션이 없다면 첫 포지션을 열 수 있습니다.
저것들. 여기에서는 어떤 이유로 새 막대의 첫 번째 눈금에서 두 위치가 동시에 열립니다. 그리고 첫 번째 위치 만. 또한, 이러한 현상은 관찰되지 않는다.
 
Grigori.SB :

아니요, 그런 수표는 없습니다.

다음과 같은 검사가 있습니다.

  • 새 막대가 열리면 첫 번째 눈금으로 위치를 열 수 있습니다.
  • 포지션이 없다면 첫 포지션을 열 수 있습니다.
저것들. 여기에서는 어떤 이유로 새 막대의 첫 번째 눈금에서 두 위치가 동시에 열립니다. 그리고 첫 번째 위치 만. 또한, 이러한 현상은 관찰되지 않는다.

당신이 거기에 무엇을 가지고 있는지 이해할 시간이 없습니다. 그러나 새 막대에서 열린 위치 의 수를 확인하십시오. 그렇지 않은 경우 엽니다.

사유: