두 개의 배열을 만듭니다. 하나는 티켓 번호로, 두 번째는 가격으로. 그런 다음 티켓 번호를 이동하면서(연결을 끊지 않고) 가격별로 배열을 정렬합니다. 그런 다음 어레이의 한쪽 끝에서 가장 낮은 가격이 있고 다른 쪽 끝에서 가장 높은 가격이 있습니다. 그들의 극단적 인 명령 중 하나를 변경하는 것이 남아 있습니다.
덕분에. 실제로 어레이에서는 아직 작동하지 않았습니다. 예를 들어 10개의 BYSTOP 주문이 있다고 가정해 보겠습니다. 설치 가격을 설정했습니다.
// Функция возвращает номер тикета ордера с самой маленькой ценой или с самой большой// По умолчанию сортировка по возрастанию// Только вот что за цену брать, я возьму стоп (цену открытия мы менять не можем)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]);elsereturn( ArrayTicket [ count -1]);}return(-1);}
그리고 제 생각에는 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 );
두 개의 배열을 만듭니다. 하나는 티켓 번호로, 두 번째는 가격으로. 그런 다음 티켓 번호를 이동하면서(연결을 끊지 않고) 가격별로 배열을 정렬합니다. 그런 다음 어레이의 한쪽 끝에서 가장 낮은 가격이 있고 다른 쪽 끝에서 가장 높은 가격이 있습니다. 그들의 극단적 인 명령 중 하나를 변경하는 것이 남아 있습니다.
덕분에.
실제로 어레이에서는 아직 작동하지 않았습니다.
예를 들어 10개의 BYSTOP 주문이 있다고 가정해 보겠습니다. 설치 가격을 설정했습니다.
다음으로, 주문 1이 current 에 가장 가까운 설정 가격 배열을 설정했습니다. 가격
int 가격 배열 = { price1,price2,price3,price4,price5,price6,price7,price8,price9,price10 }
그리고 티켓으로 배열을 만드는 방법은 나에게 명확하지 않습니다. 예매권은 어디서 받을 수 있나요?
비슷한 점
테스트되지 않은 코드분명히 기능은 다음과 같이 작동합니다.
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 - 결국 이것은 보류 중인 주문 (포지션이 아님)이며 이벤트의 최종 결과는 특별히 선택한 주문의 시작(활성화) 가격을 변경하는 것입니다.
분명히 기능은 다음과 같이 작동합니다.
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차원으로 정렬하는 것이 더 쉽습니다. 거기에서 각각 필요한 것을 운전하십시오. 귀하의 경우 가격.
그리고 제 생각에는 2차원 배열을 설정하고 1차원으로 정렬하는 것이 더 쉽습니다. 거기에 각각 필요한 것을 운전할 수 있습니다. 귀하의 경우 가격.
따라서 원하는 가격을 선택하십시오. 연기자의 경우 시작 가격입니다. 그냥 예시로 만들어 봤습니다.
여기에 10개의 바이스톱 주문이 있다고 가정해 보겠습니다. 그것들은 순서대로 나열되지 않고 순서대로 나열됩니다.
현재 가격에서 가장 멀리 떨어져 있는 주문을 삭제해야 합니다.
이 주문을 찾는 올바른 방법입니까? -
//********************************
추신
댓글에 기능을 추가했습니다.
주석( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 ));
그러나 함수는 항상 "-1"을 반환합니다. 차트에 5-10개의 주문이 있지만.
어딘가에 오류가 있습니다 ...
여기에 10개의 바이스톱 주문이 있다고 가정해 보겠습니다. 그것들은 순서대로 나열되지 않고 순서대로 나열됩니다.
현재 가격에서 가장 멀리 떨어져 있는 주문을 삭제해야 합니다.
이 주문을 찾는 올바른 방법입니까? -
//********************************
추신
댓글에 기능을 추가했습니다.
주석( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 ));
그러나 함수는 항상 "-1"을 반환합니다. 차트에 5-10개의 주문이 있지만.
어딘가에 오류가 있습니다 ...
코멘트( MiniMaxOrderPrice("", -1, OP_BUYSTOP, 1 )); // 임의의 문자
주석( MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )); // 현재 문자
확인! Vinin님 감사합니다!
기능이 작동하는 것 같습니다! 이제 더 조사하겠습니다!