[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 244

 
MaxZ :

안녕하세요.

질문: OrderSend() 함수가 실행 후 "0" 또는 "-1"보다 작은 값을 반환할 수 있습니까? 누구든지 이와 같은 것을 만난 적이 있습니까? 또는 "문서"에 제공된 정보는 신뢰할 수 있습니다.

추신: 저는 Telepath로 일하면서 다른 사람의 코드에서 오류를 찾고 있습니다...

하이!

글쎄, 왜 안되지? 예를 들어, 재 견적 으로 인해 주문이 열리지 않은 경우 ...

이렇게 하려면 실제로 주문을 여는 주기가 있습니다. 예를 들어 다음과 같이 오류 처리가 있는 열기 시도 횟수입니다.

 int NumberOfTry = 25 ;
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+

void WmOrderSend( string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0 )
{
   color clr;
   datetime opentime;
   int ticket;
   int error;
  
   comment = WindowExpertName () + " " + GetNameTF( Period ()) + " " + comment;
   int msl = MarketInfo (symbol, MODE_STOPLEVEL);
   clr = CLR_NONE ;
   if (cmd == OP_BUY)  clr = ColorBuy;
   else if (cmd == OP_SELL)  clr = ColorSell;   
   if ((expiration > 0 ) && (expiration < TimeCurrent ()))   expiration = 0 ;
  
   for ( int try = 1 ; try <= NumberOfTry; try++)
   {
       if (! IsTesting () && (! IsExpertEnabled () || IsStopped ()))       break ;   
       while (! IsTradeAllowed ())       Sleep ( 5000 );
    
       RefreshRates ();
      opentime = TimeCurrent ();
      ticket = OrderSend (symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
       if (ticket > 0 )
         if (UseSound)      { PlaySound ( "ok.wav" ); break ;}      
       else
      {
         error = GetLastError ();
         if (error == ERR_TRADE_TIMEOUT)
         {
             Sleep ( 1000 * 66 );
             if (ExistOrders(symbol, cmd, magic, opentime))
            {
               if (UseSound) { PlaySound ( "ok.wav" ); break ;}
            }
         }
        
         Print ( "Error(" , error, ") set order: " , ErrorDescription(error), ", try " , try);
         continue ;
      }
      
       Print ( "Error(" , error, ") set order: " , ErrorDescription(error), ", try " , try);
       Print ( "Ask=" , Ask, "  Bid=" , Bid, "  symbol=" , symbol, "  volume=" , volume, "  cmd=" , GetNameOP(cmd), "  price=" , price, "  stoploss=" , stoploss, "  takeprofit=" , stoploss, "  magic=" , magic);
       if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
        {
         IsExpertFailed = true;
         break ;
        }      
       if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
        {
         Sleep ( 1000 * 300 ); 
         break ;
        }      
       if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS))     Sleep ( 1000 * 100 );      
       if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS))       break ;      
       if (error == ERR_TRADE_CONTEXT_BUSY) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 );
      
       if (error == ERR_TRADE_EXPIRATION_DENIED )  {expiration = 0 ; continue ;}      
       if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE))   Sleep ( 1000 * 7.7 );
   }      
}
 
Roman. :

하이!

글쎄, 왜 안되지? 예를 들어, 재 견적으로 인해 주문이 열리지 않는 경우 ...

이봐 로만.

일반적 으로 OrderSend() 함수 는 오류가 발생하면 "-1"을 반환하기 때문에... "0"이 아니라 "-1"보다 작지 않습니다. 그러나 여전히 누군가에게 선례가 있었을까요?

 
MaxZ :

이봐 로만.

일반적으로 OrderSend() 함수는 오류가 발생하면 "-1"을 반환하기 때문에... "0"이 아니라 "-1"보다 작지 않습니다. 그러나 여전히 누군가에게 선례가 있었을까요?

그건 그렇고, 오류를 희생시키면서 흥미로운 주제입니다. 0이 반환되면 오류가없고 브로커가 주문을 수락한다는 것을 배웠습니다. 허용되지 않으면 오류 가 반환되지만 이는 0보다 큽니다. OrderSend () 연산자에 대한 설명에는 "...또는 실패의 경우 -1" 항목이 있습니다. 그러나 브로커가 -1을 반환하려면 어떤 유형의 오류가 있어야 합니까? 누군가 알고 있지 않을까요?
 
MaxZ :

이봐 로만.

일반적으로 OrderSend() 함수는 오류가 발생하면 "-1"을 반환하기 때문에... "0"이 아니고 확실히 "-1"보다 작지 않습니다. 그러나 여전히 누군가에게 선례가 있었을까요?


주문 send()가 "0"을 반환하고 훨씬 더 < -1인 경우 특정 주방에서 거래해야 할 것입니다. :-)
 
paladin80 :
그건 그렇고, 오류를 희생시키면서 흥미로운 주제입니다. 0이 반환되면 오류가없고 브로커가 주문을 수락한다는 것을 배웠습니다. 허용되지 않으면 오류 가 반환되지만 이는 0보다 큽니다.
GetLastError() 함수가 0을 반환합니까? 아니면 여전히 OrderSend() 함수에 대해 쓰고 있습니까?


팔라딘80 :
OrderSend () 연산자에 대한 설명에는 "...또는 실패의 경우 -1" 항목이 있습니다. 그러나 브로커가 -1을 반환하려면 어떤 유형의 오류가 있어야 합니까? 누군가 알고 있지 않을까요?

OrderSend()는 "-1"을 반환합니다. 그리고 GetLastError() 함수를 이용하여 에러의 종류를 확인해야 합니다!! 혼동하지 마세요... 오류 코드 "1"이 있는데, 이는 "오류는 없지만 결과는 알 수 없음"을 의미합니다... 하지만 코드 "-1"에 오류가 있는 것을 본 적이 없으며 오류가 있다고 생각합니다. 없음! :디

 
MaxZ :
GetLastError() 함수가 0을 반환합니까? 아니면 여전히 OrderSend() 함수에 대해 쓰고 있습니까?


OrderSend()는 "-1"을 반환합니다. 그리고 GetLastError() 함수를 이용하여 에러의 종류를 확인해야 합니다!! 혼동하지 마세요... 오류 코드 "1"이 있는데, 이는 "오류는 없지만 결과는 알 수 없음"을 의미합니다... 하지만 코드 "-1"에 오류가 있는 것을 본 적이 없으며 오류가 있다고 생각합니다. 없음! :디


어쩌면 내가 정말로 망쳤을 수도 있습니다. 다시 한 번 OrderSend 및 오류에 대해 자세히 읽었습니다. 아마도 요점은 브로커가 주문을 수락하면 티켓 번호를 반환하고 이 작업에 대한 GetLastError 가 0을 표시한다는 것입니다. 수락하지 않으면 -1이고 GetLasError는 0보다 큰 오류 번호를 표시합니다.
 

안녕하세요. 참조점을 설정할 수 있는 기능이 있는 period_converter 를 어디서 구할 수 있는지 알려주세요. 예를 들어 D1에서 D2 차트를 만들어야 하고 시작 시 YYY.MMM.DDD HH.MM을 설정하고 이 날짜부터 양초 변환을 시작합니다.

어떻게 든 나는 오랫동안 비슷한 것을 찾았지만 (내 의견으로는,이 포럼에서도), 어떤 이유로 짝수에서 변환을 시작하고 싶지 않습니다 (홀수에서 시작하고 그게 다입니다) 무엇을 말해줄 수 있습니까? 코드를 변경하거나 직접 변경하십시오. 나는 매우 감사하게 될 것입니다. 여기 내가 찾은 것이 있습니다.

파일:
 
안녕하세요! 표시기에서 기간을 전환할 수 있습니까? 창의 플랫폼에서 시간대는 어떻게 전환됩니까?
 

여러분 모두에게

저는 초보자이고 최근에 forex와 함께 일하고 있습니다. 지역 전문가에게 조언을 구하고 싶습니다.

나는 MT4에서 터미널로 일한다

통화 쌍에 대한 차트로 작업할 때 척도를 전환하는 것이 편리합니다. "M1", "M5",...

따라서 M1 척도에는 지난 38시간 동안의 이력이 약 2000개의 양초 형태로, M5 270시간에는 약 2000개의 양초 형태로 표시됩니다.

동시에 첫 번째 경우 양초의 시간 프레임은 60초가 되고 두 번째 경우에는 470초가 됩니다. 어떻게든 270시간(혹은 그 이상)의 역사를 60초의 양초로 나누는 것이 가능할까?

미리 감사합니다

 
paladin80 :
어쩌면 내가 정말로 망쳤을 수도 있습니다. 다시 한 번 OrderSend 및 오류에 대해 자세히 읽었습니다. 아마도 요점은 중개인이 주문을 수락하면 티켓 번호를 반환하고 이 작업에 대한 GetLastError가 0을 표시한다는 것입니다. 수락하지 않으면 -1이고 GetLasError는 0보다 큰 오류 번호를 표시합니다.

이제 모든 것이 원래대로입니다 ... 그렇지 않으면 귀하의 답변에 약간 혼란 스럽습니다! :)))


그러나 내 질문은 여전히 유효합니다. OrderSend() 함수 가 "0" 또는 "-1"보다 작은 값을 반환할 수 있습니까?


로그 파일을 보내달라고 요청했는데... 보내지 않습니다. 그래서 나는 걸림돌이 무엇인지 오래 전에 이해했을 것입니다. 그동안 계속 텔레파시를 하고 있어요! ;))) 그런데 갑자기 OrderSend() 함수가 이상하다고요? :DD