초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 404

 

주문을 열고 수정하는 기능에 대한 래퍼를 작성하기 시작했지만(이러한 연산자에서 값을 반환하는 문제를 해결할 것이라고 생각했습니다) 동일한 문제가 있습니다.

무슨 일인지 벌써 설명해줘? (내가 무엇을 쓰든 항상 OrderSend, OrderSelex, ModifyOrder에서 값을 반환하는 문제가 있습니다)

래퍼 코드.

정수 시작()

{

if (신호 == 1)

{

OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Red);

}

리턴(0);

}

//----------------------------------------

int OrderSendX (문자열 기호, int cmd, 두 배 볼륨, 두 배 가격, 정수 미끄러짐, 두 배 손절매, 두 배 이익, 문자열 주석,

int magic, datetime 만료, color arrow_color)

{

int err=GetLastError();

오류 = 0;

부울 exit_loop = 거짓;

정수 티켓 = -1;

int 재시도 = 10;

정수 cnt = 0;

if(cmd == OP_BUY || cmd == OP_SELL) // 오픈 주문 유형 확인

{

동안(!exit_loop)

{

티켓 = OrderSend(기호, cmd, 볼륨, 가격, 미끄러짐, 손절매, 이익 실현, 댓글, 매직, 만료, arrow_color);

오류 = GetLastError();

스위치(오류)

{

사례 ERR_NO_ERROR:

exit_loop = 참;

부서지다;

사례 ERR_SERVER_BUSY:

사례 ERR_NO_CONNECTION:

사례 ERR_INVALID_PRICE:

사례 ERR_BROKER_BUSY:

사례 ERR_TRADE_CONTEXT_BUSY:

cnt++;

부서지다;

사례 ERR_PRICE_CHANGED:

사례 ERR_OFF_QUOTES:

사례 ERR_REQUOTE:

새로 고침();

계속하다;

기본:

exit_loop = 참;

부서지다;

}

if(cnt>재시도)

exit_loop = 참;

if(!exit_loop)

{

수면(1000);

새로 고침();

}

또 다른

{

if(err !=ERR_NO_ERROR)

{

Print("오류: " + err);

}

}

if(오류 ==ERR_NO_ERROR)

{

OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES);

반환(티켓);

}

Print("다음 이후 주문 열기 오류" + cnt + "시도");

리턴(-1);

}

}

}

 
Leanid Aladzyeu :

주문을 열고 수정하는 기능에 대한 래퍼를 작성하기 시작했지만(이러한 연산자에서 값을 반환하는 문제를 해결할 것이라고 생각했습니다) 동일한 문제가 있습니다.

무슨 일인지 벌써 설명해줘? (내가 무엇을 쓰든 항상 OrderSend, OrderSelex, ModifyOrder에서 값을 반환하는 문제가 있습니다)

https://docs.mql4.com/ru/trading/ordermodify

 bool res=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble (Bid- Point *TrailingStop, Digits ),OrderTakeProfit(), 0 ,Blue);
             if (!res)
               Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());
             else
               Print ( "Цена Stop Loss ордера успешно модифицирована." );

OrderModify()는 예, 아니요를 반환합니다.

OrderModify - Документация на MQL4
  • docs.mql4.com
OrderModify - Документация на MQL4
 

아무도 설명할 수 없습니다.

도움말을 100번 복사해서가 아니라 예시를 통해 다르게 해보자.

어떻게 맞아야 합니까? 나는 예를 들어 수정 사항을 이해할 것입니다

{

SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);

if(OrderStopLoss()!=SL)

OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);

}

정말 삽입

"""티켓 """= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0); 매번 먹고 그렇죠?

 

그리고 설명해 주신 모든 분들께 감사드립니다.

유감스럽게도 변수를 함수로 미리 정의된 변수로 지정하는 방법을 이해하지 못합니다.

 
Leanid Aladzyeu :

그리고 설명을 해주신 모든 분들께 감사드립니다.

유감스럽게도 변수를 함수로 미리 정의된 변수로 지정하는 방법을 이해하지 못합니다.

친애하는 라니드, 도움말을 읽고 오류 및 경고를 다루는 방법을 배웁니다. 이 작업을 수행하는 방법을 배우지 않으면 정상적으로 프로그래밍할 수 없습니다. 이것이 기본입니다. 경고에 적힌 내용을 번역해 보셨습니까? "검증이 필요한" 기능의 의미를 이해하고 계십니까? 도움말은 이러한 기능으로 작업하는 올바른 예를 설명합니다. 예: OrderModify(). 도움말 보기:

반환 값

성공하면 true를, 실패하면 false를 반환합니다. 에 대한 정보를 얻으려면   오류 , 당신은 함수를 호출해야   GetLastError() .

다음은 예입니다.

 bool res=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble (Bid- Point *TrailingStop, Digits ),OrderTakeProfit(), 0 ,Blue);
if (!res)
   Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());
else
   Print ( "Цена Stop Loss ордера успешно модифицирована." );

보시다시피 함수의 반환 값은 if-else 문에서 처리됩니다. 이유 때문에 res 변수가 필요합니다. 트레이딩 기능을 실행한 결과입니다! 당신의 돈이 의존하는 기능! 따라서 가능한 모든 옵션을 가능한 한 올바르게 처리하려면(이 예제에서는 처리가 제공되지 않음) res 변수와 GetLastError() 함수에서 반환된 오류 코드가 필요합니다. 개발자는 프로그래머가 주의해서 처리해야 하는 "중요" 기능이 있음을 잊지 않도록 상기시키기 위해 의도적으로 경고를 포함시켰습니다! 또한 값을 확인하지 않으면 오류가 발생하지 않습니다. 즉, 이 경우 함수는 어떻게 해서든 작동하지만 비정상적인 상황이 발생하면 처리되지 않습니다. 비정상적인 상황 목록 - GetLastError() 함수의 반환 코드.

나는 그것이 더 명확하기를 바랍니다.

Коды возврата торгового сервера - Документация на MQL4
  • docs.mql4.com
Коды возврата торгового сервера - Документация на MQL4
 
Leanid Aladzyeu :

주문을 열고 수정하는 기능에 대한 래퍼를 작성하기 시작했지만(이러한 연산자에서 값을 반환하는 문제를 해결할 것이라고 생각했습니다) 동일한 문제가 있습니다.

그리고 이 경우 래퍼를 작성할 필요가 없습니다. 반환 값 확인 경고가 해결되지 않습니다! 이러한 기능의 예를 살펴보고 동일한 작업을 수행하십시오!
 
Tapochun :
그리고 이 경우 래퍼를 작성할 필요가 없습니다. 반환 값 확인 경고가 해결되지 않습니다! 이러한 기능의 예를 살펴보고 동일한 작업을 수행하십시오!

도움말에 표시된 대로 오류가 발생합니다.

써봤는데 괜찮네요

if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))

{

Print("수정에 성공했습니다.");

}

else Print(" 주문 수정 오류 .");

 
메시지에 코드를 올바르게 삽입하십시오 . 포럼에 코드를 올바르게 삽입하십시오.
 
Karputov Vladimir :
메시지에 코드를 올바르게 삽입하십시오 . 포럼에 코드를 올바르게 삽입하십시오.
여기...
 
Leanid Aladzyeu :

Traling이 판매용으로 작동하지 않는 이유는 무엇입니까? 작품을 사기 위해!

유전자 편집 중에는 오류나 경고가 없습니다.

코드는 다음과 같습니다.

 void Trailing()
  {
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY)
              {
               if (Bid-OrderOpenPrice()>TrailingStop* Point )
                 {
                   if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep)* Point )
                    {
                     SL= NormalizeDouble (Bid-TrailingStop* Point , Digits );
                     if (OrderStopLoss()!=SL)
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),SL, 0 , 0 ))
                          {
                           Print ( "Модификация прошла успешно." );
                          }
                     else Print ( "Ошибка модификации ордера." );
                    }
                 }
              }
             if (OrderType()==OP_SELL)
              {
               if (OrderOpenPrice()-Ask>TrailingStop* Point )
                 {
                   if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep)* Point )
                    {
                     SL= NormalizeDouble (Ask+TrailingStop* Point , Digits );
                     if (OrderStopLoss()!=SL)
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),SL, 0 , 0 ))
                          {
                           Print ( "Модификация прошла успешно." );
                          }
                     else Print ( "Ошибка модификации ордера." );
                    }
                 }
              }
           }
        }
     }
  }

사유: