포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 126

 
hoz :

어제 했던 질문을 다시 할게요. 별도의 지점을 만들고 싶지 않습니다. 명확하지 않은 것이 있으면 모든 질문에 답하겠습니다.

여기에 필요한 위치를 닫는 스토퍼가 있습니다. 요지는 이렇습니다.

1. 포지션 마감이 추적됩니다.

2. 마지막 테이크 포지션이 청산되는 즉시 모든 오픈 포지션과 미결 포지션을 한번에 청산해야 합니다. 로트별로 정렬된 모든 항목을 닫습니다. 즉시 큰 로트, 그 다음 작은 로트. 상황은 순전히 명령에 대한 경험을 얻기 위한 것입니다.

구현은 다음과 같습니다.

모든 틱마다 start() 에서:

우리는 시장 주문 마감에 관심이 없습니다. deferred는 필요에 따라 제거됩니다. 여기 우리가 가진 것이 있습니다:

어떤 이유로 주문이 닫히지 않은 경우가 있습니다. 명확하지 않은 경우 일부 세그먼트를 인쇄합니다. 예를 들어:

주석에서 lastOOTHist = 01:30:00 임을 알 수 있지만 사실 이것은 사실이 아닙니다. 결국, 마지막으로 마감된 주문, 결과 창을 더듬어 보면 다음과 같이 표시됩니다.

닫는 시간이 다르니...

여기서 무슨 문제가 있습니까?

뭔가 뭉클해져서...

바로 여기에:

 for (i= 0 ; i<p; i++)
      {
         if ( OrderSelect (a[i][ 1 ], SELECT_BY_TICKET , MODE_TRADES )) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0 ) ClosePosBySelect();
         }
      }

루프 전에 배열의 모든 셀 값을 인쇄합니다. 개가 뒤돌아볼 수 있습니까?

 
Forexman77 :
거래를 열 때 스프레드 크기를 찾는 방법을 알려주실 수 있지만 로그에 표시하는 것이 더 낫습니까?

거래를 시작한 직후:

ticket= OrderSend (......);
if (ticket>= 0 ) Print ( "ticket #" ,ticket, " Spread=" ,doubleToStr(Ask-Bid, Digits )); 
로그의 스프레드.
 
Sepulca :

거래를 시작한 직후:

로그의 스프레드.



매우 감사합니다! 나는 고문을 만들었고 테스터에서 벌고 데모에서는 더 나쁩니다. 실제로는 아마도 더 나쁠 것입니다. 충동 시스템은 빠른 점프를 포착하지만 큰 확산은 그것을 죽입니다.

스프레드를 육안으로 아무리 많이 보아도 3핍 이상은 본 적이 없습니다. 강한 움직임의 순간에는 전혀 표시되지 않거나 확장되어 눈치 채지 못할 것이라는 가정이 있습니다.

Alpari는 스프레드가 낮지만 움직임이 많을수록 크게 증가한다고 생각합니다. DukasCopy에서는 스프레드가 훨씬 더 작지만 수수료가 크고 계정이 수백만 달러이면 작아집니다.

분당 50핍 이상의 움직임 으로 스프레드의 크기에 대해 조사한 적이 있습니까? 이러한 움직임으로 스프레드가 평균적으로 어느 정도 증가합니까?

나는 Alpari에게 물었지만 그들은 말하지 않았다.

 
FAQ :


변수(배열)를 값으로 함수에 전달할 때 헤더에 선언한 로컬 변수가 함수 내부에 생성됩니다. MyFunct(int my_var). 따라서 이 변수에 대한 변경 사항은 함수 외부에서 볼 수 없습니다. 그리고 배열의 경우 컴파일러는 이를 상기시켜줍니다.

변수 값의 변경 사항을 외부(함수 외부)에서 볼 수 있도록 하려면 변수를 참조로 전달하십시오. MyFunct(int & my_var)


네. 결국 현재 배열은 전역적으로 선언됩니다. 그러나 함수 내에서의 변화는 국부적 이기 때문에 미세구조와 같은 함수가 존재합니다. 마이크로 작업을 로컬로 구현합니다.
 

모두 좋은 이익! 알려주십시오 - OrderOpenPrice()가 소수점 이하 다섯 자리까지 가격을 반환하도록 하는 방법을 알 수 없습니다. 터미널에서 4개의 문자가 명확하게 반환되는 경우 5인 경우 여전히 4를 반환하여 5번째를 반올림합니다.

 
ivan180976 :

모두 좋은 이익! 알려주십시오 - OrderOpenPrice()가 소수점 이하 다섯 자리까지 가격을 반환하도록 하는 방법을 알 수 없습니다. 터미널에서 4개의 문자가 명확하게 반환되는 경우 5인 경우 여전히 4를 반환하여 5번째를 반올림합니다.


DoubleToStr(숫자, 정밀도)
 

Forexman77 :
Forexman77 :



매우 감사합니다! 나는 고문을 만들었고 테스터에서 벌고 데모에서는 더 나쁩니다. 실제로는 아마도 더 나쁠 것입니다. 충동 시스템은 빠른 점프를 포착하지만 큰 확산은 그것을 죽입니다.

스프레드를 육안으로 아무리 많이 보아도 3핍 이상은 본 적이 없습니다. 강한 움직임의 순간에는 전혀 표시되지 않거나 확장되어 눈치 채지 못할 것이라는 가정이 있습니다.

Alpari는 스프레드가 낮지만 움직임이 강하면 크게 증가한다고 생각합니다. DukasCopy에서는 스프레드가 훨씬 더 작지만 수수료가 크고 계정이 수백만 달러이면 작아집니다.

분당 50핍 이상 이동할 때 스프레드의 크기에 대해 조사한 적이 있습니까? 이러한 움직임으로 스프레드가 평균적으로 어느 정도 증가합니까?

나는 Alpari에게 물었지만 그들은 말하지 않았다.


스프레드에 관해서는 금요일에 Alpari에서만 분석했습니다.

얇은 노란색 - 막대당 최대 스프레드(분 사용). 굵은 빨간색 - 막대당 최소 스프레드. 보시다시피, 하루 동안 스프레드는 5에서 14 5 자리 포인트로 변동합니다. 하지만 서버 시간 21시 이후에는 스프레드가 10포인트 아래로 떨어지지 않고, 하루가 끝나면 일반적으로 52포인트까지 올라갑니다. 나는 가격이 급격히 변하기 전에 흥미로운 순간을 포착했습니다. 스프레드가 급격히 증가합니다.

 
artmedia70 :

뭔가 뭉쳐져있다...

바로 여기에:

 for (i= 0 ; i<p; i++)
      {
         if ( OrderSelect (a[i][ 1 ], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0 ) ClosePosBySelect();
         }
      }

편의상 이것을 표시했을 뿐입니다. 그가 썼을 때, 그리고 예, 표시할 필요는 없습니다. 하지만 방해도 되지 않습니다.

따라서 배열 값을 전혀 출력하지 않습니다.

아트미디어70 :

루프 전에 배열의 모든 셀 값을 인쇄합니다. 개가 뒤돌아볼 수 있습니까?



 //+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][ 2 ];
   int p = 0 ;
   
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() < 2 )
      {
         p++;
         ArrayResize (a, p);
         a[p- 1 ][ 0 ] = OrderLots();
         a[p- 1 ][ 1 ] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0 )
   {
       ArraySort (a, WHOLE_ARRAY , 0 , MODE_DESCEND);
      
       for (i= 0 ; i<=p; i++)
      {
          pr( "a[i][1] = " + a[i][ 1 ]);
          i++;
      }
      
       for (i= 0 ; i<p; i++)
      {
         if ( OrderSelect (a[i][ 1 ], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0 ) ClosePosBySelect();
         }
      }
   }
}

출력이 완전히 비어 있습니다.

 
hoz :

따라서 배열 값을 전혀 출력하지 않습니다.


출력이 완전히 비어 있습니다.

글쎄, 얼마나 비어? 아무 것도 출력하지 않거나 배열 셀에 여전히 0이 있습니까?
 

루프 본문에서 i를 증가시키는 이유는 무엇입니까?

  for (i= 0 ; i<=p; i++)
      {
          pr( "a[i][1] = " + a[i][ 1 ]);
           i++;    // ??????????????????????????????????????
      }

그리고 이것은: i<=p, 왜 "또는 같음"입니까?