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

 
valenok2003 :

결과는 다음과 같은 스크립트입니다.

질문 - 왜 항상 모든 주문을 마감하지 않습니까? 예를 들어, 연속으로 세 개의 Sell을 연 다음 스크립트로 닫으려고 하면 하나 또는 둘 또는 모두 닫힐 수 있습니다. 이유는 무엇입니까?

스크립트가 필요합니까?

그러면 while 루프 문 이 필요하지 않으며 스크립트는 어쨌든 루프에서 작동합니다 .

스크립트는 다음과 같은 것이 필요합니다 ...

왜 똑똑해야 하고 모든 것이 오랫동안 코드베이스에 작성되었는지, 링크는 기억나지 않지만 여기에 모든 미결 주문을 닫는 스크립트가 있습니다.

 //+------------------------------------------------------------------+
//|                                               CloseAllOrders.mq4 |
//|                       Copyright © 2008, PRMQuotes Software Corp. |
//|                                           Jedimedic77@gmail.com  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, PRMQuotes Software Corp."
#property link       ""
//+------------------------------------------------------------------+
//| EX4 imports                                                      |
//+------------------------------------------------------------------+
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| global variables to program:                                     |
//+------------------------------------------------------------------+
double Price[ 2 ];
int     giSlippage;
bool    CloseOpenOrders = true;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() {
   int iOrders= OrdersTotal ()- 1 , i;
  
   if (CloseOpenOrders) {
     for (i=iOrders; i>= 0 ; i--) {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() && 
      !OrderClose(OrderTicket(),OrderLots(),Price[ 1 -OrderType()],giSlippage)) Print (OrderError());
    }
  }
}
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError() {
   int iError= GetLastError ();
   return ( StringConcatenate ( "Order:" ,OrderTicket(), " GetLastError()=" ,iError, " " ,ErrorDescription(iError)));
}
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo() {
  RefreshRates();
  Price[ 0 ]=MarketInfo(OrderSymbol(),MODE_ASK);
  Price[ 1 ]=MarketInfo(OrderSymbol(),MODE_BID);
   double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
   if (dPoint== 0 ) return (false);
  giSlippage=(Price[ 0 ]-Price[ 1 ])/dPoint;
   return (Price[ 0 ]> 0.0 && Price[ 1 ]> 0.0 );
}
//+------------------------------------------------------------------+
 
valenok2003 :

결과는 다음과 같은 스크립트입니다.

질문 - 왜 항상 모든 주문을 마감하지 않습니까? 예를 들어, 연속으로 세 개의 Sell을 연 다음 스크립트로 닫으려고 하면 하나 또는 둘 또는 모두 닫힐 수 있습니다. 이유는 무엇입니까?
그리고 따옴표는 몇 자릿수입니까?
 
khorosh :
그리고 따옴표는 몇 자릿수입니까?
다섯
 
Martingeil :

스크립트가 필요합니까?

물론 감사합니다. 하지만 미리 만들어진 스크립트를 가져오는 것은 쉽습니다. 그 이유가 무엇인지 이해하고 싶습니다.
 
Martingeil :

스크립트가 필요합니까?

그러면 while 루프 문 이 필요하지 않습니다. 스크립트는 이미 루프 형식으로 작동합니다 .


스크립트는 한 번만 작동합니다. 거기에는 자체 루프가 없으며 한 번도 없었습니다.

Valenok, 일반적으로 모든 주문을 마감하려면 스크립트가 필요합니까, 아니면 이 기호만 필요합니까? 체납자를 제거하려면?

 
Martingeil :

스크립트가 필요합니까?

그러면 while 루프 문 이 필요하지 않습니다. 스크립트는 이미 루프 형식으로 작동합니다 .

스크립트는 다음과 같은 것이 필요합니다 ...

왜 똑똑해야 하고 모든 것이 오랫동안 코드베이스에 작성되었는지, 링크는 기억나지 않지만 여기에 모든 미결 주문을 닫는 스크립트가 있습니다.

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

스크립트는 한 번만 작동합니다. 거기에는 자체 루프가 없으며 한 번도 없었습니다.

Valenok, 일반적으로 모든 주문을 마감하려면 스크립트가 필요합니까, 아니면 이 기호만 필요합니까? 체납자를 제거하려면?

네 맞아요 그렇게 안넣었어요 틱 상관없이 말하고싶었어요..
 
Techno :

스크립트는 한 번만 작동합니다. 거기에는 자체 루프가 없으며 한 번도 없었습니다.

Valenok, 일반적으로 모든 주문을 마감하려면 스크립트가 필요합니까, 아니면 이 기호만 필요합니까? 체납자를 없애려면?



열린 주문, 하나의 기호만. 우리는 연기를 건드리지 않습니다.

농담은 코드베이스에서 비판받은 코드가

 int start()
{
//----
  while ( OrdersTotal ()> 0 )
  {
    for ( int i= 0 ; i < OrdersTotal (); i++)                                                        
    {                                                                                          
      if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true)
      {
        OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 5 );  
      }
    }
  }                                               
//----
   return ( 0 );
}

문제없이 작동하고 개선하기 시작했을 때 문제가 시작되었습니다.

추신:

라인 오류에 대해

 for ( int i= 0 ; i < OrdersTotal (); i++)

나는 이미 모든 것을 이해했다

 
valenok2003 :



열린 주문, 하나의 기호만. 우리는 연기를 건드리지 않습니다.

otlozhniks와 즉시 오리를 만들고 그대로 두십시오. 일반적으로.

 int start()
{
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
    {
     if ( OrderSelect (i,SELECT_BY_POS)&&OrderSymbol()== Symbol ())
       switch (OrderType())
         {
         case 0   : OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Bid, Digits ), 5 ); break ;
         case 1   : OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Ask, Digits ), 5 ); break ;
         default : OrderDelete(OrderTicket()); break ;
         }
    }
        
}
 
Martingeil :
네 맞아요 그렇게 안넣었어요 틱 상관없이 말하고싶었어요..


나는 이것을 알고 있다