MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 30

 
yaaarik777 :
저는 그냥 배우는 중이고 참고서를 사용하려고 합니다. 하지만 일종의 말도 안 되는 것으로 판명된다는 것을 이해합니다. 어떻게 하는지 예시를 보고 싶습니다.
이 기사를 읽으면 유용할 것입니다 https://www.mql5.com/en/articles/1399
События в МetaТrader 4
События в МetaТrader 4
  • 2006.05.29
  • Andrey Khatimlianskii
  • www.mql5.com
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
 
yaaarik777 :

모두 좋은 하루! 어드바이저에 주문 삭제 넣는 방법을 알려주세요.

상황은 이렇습니다.

우리는 다른 방향으로 2개의 보류 중인 주문 을 배치합니다. 그 중 하나가 실행되는 즉시 다른 하나는 삭제되고 더 이상 배치되지 않습니다.

도움을 주시면 대단히 감사하겠습니다.

고맙습니다.

그런 것

    for ( int  pos= OrdersTotal ()- 1 ,ticket= 0 ,trade= 0 ;pos!=- 1 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS , MODE_TRADES ) &&  OrderType ()> 1 ) //Если найденный ордер отложенный
        {
         ticket= OrderTicket (); //Запомним его тикет
        }
       else //Если ордер не отложенный
        {
         trade= 1 ; //Запомним,что есть открытая позиция
        }
       if (ticket!= 0  && trade== 1 ) //И если известен отложенный и открыта позиция
        {
          int  OD= OrderDelete (ticket); //Удаляем отложенный
        }
     }
 
Nikolay Gaylis :
"계속 봅시다" - 제거해야 합니다!
포럼에서 게시물을 직접 수정할 수 있습니다. 위의 별도 게시물에 작성하신 모든 내용을 하나로 통합할 수 있습니다.
 
Vitalie Postolache :
포럼에서 게시물을 직접 수정할 수 있습니다. 위의 별도 게시물에 작성하신 모든 내용을 하나로 통합할 수 있습니다.
감사하다!
 

안녕하세요! 다음 알고리즘에 따라 이익실현 추적을 도입했습니다.

if(총>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if( 주문선택(i, SELECT_BY_POS )==true)
{
if(OrderMagicNumber()==매직 && OrderSymbol()==자산 && OrderType()==OP_BUY)
{
새로 고침();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
TAKEPROFIT 트레일 조건;
새로운 이익 실현을 위한 주문 수정,
}
}
}
}

그러나 어떤 이유로 시간 제한이 작동하지 않고 현재 시간 프레임에서 포지션이 닫히지 않으면 조건이 충족된다면 다음 시간 프레임에서 추적됩니다.

내 마지막 if()에 무슨 문제가 있습니까?

 
владимир :

안녕하세요! 다음 알고리즘에 따라 이익실현 추적을 도입했습니다.

if(총>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==매직 && OrderSymbol()==자산 && OrderType()==OP_BUY)
{
새로 고침();
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
TAKEPROFIT 트레일 조건;
새로운 이익 실현을 위한 주문 수정,
}
}
}
}

그러나 어떤 이유로 시간 제한이 작동하지 않고 현재 시간 프레임에서 포지션이 닫히지 않으면 조건이 충족된다면 다음 시간 프레임에서 추적됩니다.

내 마지막 if()에 무슨 문제가 있습니까?

글쎄, 나는 지금 거기에서 무엇이 잘못되었는지 알지 못한다. 주문 수에 대한 추가 확인을 제거하고(주기 조건에 이미 존재함) 두 가지 유형의 포지션(구매 및 판매)에 대한 확인을 추가했습니다.

//+------------------------------------------------------------------+
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS )) {
       if ( OrderType ()> OP_SELL ) continue ;
       if ( OrderMagicNumber ()==magic && OrderSymbol ()==asset) {
         if ( TimeCurrent ()> OrderOpenTime () && TimeCurrent ()<= OrderOpenTime ()+ PeriodSeconds ( PERIOD_H1 )) {
             // УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
             // МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
            }
         }
      }
   }
//+------------------------------------------------------------------+

// 후행 및 수정 조건이 있는 곳에서 시간 변수의 값과 함께 Print()를 삽입하고 로그에 기록될 내용을 확인합니다.

 
Artyom Trishkin :

글쎄, 나는 아직 거기에 무엇이 잘못되었는지 알 수 없다. 주문 수에 대한 추가 확인을 제거하고(주기 조건에 이미 존재함) 두 가지 유형의 포지션(구매 및 판매)에 대한 확인을 추가했습니다.

//+------------------------------------------------------------------+
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS )) {
       if ( OrderType ()> OP_SELL ) continue ;
       if ( OrderMagicNumber ()==magic && OrderSymbol ()==asset) {
         if ( TimeCurrent ()> OrderOpenTime () && TimeCurrent ()<= OrderOpenTime ()+ PeriodSeconds ( PERIOD_H1 )) {
             // УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
             // МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
            }
         }
      }
   }
//+------------------------------------------------------------------+

// 후행 및 수정 조건이 있는 곳에서 시간 변수의 값과 함께 Print()를 삽입하고 로그에 기록될 내용을 확인합니다.

CELL의 경우 트레일 조건이 다르기 때문에 BUY만 표시했습니다.

"시간 변수 값으로" - TimeCurrent()를 의미합니까? 이것이 당신을 놀라게 했다면 죄송합니다. 저는 프로그래밍에서 마이너스가 0입니다.

그리고 나는 이것을 이해하지 못했다 - OrderType ()> OP_SELL. 왜 >? 연산 유형 OP_SELL 의 값은 1이고 OP_BUY는 0입니다. 따라서 <= ? 고맙습니다.

 
владимир :

CELL의 경우 트레일 조건이 다르기 때문에 BUY만 표시했습니다.

"시간 변수 값으로" - TimeCurrent()를 의미합니까? 이것이 당신을 놀라게 했다면 죄송합니다. 저는 프로그래밍에서 마이너스가 0입니다.

그리고 나는 이것을 이해하지 못했다 - OrderType ()> OP_SELL. 왜 >? 연산 유형 OP_SELL 의 값은 1이고 OP_BUY는 0입니다. 따라서 <= ? 고맙습니다.

유형이 1보다 크면 루프의 다음 반복으로 이동합니다.
 

인사말. 왜 그런 기록을 가지고 있는지 말해줘

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

if (z!=minpr1){z=minpr1; 주문삭제(티켓업);}

항상 오류를 던진다

: OrderDelete 기능 에 대한 유효하지 않은 티켓

: 주문 삭제 오류 4051

설명서에 따르면

유효하지 않은 함수 매개변수 값

매개 변수가 동일한 것처럼 보이지만.

조건을 제거하고 그대로 두면

주문삭제(티켓D);

주문삭제(티켓업);

성공적으로 삭제됩니다(그러나 조건에 따라 필요함). 내가 무엇을 잘못하고 있지?

 
spoiltboy :

인사말. 말해줘 제발 왜 그런 기록을 가지고

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

if (z!=minpr1){z=minpr1; 주문삭제(티켓업);}

항상 오류를 던진다

: OrderDelete 기능 에 대한 유효하지 않은 티켓

: 주문 삭제 오류 4051

설명서에 따르면

유효하지 않은 함수 매개변수 값

매개 변수가 동일한 것처럼 보이지만.

조건을 제거하고 그대로 두더라도

주문삭제(티켓D);

주문삭제(티켓업);

성공적으로 삭제됩니다(그러나 조건에 따라 필요함). 내가 무엇을 잘못하고 있지?

오류는 주문 선택 영역의 코드 어딘가에 있습니다.