내 EA가 이중 항목을 수행합니다. - 페이지 3

 
doshur :
어머나. 그럼 잠은 도움이 안 된다?

이것을 피하기 위해 우리는 무엇을 할 수 있습니까?

그것은 나를 위해 도움이되었습니다. 나는 snelle_modas 팁과 수면을 사용했습니다. 그것은 효과가 있었다.

그러나 그 이후로 나는 거래가 열리는 방식을 개선했습니다. 이제 이러한 솔루션 중 어느 것도 필요하지 않습니다. 여기 내가 어제 angevoyageur에게 쓴 내용이 있습니다. 도움이 되기를 바랍니다.

안녕,

지난번에 해결했을 때 거래 후 절전 기능 을 사용하고있었습니다. 그러나 내 새 봇을 사용하면 더 이상 필요하지 않습니다. 아마도 거래를 여는 것이 지금은 다르게 취급되기 때문일 것입니다. 이 첫 번째 봇이 이 문제를 겪었습니다(다른 EA도 거래를 여는 방법이 이 방법 때문에 문제가 발생한 이유(예: 메타퀀트))가 이 방법을 사용했습니다.

 void SetOrder( ENUM_ORDER_TYPE type, double lot)
{
   int ticket = - 1 ;
   ResetLastError ();
   double price = 0 ;
   double ask, bid;
   ask = SymbolInfoDouble ( Symbol (), SYMBOL_ASK );
   bid = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
   if (maxSpread != 0 && NormalizeDouble (ask - bid, _Digits ) >= NormalizeDouble (maxSpread * point, _Digits )) return ; 
   if (type == ORDER_TYPE_BUY ) price = ask;
   if (type == ORDER_TYPE_SELL ) price = bid;
   trade.PositionOpen( Symbol (), type, lot, price, 0 , 0 , "" );
   Sleep ( 1000 );
   int err = GetLastError ();
   if (err > 0 ) Print (ErrorDescription(err));
}


이제 설명서에서 배운 것처럼 주문을 시작하고 더 이상 이 문제가 발생하지 않습니다.

 void open_sell( double xlot, int xTP)
{
         MqlTradeRequest mrequest;
         MqlTick latest_price;      
         MqlTradeResult mresult;   
             if (! SymbolInfoTick ( Symbol (),latest_price))
              {
               Alert ( "Error getting the latest price quote - error:" , GetLastError (), "!!" );
               return ;
              }
         ZeroMemory (mrequest);
         mrequest.action= TRADE_ACTION_DEAL ;                                 // immediate order execution
         mrequest.price = NormalizeDouble (latest_price.bid, Digits ());           // latest Bid price
         if (StopLoss!= 0 ) mrequest.sl = NormalizeDouble (latest_price.bid + StopLoss*point, Digits ()); // Stop Loss
         if (xTP!= 0 ) mrequest.tp = NormalizeDouble (latest_price.bid - xTP*point, Digits ()); // Take Profit
         mrequest.symbol = Symbol ();                                           // currency pair
         mrequest.volume = xlot;                                               // number of lots to trade
         mrequest.magic = EA_Magic;                                           // Order Magic Number
         mrequest.type= ORDER_TYPE_SELL ;                                     // Sell Order
         mrequest.type_filling = ORDER_FILLING_FOK ;                           // Order execution type
         mrequest.deviation= 100 ;                                             // Deviation from current price
         //--- send order
         OrderSend (mrequest,mresult);
         // get the result code
         if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //Request is completed or order placed
           {
          // Print("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
             Print ( "The Sell order request could not be completed -error:" , GetLastError ());
             ResetLastError ();
             return ;
           }
}


아마도 이것이 도움이 될 것입니다. 나는 doshur가 이 행동을 일으켰을 때 했던 것과 유사한 방식으로 탑 오픈 거래를 사용한다는 것을 알았습니다.

안부
 
그래서 ctrade 클래스에 문제가 있습니까?

내 코드를 변경하기 전에 누구든지 이를 확인할 수 있습니까?
 
doshur :
그래서 ctrade 클래스에 문제가 있습니까?

내 코드를 변경하기 전에 누구든지 이를 확인할 수 있습니까?

ctrade 클래스를 제거한 후에는 더 이상 이 문제가 발생하지 않는다고 말할 수 있습니다.

거래를 여는 "구식" 방식을 사용하는 두 번째 버전의 EA를 만들고 도움이 되는지 확인할 수 있습니다.


반면에 수면 기능 은 저에게도 문제를 해결했습니다.

Documentation on MQL5: Common Functions / Sleep
Documentation on MQL5: Common Functions / Sleep
  • www.mql5.com
Common Functions / Sleep - Documentation on MQL5
 
doshur :
그래서 ctrade 클래스에 문제가 있습니까?

내 코드를 변경하기 전에 누구든지 이를 확인할 수 있습니까?
기다려주시면 최대한 빨리 답변해 드리겠습니다. 마켓이 열리면 문제를 재현하도록 노력하겠습니다.
 
중개인이 여기에서 따로 노는지는 모르겠지만 우리 중개인은 같은 것 같습니다. 알파리.

필요한 경우 브로커 이름을 제거하십시오 .
 
Klammeraffe :

ctrade 클래스를 제거한 후에는 더 이상 이 문제가 발생하지 않는다고 말할 수 있습니다.

거래를 여는 "구식" 방식을 사용하는 두 번째 버전의 EA를 만들고 도움이 되는지 확인할 수 있습니다.


반면에 수면 기능 은 저에게도 문제를 해결했습니다.

이것은 흥미로운 점입니다.

손절매 값을 조정하기 위해 ctrade 클래스를 사용합니다.

      
My_Trade.PositionModify( Symbol (), 
                         NormalizeDouble (dPositionStoploss,   Digits ()), 
                         NormalizeDouble (dPositionTakeProfit, Digits ())
                        ); 


위치 자체를 여는 것은 "구식" 방식을 사용하여 수행됩니다.

mrequest.action         = TRADE_ACTION_DEAL ;                             // immediate order execution stoploss en takeprofit worden aangepast mrequest.price          = NormalizeDouble (Latest_Price.ask, Digits ());   // latest ask price mrequest.symbol         = Symbol ();                                     // currency pair mrequest.volume         = dTradePosition_Size;                           // number of lots to trade mrequest.magic          = EA_Magic_Number;                               // Order Magic Number mrequest.type           = ORDER_TYPE_BUY ;                               // Buy Order mrequest.type_filling   = ORDER_FILLING_RETURN ;                         // Order execution type mrequest.deviation      = 1000 ;                                         // Max prijs afwijking                                                                                                        OrderSend (mrequest,mresult); //--- send order

손절매 주문을 조정할 때 ctrade 클래스가 새로운 이중 주문을 보낼 수 있습니까? 이상한 것 같다.

 
Klammeraffe :

ctrade 클래스를 제거한 후에는 더 이상 이 문제가 발생하지 않는다고 말할 수 있습니다.

거래를 여는 "구식" 방식을 사용하는 두 번째 버전의 EA를 만들고 도움이 되는지 확인할 수 있습니다.


반면에 수면 기능 은 저에게도 문제를 해결했습니다.

ctrade 클래스를 살펴보면. 이 클래스와 mqltraderequest 방식을 사용하는 데 차이가 있습니까?
 
snelle_moda :

그건 좋은 지적이야. BID 가격의 변경 사항만 사용해야 할 수도 있습니다.

차트의 BAR도 BID 가격을 기반으로 합니까?


내 EA의 트리거 신호의 경우 1분 BAR이 기반으로 하는 가격의 변화에만 관심이 있습니다.

Snelle_moda 주문을 보내기 위해 mqltraderequest 를 사용하여 여전히 이중 항목을 얻습니까?
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure - Documentation on MQL5
 

PositionSelect()가 클라이언트 측 또는 서버 측을 확인하는지 물어봐도 될까요?

나는 문제가 서버(브로커 측)가 요청을 처리하고 클라이언트 측이 업데이트되지 않은 지연으로 인해 발생한다는 강한 느낌을 받습니다. 이것이 PositionSelect()가 다시 실행되는 이유입니다

cTrade 대 MqlTradeRequest 방식을 사용할 때 차이가 없으며 Sleep 기능은 PositionSelect()가 다시 실행되어 이중 항목이 발생하기 전에 클라이언트 측이 "업데이트"되도록 모든 것을 지연시키는 데 도움이 되어야 한다고 강력하게 생각합니다. 나의 일지 탭에서 확인 > 2013.12.20 08:35:00 거래 '800****': 313ms 후 실행을 위해 배치된 시장에서 0.01 EURUSD 교환 매수 <

400 이상 잠을 자면 안전해야합니까???

어떻게 생각하나요?

Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure - Documentation on MQL5
 
doshur :
Snelle_moda 주문을 보내기 위해 mqltraderequest 를 사용하여 여전히 이중 항목을 얻습니까?


2013년 3월 10일 이후로 1번의 이중 입력이 더 있었습니다. 주문을 보낼 때 두 가지 방법을 모두 사용합니다. 내 이전 게시물을 참조하십시오.