찻주전자의 질문 - 페이지 216

 
2 Yedelkin, 나는 고문이 잠에 빠져 일을 멈 춥니 다. 터미널을 다시 시작해야만 그를 깨우고 작동합니다.

2 sergeev, MQL5에서 시계가 멈추면 잠들었다는 의미입니다.

 
Yedelkin : 생각은 명시적 이벤트 지연의 가장 간단한 예로서 무한 루프로 돌아갑니다.

여기에 질문이 있습니다. 거래 요청을 보낼 때 어떤 기능을 사용합니까?

G001 : 2 Yedelkin, 고문이 잠에 빠져 일을 멈 춥니 다. 터미널을 다시 시작해야만 그를 깨우고 작동합니다.

모든 일에는 이유와 설명이 있어야 합니다. 지금까지 '작동을 멈춘' 것처럼 보이는 현상을 포함한다.

 
G001 :
2 Yedelkin, 나는 고문이 잠에 빠져 일을 멈 춥니 다. 터미널을 다시 시작해야만 그를 깨우고 작동합니다.

2 sergeev, MQL5에서 시계가 멈추면 잠들었다는 의미입니다.

어떤 MQL 이벤트(EA의 어떤 기능)에서 "잠자기 상태일 때 포착"합니까?
 
Yedelkin :

여기에 질문이 있습니다. 거래 요청을 보낼 때 어떤 기능을 사용합니까?

모든 일에는 이유와 설명이 있어야 합니다. 지금까지 '작동을 멈춘' 것처럼 보이는 현상을 포함한다.

 //+------------------------------------------------------------------+
//| Open Orders                                                      |
//+------------------------------------------------------------------+
// Perform analysis and open orders on new candle/bar 
   if ((TradeNewBar != true )||(IsNewBar() == true ))
  {
//----- Open BUY_STOP
     if (TrendDetection() == BULL && TotalBullStopOrders() < 1 && TotalBullPositions() < 1 )
    {
      request.action = TRADE_ACTION_PENDING ;
      request.magic = Magic;
      request.symbol = Symbol ();
      request.volume = Volume();
      request.price= NormalizeDouble (Ask+OrderDrive* _Point , _Digits );
      request.sl = NormalizeDouble (request.price - StopLoss* _Point , _Digits );
      request.tp = NormalizeDouble (request.price + TakeProfit* _Point , _Digits );
      request.type= ORDER_TYPE_BUY_STOP ;
      request.type_filling= ORDER_FILLING_RETURN ;
      request.comment=Coments;
       int ResBull = - 1 ;
       while (ResBull < 1 )
      {
         if ( OrderCheck (request,check))
        {
          ResBull = OrderSend (request,result);
        }
         if (( MQL5InfoInteger ( MQL5_TESTING )|| MQL5InfoInteger ( MQL5_OPTIMIZATION ))) break ;
      }
       Print ( "BuyStop Order Set " );
       if (UseSound == true ){ PlaySound (OrderSound);}
       Print (ResultRetcodeDescription(result.retcode));
    }
//----- Open SELL_STOP
     if (TrendDetection() == BEAR && TotalBearStopOrders() < 1 && TotalBearPositions() < 1 )
    {
      request.action = TRADE_ACTION_PENDING ;
      request.magic = Magic;
      request.symbol = Symbol ();
      request.volume = Volume();
      request.price= NormalizeDouble (Bid-OrderDrive* _Point , _Digits );
      request.sl = NormalizeDouble (request.price + StopLoss* _Point , _Digits );
      request.tp = NormalizeDouble (request.price - TakeProfit* _Point , _Digits );
      request.type= ORDER_TYPE_SELL_STOP ;
      request.type_filling= ORDER_FILLING_RETURN ;
      request.comment=Coments;
       int ResBear = - 1 ;
       while (ResBear < 1 )
      {
         if ( OrderCheck (request,check))
        {
          ResBear = OrderSend (request,result);
        }
         if (( MQL5InfoInteger ( MQL5_TESTING )|| MQL5InfoInteger ( MQL5_OPTIMIZATION ))) break ;
      }
       Print ( "SellStop Order Set " );
       if (UseSound == true ){ PlaySound (OrderSound);}
       Print (ResultRetcodeDescription(result.retcode));                             
    }
  }
 
sergeev :
어떤 MQL 이벤트(EA의 어떤 기능)에서 "잠자기 상태일 때 포착"합니까?

죄송합니다. 질문하신 내용을 잘 이해하지 못합니다.

시계는 void OnTick () 바로 뒤에 있습니다.

 void OnTick ()
{
   Comment ( "Local Time: " + TimeToString ( TimeLocal (),TIME_MINUTES|TIME_SECONDS));
 
sergeev :
어떤 MQL 이벤트(EA의 어떤 기능)에서 "잠자기 상태일 때 포착"합니까?
예, 전문가가 "잠들었다"는 것을 시각적으로 결정합니다. 차트의 주석에 있는 시간과 컴퓨터의 시간을 비교합니다. 이벤트를 사용하지 않습니다.
 

누구든지 고문의 조건을 도울 수 있습니까?

어드바이저가 포지션을 청산 한 후 반대 포지션으로 같은 포지션을 즉시 오픈하도록 강제하고 싶습니다

예를 들어, 1개의 매도 및 1개의 매수 포지션만 2개 열렸습니다. 그 중 하나가 마감되었습니다(예: TP 또는 SL로 구매). 고문이 새 구매 위치를 열고 새 판매를 원합니다.

2 매도 포지션 1 매수 포지션

아마도 누군가는 반대의 경우와 함께 닫힌 거래가 열리는 일종의 공식을 제시할 것입니다.

또는 다른 방법으로 .. 나는 이미 내가 아는 모든 것을 시도했습니다 ((( 작동하지 않습니다 :, (

파일:
SellBuY.mq4  3 kb
 
Yedelkin :
예, 전문가가 "잠들었다"는 것을 시각적으로 결정합니다. 차트의 주석에 있는 시간과 컴퓨터의 시간을 비교합니다. 이벤트를 사용하지 않습니다.
바르게. 이것은 조언자가 작동을 멈출 때 프로그래밍 방식으로 찾는 방법에 대한 나의 요청이었습니다.
 

G001ResBear = OrderSend (request,result);

분명한. OrderSend() 함수를 사용합니다. 이 버전에서는 OrderSend () 함수가 이 응답을 기다려야 하기 때문에 OnTick() 함수에 의한 NewTick 이벤트 처리 지연이 서버 응답 부족으로 인한 것일 수 있습니다. 관심이 있는 경우 서버의 응답을 기다리지 않는 OrderSend() 함수 대신 비동기 복사본을 사용해 보십시오. 이 경우 Expert Advisor의 작업도 중단됩니까?
 
Yedelkin :
분명한. OrderSend() 함수를 사용합니다. 이 버전에서는 OrderSend () 함수가 이 응답을 기다려야 하기 때문에 서버 응답이 부족하여 지연이 발생한 것으로 보입니다. 관심이 있다면 OrderSend() 함수 대신 서버의 응답을 기다리지 않는 비동기 복사본을 사용해 보십시오. 이 경우 Expert Advisor의 작업도 중단됩니까?

고맙습니다. 저도 비동기식 옵션을 사용할까 생각했는데 브로커가 트랜잭션을 계산하지 않는지 모르겠습니다. 하지만 노력하겠습니다.