2개의 EMA 교차 EA를 만들었습니다. 조언이 필요합니다. - 페이지 4

 
prupru :

이제 더 큰 문제가 생겼습니다. 브로커는 부분적으로 주문을 실행하는 경향이 있습니다.

고객님, 안녕하세요,

귀하의 거래가 가격 587.318에 부분적으로 열렸습니다(15.84개 중 2.32개).

이 문제에 대해 추가 질문이 있는 경우 주저하지 말고 당사에 문의하십시오.

감사합니다.

브로커.

지원 내용은 다음과 같습니다.

변동성이 높거나 유동성이 낮은 기간에는 지정가 주문이 부분적으로 실행될 수 있습니다. 이는 가격이 충족되면 포지션이 즉시 전체 또는 부분적으로 채워진다는 것을 의미합니다. 귀하의 주문이 부분적으로 실행된 경우 통지서를 수신한 것입니다.

부분적으로 닫혀 있음에도 불구하고 모든 주문을 닫는 방법을 알고 있습니다 . OrdersTotal() > 0인 동안 모든 주문 닫기를 수행해야 하지만 주문이 부분적으로 열릴 때 아직 무엇을 해야 할지 모르겠습니다.

편집하다:

올바른 Symbol 및 magicnumber 순서를 확인해야한다는 것을 깨달았습니다. 조금 더 어렵습니다.

편집: 부분 마감이 있더라도 주문을 마감해야 하는 모든 주문 닫기 기능이 있습니다.


 //Close all my Orders
void CloseAllOrders()
{
int notMyOrders = 0 ;

 while ( OrdersTotal ()>notMyOrders)
 {
 notMyOrders = 0 ;
 for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false )         break ;
   if ( OrderMagicNumber ()!=MagicNumber || OrderSymbol ()!= Symbol ()) {notMyOrders++; continue ;}
   if ( OrderType ()<= 1 )CloseOrder();
         
   }
 }
return ;
}  
다시 쓴
 
deVries :

다시 쓴


와!

저에게는 조금 까다롭습니다. 저는 그것을 얻기 전에 4-5번 정도 읽었습니다. 감사해요!

그리고... OrderSelect 가 false를 반환하면 어떻게 됩니까?

orderselect는 얼마나 자주 false를 반환합니까? 그것이 가능합니까?

 
prupru :


와!

그것은 나를 위해 조금 까다 롭습니다. 나는 그것을 얻기 전에 4-5 번 정도 읽었습니다. 감사해요!

그리고... OrderSelect 가 false를 반환하면 어떻게 됩니까?

orderselect는 얼마나 자주 false를 반환합니까? 그것이 가능합니까?


 for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false )         break ;

나는 = 0

루프에서 돌아온다

나는 = -1

if ( OrderSelect (-1, SELECT_BY_POS , MODE_TRADES )== false ) break ; // ==> 거래 확인 을 끝내고 루프를 끊습니다.

다음 CloseOrder()

 //CloseOrder
void CloseOrder()
{ double PR= 0 ;
 while (! IsTradeAllowed ()) Sleep ( 10 );
 RefreshRates ();
 if ( OrderType ()== OP_BUY )  PR= Bid ;
 if ( OrderType ()== OP_SELL ) PR= Ask ;
 if (! OrderClose ( OrderTicket (), OrderLots (),PR,Slippage,CLR_NONE))
  {
   Print ( "Close order error: " ,GetLastError());
   Print ( "Type " , OrderType (), " PR " ,PR, " Ask " , Ask , " Bid " , Bid , " OrderTicket " , OrderTicket (), " OrderLots " , OrderLots ());
  }
return ;}
//--------------------------- end of close order

GetLastError() 에서 반환될 수 있는 일반적인 오류

닫기에 실패하면 tradecontext too busy 또는 기타 오류와 같은 오류에 대해서도 다음 항목이 실패할 수 있습니다.

그래서 당신은 이러한 상황이 많이 발생하지 않도록 무엇을 할 수 있습니까 ??

 
deVries :


그래서 당신은 이러한 상황이 많이 발생하지 않도록 무엇을 할 수 있습니까 ??

아직 모른다. 나는 그것에 대해 생각해야 해요.

나는 지금 다른 문제에 봉착해 있다.

내 EA를 Windows 2003 VPS에 설치했는데 이제 "시간 초과로 종료됨" 오류가 반환되지만 집에 있는 PC에서는 그런 오류를 본 적이 없습니다.

그리고 오류는 내 동안 닫기 및 열기 주문 주기가 실행되는 시간이 아니라 전문가 jush가 교차를 확인하고 유휴 상태가 될 때 나타납니다.

내 말은, 프로그램은 새 막대 열기, trailingstop = 0을 확인하므로 후행 중지 기능 호출이 없습니다. 그런 다음 새 막대가 열리면 EMA 교차를 확인하면 교차가 없습니다(시간 초과 오류가 발생한 시간에는 EMA 라인이 교차하지 않았습니다). , 그래서 프로그램은 (0)을 반환합니다

주기가 없습니다! 시간 초과로 어떻게 종료할 수 있습니까?

 
prupru :

아직 모른다. 나는 그것에 대해 생각해야 해요.

나는 지금 다른 문제에 봉착해 있다.

내 EA를 Windows 2003 VPS에 설치했는데 이제 "시간 초과로 종료됨" 오류가 반환되지만 집에 있는 PC에서는 그런 오류를 본 적이 없습니다.

그리고 오류는 내 동안 닫기 및 열기 주문 주기가 실행되는 시간이 아니라 전문가 jush가 교차를 확인하고 유휴 상태가 될 때 나타납니다.

내 말은, 프로그램은 새 막대 열기, trailingstop = 0을 확인하므로 후행 중지 기능 호출이 없습니다. 그런 다음 새 막대가 열리면 EMA 교차를 확인하면 교차가 없습니다(시간 초과 오류가 발생한 시간에는 EMA 라인이 교차하지 않았습니다). , 그래서 프로그램은 (0)을 반환합니다

주기가 없습니다! 시간 초과로 어떻게 종료할 수 있습니까?


이것은 사이클이 아닙니다 ??

 while (! IsTradeAllowed ()) Sleep ( 10 );
 
deVries :


이것은 사이클이 아닙니다 ??


내 말은 EA가 종료되었을 때 EMA 라인이 교차하지 않았기 때문에 NewOrder 함수 가 호출되지 않았기 때문에 말하는 주기(NewOrder 함수 내부에 있음)가 실행되지 않았음을 의미합니다.

추가된 IsStopped 조건

 while ( (! IsTradeAllowed ()) && (! IsStopped ()) ) Sleep ( 10 );
 while ( (LotRemains> 0 ) && (! IsStopped ()) )
 while ( ( OrdersTotal ()> 0 ) && (! IsStopped ()) ) 
 
VPS 프로세서 리소스가 부족하여 시간 초과 오류가 나타날 수 있습니다. 더 비싼 계획으로 전환했으며 Windows uodate와 같은 무거운 것을 실행할 때까지 볼 수 없습니다.