어떤 디자인이 맞습니까? - 페이지 6

 
valenok2003 :
while 코드에서는 스레드가 사용 중인 동안에만 지연됩니다.

그런 다음 요금을 업데이트해야 합니다. RefreshRates(). 그렇지 않으면 이전 요청 및 입찰 값을 사용하게 됩니다. 또는 MarketInfo에서 요청/입찰을 요청하십시오.
 
VladislavVG :

그런 다음 요금을 업데이트해야 합니다. RefreshRates(). 그렇지 않으면 이전 요청 및 입찰 값을 사용하게 됩니다. 또는 MarketInfo에 요청하십시오.

그래서 개가 뒤돌아본 곳입니다.

이 빌드는 다음과 같이 작동했습니다.

 //+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for ( int trade = OrdersTotal ()- 1 ; trade >= 0 ; trade--) 
  {
    OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol ()) 
    { 
      while (!IsTradeAllowed()) Sleep ( 1000 );
      RefreshRates();
      if (OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), 5 , CLR_NONE );
      if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), 5 , CLR_NONE );
    }
  }
//----
   return ( 0 );
}
//+------------------------------------------------------------------+

어쨌든 처음에는 제대로 작동했습니다.

덕분에!

 
VladislavVG :

그런 다음 요금을 업데이트해야 합니다. RefreshRates(). 그렇지 않으면 이전 요청 및 입찰 값을 사용하게 됩니다. 또는 MarketInfo에서 요청/입찰을 요청하십시오.

고맙습니다!

제 어드바이저에서도 수정하겠습니다..

 
valenok2003 :



그래서 개가 뒤돌아본 곳입니다.

이것이 디자인이 작동한 방식입니다.

어쨌든 처음에는 제대로 작동했습니다.


거의 - 하나 이상의 조건을 수정해야 합니다.


  for ( int trade = OrdersTotal ()- 1 ; trade >= 0 ; trade--) 
  {
    if (! OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)) break ;
    ...........................
주문이 나오지 않으면 할 일이 없습니다.

행운을 빕니다.

 
VladislavVG :


거의 - 하나 이상의 조건을 수정해야 합니다.

주문이 나오지 않으면 할 일이 없습니다.

네, 논리적입니다. 이것은 사이클에서 벗어난 실수입니다.
 while ( OrdersTotal ()> 0 )
 
valenok2003 :
다섯
거기에는 슬리피지 = 5가 있었고 이것은 5자리 따옴표로는 충분하지 않습니다.
 

그래서 결국:


 //+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for ( int trade = OrdersTotal ()- 1 ; trade >= 0 ; trade--) 
  {
    if (! OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)) break ;
    if (OrderSymbol() == Symbol ()) 
    { 
      while (!IsTradeAllowed()) Sleep ( 1000 );
      RefreshRates();
      if (OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), slippage, CLR_NONE );
      if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), slippage, CLR_NONE );
    }
  }
//----
   return ( 0 );
}
//+------------------------------------------------------------------+

아니면 다른 의견이 있습니까?

 
khorosh :
거기에서 당신은 슬리피지(slippage) = 5를 가지고 있었고 이것은 다섯 자리 따옴표로 충분하지 않습니다.
비교적 조용한 시장에서 5는 충분히 IMHO입니다.
 
한 번에 코드 기반에서 다른 유형을 닫기 위한 세트를 게시했습니다.
파일:
 
https://www.mql5.com/ru/code/mt4