다중 통화 고문에 대한 질문 - 페이지 11

 
Vinin >> :

두 개의 배열을 만듭니다. 하나는 티켓 번호로, 두 번째는 가격으로. 그런 다음 티켓 번호를 이동하면서(연결을 끊지 않고) 가격별로 배열을 정렬합니다. 그런 다음 어레이의 한쪽 끝에서 가장 낮은 가격이 있고 다른 쪽 끝에서 가장 높은 가격이 있습니다. 그들의 극단적 인 명령 중 하나를 변경하는 것이 남아 있습니다.

덕분에.
실제로 어레이에서는 아직 작동하지 않았습니다.
예를 들어 10개의 BYSTOP 주문이 있다고 가정해 보겠습니다. 설치 가격을 설정했습니다.

 double price1 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 1 ) ; //цена 1 байстоп
double price2 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 2 ) ; //цена 2 байстоп
double price3 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 3 ) ; //цена 3 байстоп
double price4 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 4 ) ; //цена 4 байстоп
double price5 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 5 ) ; //цена 5 байстоп
double price6 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 6 ) ; //цена 6 байстоп
double price7 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 7 ) ; //цена 7 байстоп
double price8 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 8 ) ; //цена 8 байстоп
double price9 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 9 ) ; //цена 9 байстоп
double price10 = GetOrderOpenPrice ( NULL , OP_BUYSTOP , 10 ) ; //цена 10 байстоп



다음으로, 주문 1이 current 에 가장 가까운 설정 가격 배열을 설정했습니다. 가격

int 가격 배열 = { price1,price2,price3,price4,price5,price6,price7,price8,price9,price10 }

그리고 티켓으로 배열을 만드는 방법은 나에게 명확하지 않습니다. 예매권은 어디서 받을 수 있나요?

 

비슷한 점

 // Функция возвращает номер тикета ордера с самой маленькой ценой или с самой большой
// По умолчанию сортировка по возрастанию
// Только вот что за цену брать, я возьму стоп (цену открытия мы менять не можем)
int MiniMaxOrderPrice ( string lSymbol = "" , int lMagic = - 1 , int lOP = - 1 , int reversi = 0 ) {
   double    ArrayPrice [ ] ;
   int       ArrayTicket [ ] ;
   int       Total = OrdersTotal ( ) ;
   int       tmpTicket ;
   double    tmpPrice ;
   bool      bSort = true ;
   
   ArrayResize ( ArrayPrice , Total ) ;
   ArrayResize ( ArrayTicket , Total ) ;
   int i , count = 0 ;
   for ( i = 0 ; i < Total ; i + + ) {
       if ( ! OrderSelect ( i , SELECT_BY_POS ) )              continue ;
       if ( ! ( OrderSymbol ( ) = = lSymbol | | lSymbol = = "" ) )    continue ;
       if ( ! ( OrderMagicNumber ( ) = = lMagic | | lMagic = = - 1 ) ) continue ;
       if ( ! ( OrderType ( ) = = lOP | | lOP = = - 1 ) )              continue ;
      ArrayPrice [ count ] = OrderStopLoss ( ) ;
      ArrayTicket [ count ] = OrderTicket ( ) ;
      count + + ;
   }
   
   
   if ( count > 0 ) {
       ArrayResize ( ArrayPrice , count ) ;
       ArrayResize ( ArrayTicket , count ) ;
       while ( bSort ) {
         bSort = false ;
         for ( i = 1 ; i < count ; i + + ) {
             if ( ArrayPrice [ i - 1 ] > ArrayPrice [ i ] ) {
               tmpPrice = ArrayPrice [ i - 1 ] ;
               ArrayPrice [ i - 1 ] = ArrayPrice [ i ] ;
               ArrayPrice [ i ] = tmpPrice ;
               tmpTicket = ArrayTicket [ i - 1 ] ;
               ArrayTicket [ i - 1 ] = ArrayTicket [ i ] ;
               ArrayTicket [ i ] = tmpTicket ;
               bSort = true ;
             }
         }
       }
       if ( reversi = = 0 ) return ( ArrayTicket [ 0 ] ) ; else return ( ArrayTicket [ count - 1 ] ) ;
   }
   return ( - 1 ) ;
}

   
테스트되지 않은 코드
 
Vinin님 감사합니다! 나는 탐구할 것이다.
 

분명히 기능은 다음과 같이 작동합니다.

MiniMaxOrderPrice(문자열 lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0)

옵션:
lSymbol= - 기호 이름("" - 모든 기호, NULL - 현재 기호)

lOP=-1- 작업(-1 - 모든 주문, 특별한 경우 -OP_BUYSTOP )
lMagic=-1 - MagicNumber(-1 - 모든 마법)

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

그러나 "int reversi=0"은 무엇을 의미합니까? - 잘 이해가 되지 않습니다!

함수가 정상적으로 처리되었습니다. 아마도:

0 - 최저가

1 - 가장 큰?


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

그리고 한 가지 더, 왜 우리는 가격에 손절매를 취했는가?

그리고 왜 시작 가격을 변경할 수 없습니까?

OP_BUYSTOP - 결국 이것은 보류 중인 주문 (포지션이 아님)이며 이벤트의 최종 결과는 특별히 선택한 주문의 시작(활성화) 가격을 변경하는 것입니다.

 
rid писал(а) >>

분명히 기능은 다음과 같이 작동합니다.

MiniMaxOrderPrice(문자열 lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0)

옵션:
lSymbol= - 기호 이름("" - 모든 기호, NULL - 현재 기호)

lOP=-1- 작업(-1 - 모든 주문, 특별한 경우 -OP_BUYSTOP )
lMagic=-1 - MagicNumber(-1 - 모든 마법)

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

그러나 "int reversi = 0"은 무엇을 의미합니까? 이해가 잘 가지 않습니다!

함수가 정상적으로 처리되었습니다. 아마도:

0 - 최저가

1 - 가장 큰?


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

그리고 한 가지 더, 왜 우리는 가격에 손절매를 취했는가?

그리고 왜 시작 가격을 변경할 수 없습니까?

OP_BUYSTOP - 결국 이것은 보류 중인 주문(포지션이 아님)이며 이벤트의 최종 결과는 특별히 선택한 주문의 시작(활성화) 가격을 변경하는 것입니다.

따라서 원하는 가격을 선택하십시오. 연기자의 경우 시작 가격입니다. 그냥 예시로 만들어 봤습니다.

 

그리고 제 생각에는 2차원 배열을 설정하고 1차원으로 정렬하는 것이 더 쉽습니다. 거기에서 각각 필요한 것을 운전하십시오. 귀하의 경우 가격.

 double Price_Ticket [ ] [ 2 ]
int total = OrdersTotal ( ) ;
ArrayResize ( Price_Ticket , total ) ;
for ( int i = 0 ; i < total ; i + + ) if ( OrderSelect ( i , SELECT_BY_POS ) )
{
 Price_Ticket [ i ] [ 0 ] = OrderOpenPrice ( ) ;
 Price_Ticket [ i ] [ 1 ] = OrderTicket ( ) ;
}
ArraySort ( Price_Ticket ) ;
 
Xupypr >> :

그리고 제 생각에는 2차원 배열을 설정하고 1차원으로 정렬하는 것이 더 쉽습니다. 거기에 각각 필요한 것을 운전할 수 있습니다. 귀하의 경우 가격.

   SetIndexBuffer ( 0 , Test ) ;
   SetIndexStyle ( 0 , DRAW_HISTOGRAM ) ;
//---- indicators
//----

   double Price_Ticket [ ] [ 2 ] ;
   
   int size = 10 ;
   ArrayResize ( Price_Ticket , size ) ;
인터넷에 있습니다. 칠면조는 어리석게 매달려 있습니다. 시작 기능이 비어 있습니다. 빌드 220입니다.
 
Vinin >> :

따라서 원하는 가격을 선택하십시오. 연기자의 경우 시작 가격입니다. 그냥 예시로 만들어 봤습니다.

여기에 10개의 바이스톱 주문이 있다고 가정해 보겠습니다. 그것들은 순서대로 나열되지 않고 순서대로 나열됩니다.

현재 가격에서 가장 멀리 떨어져 있는 주문을 삭제해야 합니다.

이 주문을 찾는 올바른 방법입니까? -

//********************************

추신

댓글에 기능을 추가했습니다.

주석( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 ));

그러나 함수는 항상 "-1"을 반환합니다. 차트에 5-10개의 주문이 있지만.

어딘가에 오류가 있습니다 ...

 // Функция возвращает номер тикета ордера с  с самой
// малой или , int reversi=0,большой ценой
// По умолчанию сортировка по возрастанию


int MiniMaxOrderPrice ( string lSymbol = "" , int lMagic = - 1 , int lOP = - 1 , int reversi = 0 ) {
   double   ArrayPrice [ ] ;
   int      ArrayTicket [ ] ;
   int      Total = OrdersTotal ( ) ;
   int      tmpTicket ;
   double   tmpPrice ;
   bool     bSort = true ;
   
   ArrayResize ( ArrayPrice , Total ) ;
   ArrayResize ( ArrayTicket , Total ) ;
   int i , count = 0 ;
   for ( i = 0 ; i < Total ; i + + ) {
      if ( ! OrderSelect ( i , SELECT_BY_TICKET , MODE_TRADES ) )     continue ;
      if ( ! ( OrderSymbol ( ) = = lSymbol | | lSymbol = = "" ) )   continue ;
      if ( ! ( OrderMagicNumber ( ) = = lMagic | | lMagic = = - 1 ) ) continue ;
      if ( ! ( OrderType ( ) = = lOP | | lOP = = - 1 ) )             continue ;
      ArrayPrice [ count ] = OrderOpenPrice ( ) ;
      ArrayTicket [ count ] = OrderTicket ( ) ;
      count + + ;
   }
   
   
   if ( count > 0 ) {
      ArrayResize ( ArrayPrice , count ) ;
      ArrayResize ( ArrayTicket , count ) ;
      while ( bSort ) {
         bSort = false ;
         for ( i = 1 ; i < count ; i + + ) {
            if ( ArrayPrice [ i - 1 ] > ArrayPrice [ i ] ) {
               tmpPrice = ArrayPrice [ i - 1 ] ;
               ArrayPrice [ i - 1 ] = ArrayPrice [ i ] ;
               ArrayPrice [ i ] = tmpPrice ;
               tmpTicket = ArrayTicket [ i - 1 ] ;
               ArrayTicket [ i - 1 ] = ArrayTicket [ i ] ;
               ArrayTicket [ i ] = tmpTicket ;
               bSort = true ;
            }
         }
      }
      if ( reversi = = 0 ) return ( ArrayTicket [ 0 ] ) ; else return ( ArrayTicket [ count - 1 ] ) ;
   }
   return ( - 1 ) ; }
 
rid писал(а) >>

여기에 10개의 바이스톱 주문이 있다고 가정해 보겠습니다. 그것들은 순서대로 나열되지 않고 순서대로 나열됩니다.

현재 가격에서 가장 멀리 떨어져 있는 주문을 삭제해야 합니다.

이 주문을 찾는 올바른 방법입니까? -

//********************************

추신

댓글에 기능을 추가했습니다.

주석( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 ));

그러나 함수는 항상 "-1"을 반환합니다. 차트에 5-10개의 주문이 있지만.

어딘가에 오류가 있습니다 ...

코멘트( MiniMaxOrderPrice("", -1, OP_BUYSTOP, 1 )); // 임의의 문자

주석( MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )); // 현재 문자

 

확인! Vinin님 감사합니다!

기능이 작동하는 것 같습니다! 이제 더 조사하겠습니다!