초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 246

 
Valeriy Yastremskiy :

고맙습니다. 노력하겠습니다. 효과가 있을지는 미지수)

 
오픈 주문과 마감 주문이 있습니다.
1. 주문을 열 때 어레이가 사용 중이 아닌 경우(아마도 = 0) 해당 티켓을 어레이에 기록해야 열거형에 보고서를 보관할 수 있습니다.
2. 주문이 마감된 후(청산되지 않을 수 있음), 마감된 주문의 수익 보고서가 시작됩니다. 특정 이익에 도달하면, 즉 이익의 양 + 동일한 이익 >= 열린 주문의 이익(주문 123이라고 합시다), 다른 모든 사람보다 먼저 열리거나 최대 손실(아직 결정되지 않음)로 열립니다.
3. 다음 조건이 충족되면 "이익의 양 + 동일한 이익 >= 미결 주문의 이익(오더 123을 호출합시다)", 오더 123이 닫히고 배열이 재설정됩니다(아마도 = 0이 됨).

1. 어드바이저를 배치할 때 고려하고 싶은 미결 주문과 마감 주문이 이미 있는지, 그리고 매번 어드바이저의 작업이 미결 주문 없이 시작되고 이전에 마감된 주문은 고려하지 않습니까?

2. 전혀 명확하지 않다. 여러 주문이 있으며 주문을 마감할 때 이익은 총합으로 간주되며 마감된 주문의 이익에 대한 데이터가 있습니다. 그리고 마감되지 않은 주문에 대한 수익 데이터가 있으며 계산할 수 있습니다. 무엇과 무엇을 비교합니다. 예를 들어 주문이 3개 있습니다. 1은 닫혀 있고 2는 닫혀 있고 3은 열려 있습니다. 이익 Pr1, Pr2 및 계산된 Pr3이 있습니다. 우리는 무엇과 무엇을 비교하고 있습니까? 동시에, 우리는 미결 주문에 대한 커미션과 스왑을 고려하지 않는다는 것을 이해합니다.

3. 전혀 불명확합니다. 어레이를 티켓으로 재설정하면 어떻게 되나요? 시장 주문은 시장에 남아 있을 것입니다. 어떻게 닫을 것인가?

 
Oksana_Timakova :
질문: 막대의 높은 값을 유지하는 방법     그리고 낮은 바     표시선과 연결하려면?
이를 위해 두 개의 추가 어레이를 생성해야 합니까?
네. 버퍼 배열.
 
Valeriy Yastremskiy :
네. 버퍼 배열.
즉, ZigZag에서와 같이 밝혀졌습니다. 그리고 그 중 두 개가 그리지 않도록 특별한 기능을 적용해야합니까?
 
Oksana_Timakova :
즉, ZigZag에서와 같이 밝혀졌습니다. 그리고 그 중 두 개가 그리지 않도록 특별한 기능을 적용해야합니까?
라인 유형은 동일합니다. 나는 그들이 무엇에 대해 그리지 않을 것인지 이해하지 못했습니다. 2개의 버퍼 배열을 선언합니다. 속성을 설정합니다. 선종류, 색 굵기입니다. 그리고 시계열에서 막대별로 첫 번째 높은 가격과 두 번째 낮은 가격을 할당합니다.
 
Valeriy Yastremskiy :

1. 어드바이저를 배치할 때 고려하고 싶은 미결 주문과 마감 주문이 이미 있는지, 그리고 매번 어드바이저의 작업이 미결 주문 없이 시작되고 이전에 마감된 주문은 고려하지 않습니까?

2. 전혀 명확하지 않다. 여러 주문이 있으며 주문을 마감할 때 이익은 총합으로 간주되며 마감된 주문의 이익에 대한 데이터가 있습니다. 그리고 마감되지 않은 주문에 대한 수익 데이터가 있으며 계산할 수 있습니다. 무엇과 무엇을 비교합니다. 예를 들어 주문이 3개 있습니다. 1은 닫혀 있고 2는 닫혀 있고 3은 열려 있습니다. 이익 Pr1, Pr2 및 계산된 Pr3이 있습니다. 우리는 무엇과 무엇을 비교하고 있습니까? 동시에, 우리는 미결 주문에 대한 커미션과 스왑을 고려하지 않는다는 것을 이해합니다.

3. 전혀 불명확합니다. 어레이를 티켓으로 재설정하면 어떻게 되나요? 시장 주문은 시장에 남아 있을 것입니다. 어떻게 닫을 것인가?

다시 )))

미결 주문이 있습니다. 5개라고 가정해 보겠습니다. 모두 음수입니다. 그 중 맨 처음(123)이 0.5로 많았지만 적자로 들어갔다. 0.1이 많은 새 주문(456)을 열고 이 주문의 티켓을 열 때 배열에 씁니다. 그런 다음 동일한 로트, 긍정적인 것, 부정적인 것의 또 다른 일련의 주문이 옵니다. 그러나 주문 123은 여전히 부정적이고 열려 있습니다. 주문 456(또한 마감됨) 이후에 마감된 모든 주문의 이익이 주문 123의 이익보다 크면 주문 123이 첫 번째이고 여전히 열려 있으므로 주문을 찾아 닫고 어레이를 재설정합니다.

여러 개의 미결 주문이 있으며 특정 조건에서 하나 더 엽니다. ordertotal>=5라고 가정합니다.

주문 보내기 (티켓 456)

주문이 성공적으로 열리면

배열이 비어 있는 경우

티켓 456이 어레이에 기록됩니다.

주문 456은 이익으로 마감되었으며(플러스 또는 마이너스에 관계없이) 다른 주문은 개설된 다음 마감되었지만 티켓 456은 어레이에 저장됩니다.


CalCloseProfi() - 마감된 주문의 이익을 확인하는 함수

티켓 456(배열에서 가져옴)이 있는 주문부터 시작 하여 매직, 구매, 판매를 통해 닫힌 주문을 반복 하고 이익을 계산합니다.


FirstOrder() - 함수는 열린 주문 중에서 첫 번째 오프닝을 검색합니다(이론적으로는 123을 찾아야 함).

이익 이 CalCloseProfi > FirstOrder이면 주문 123을 닫고 배열을 0으로 설정하여 나중에 조건이 충족되면 다시 티켓을 작성할 수 있습니다.


또 어떻게 설명해야할지 모르겠음)

이러한 기능이 실행될 조건을 작성할 수 있지만 배열을 접한 적은 없습니다.
정보를 배열에 넣는 방법, 즉 열 때 OrederTicket과 나중에 가져오는 방법에 대한 예가 필요합니다.
Double 배열을 사용하고 그 일부에 마법을 쓰는 것이 좋습니다. 이렇게 하면 다른 설정으로 동일한 계정에서 작업할 때 혼합되지 않습니다(또는 필요하지 않거나 배열에서 강력하지 않을 수 있음).

미리 감사드립니다

 
makssub :

다시 )))

미결 주문이 있습니다. 5개라고 가정해 보겠습니다. 모두 음수입니다. 그 중 맨 처음(123)이 0.5로 많았지만 적자로 들어갔다. 0.1이 많은 새 주문(456)을 열고 이 주문의 티켓을 열 때 배열에 씁니다. 그런 다음 동일한 로트, 긍정적인 것, 부정적인 것의 또 다른 일련의 주문이 옵니다. 그러나 주문 123은 여전히 부정적이고 열려 있습니다. 주문 456(또한 마감됨) 이후에 마감된 모든 주문의 이익이 주문 123의 이익보다 크면 주문 123이 첫 번째이고 여전히 열려 있으므로 주문을 찾아 닫고 어레이를 재설정합니다.

여러 개의 미결 주문이 있으며 특정 조건에서 하나 더 엽니다. ordertotal>=5라고 가정합니다.

주문 보내기 (티켓 456)

주문이 성공적으로 열리면

배열이 비어 있는 경우

티켓 456이 어레이에 기록됩니다.

주문 456은 이익으로 마감되었으며(플러스 또는 마이너스에 관계없이) 다른 주문이 개설되고 다음에 마감되지만 티켓 456은 어레이에 저장됩니다.


CalCloseProfi() - 마감된 주문의 이익을 확인하는 함수

티켓 456(배열에서 가져옴)이 있는 주문부터 시작 하여 매직, 구매, 판매를 통해 닫힌 주문을 반복 하고 이익을 계산합니다.


FirstOrder() - 함수는 열린 주문 중에서 첫 번째 오프닝을 검색합니다(이론적으로는 123을 찾아야 함).

이익 이 CalCloseProfi > FirstOrder이면 주문 123을 닫고 배열을 0으로 재설정하여 나중에 조건이 충족되면 다시 티켓을 작성할 수 있습니다.


또 어떻게 설명해야할지 모르겠음)

이러한 기능이 실행될 조건을 작성할 수 있지만 배열을 접한 적은 없습니다.
정보를 배열에 넣는 방법, 즉 열 때 OrederTicket과 나중에 가져오는 방법에 대한 예가 필요합니다.
Double 배열을 사용하고 그 일부에 마법을 쓰는 것이 좋습니다. 이렇게 하면 다른 설정으로 같은 계정에서 작업할 때 혼합되지 않습니다(또는 필요하지 않거나 배열에서 강력하지 않을 수 있음).

미리 감사드립니다

함수 실행을 위한 조건을 작성하십시오.
 

안녕하세요. 오류가 발생하는 이유를 알려주세요: 배열이 '.......'(152,41)의 범위를 벗어났습니다.


티켓 = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
만약 (티켓 <1)
{
Print("판매를 시작하는 동안 오류가 발생했습니다.");
}
if (티켓 >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
{
티켓 찾기();
Print(" 주문 티켓: ", FindTicket(), " 주문 배열: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int oldticket;
정수 틱 = 0;
티켓=0;
ArrayResize( 세이브틱, 2 );
for(int cnt = OrdersTotal()-1; cnt>=0; cnt--)
{
if( 주문 선택 (cnt, SELECT_BY_POS, MODE_TRADES ))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (구 티켓 > 티켓)
{
티켓 = 오래된 티켓;
틱 = OrderTicket();
SaveTick[1] = 틱;
SaveTick[0] = 마법;
}
}
}
}
리턴(틱);
}

 
makssub # :

안녕하세요. 오류가 발생하는 이유를 알려주세요: 배열이 '.......'(152,41)의 범위를 벗어났습니다.


ticket = OrderSend ( Symbol (), OP_SELL, lastlot, Bid, Slippage, 0 , tpl, Magic, 0 , Red);
             if (ticket < 1 )
            {
               Print ( "Ошибка открытия на продажу" );
            }
               if (ticket > 1 && SaveTick[ 1 ] <= 0 && SaveTick[ 0 ] == Magic )
            {
               FindTicket() ;
               Print ( " Тикет ордера: " , FindTicket(), " Массив ордера: " , SaveTick[ 1 ], " Магик массива: " , SaveTick[ 0 ]);
    }

int FindTicket()
   {
   int oldticket;
   int tick= 0 ;
   ticket= 0 ;
   ArrayResize ( SaveTick, 2 );
   for ( int cnt = OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
      {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
             if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[ 1 ] = tick;
               SaveTick[ 0 ] = Magic;
               }
            }
         }
      }
   return (tick);
  }              

코드를 알트 S 또는 아이콘으로 힌트 코드로 올바르게 붙여넣습니다.

SaveTick 배열이 필요한 이유는 무엇입니까?

2개의 배열 요소만 사용하고 있습니다. 함수에서 선언하는 경우 전역 또는 정적 변수로 대체하십시오.

2개의 변수에 대해 배열을 사용하는 것은 합리적이지 않습니다.

그리고 분명히 SaveTick 배열의 크기를 설정 하는 FindTicket() 함수를 호출 하기 전에 배열 을 호출하고 있습니다. 그리고 배열이 범위를 벗어났습니다.

 
🤖 작업을 멈췄습니까?