현재 예에서 나는 그 이상으로 진행되지 않도록 거기에 임의의 로트와 함께 무한한 수의 주문 을 넣을 수 있기를 원합니다.
물론 우리는 경계를 알고 모두가 알고 있지만 그렇게 원합니다.
나는 대괄호 안에 요소를 지정하면 마지막 요소가 될 것이라는 사실에서 진행합니다.
여기 내가 이 쓰레기를 얻은 것이 있습니다. 무리를 순서대로 볼 거라고 예상했는데... 많이? 그래서 많은 대신에 결과를 주문에 추가합니다(많은 종류의 주문 * 계수)
거기에서 데이터를 추출하는 문제
나는 내가 상상하는대로 얻고 싶다
마이어레이[0][0.01]
마이어레이[1][0.01]
마이어레이[2][0.02]
등...
글쎄, 실제 질문은 무엇입니까?
로트가 있는 배열을 작성한 다음 로트 크기별로 정렬합니다. 귀하의 경우 각 다음 위치가 더 큰 로트로 열리기 때문에 이것은 여는 숫자로 정렬됩니다.
double BPosMass[]; double SPosMass[];
voidOnTick () { // Заполняем массивы int b=- 1 ,s=- 1 ; // Объявим переменные с минусом for ( int i= 0 ; i< OrdersTotal (); i++) { if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) { if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic || Magic< 0 )) { if ( OrderType ()== OP_BUY ) { b++; ArrayResize (BPosMass,b+ 1 ); BPosMass[b]= OrderLot(); } if ( OrderType ()== OP_SELL ) { s++; ArrayResize (SPosMass,s+ 1 ); SPosMass[s]= OrderLot(); } }}} // конец записи массив
// Читаем отсортированный массив с лотами // Buy if (b> 0 ) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива" ArraySort (BPosMass, WHOLE_ARRAY , 0 , MODE_ASCEND ); // Отсортируем по размеру лота // Работа с полученными данными Comment ( "Самый старый Buy лот: " , BPosMass[ 0 ], "\nПоследний Buy лот: " , BPosMass[b], "\nПредпоследний Buy лот: " , BPosMass[b- 1 ] );
} // end Buy
// Sell if (s> 0 ) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива" ArraySort (SPosMass, WHOLE_ARRAY , 0 , MODE_ASCEND ); // Отсортируем по размеру лота // Работа с полученными данными Comment ( "Самый старый Sell лот: " , SPosMass[ 0 ], "\nПоследний Sell лот: " , SPosMass[s], "\nПредпоследний Sell лот: " , SPosMass[s- 1 ] );
} // end Sell
// Конец функции OnTick() }
그런 다음 다음과 같이 적용합니다. 총 위치 수를 세고 3보다 작으면 배열에 액세스하지 않고 더 많으면 배열을 읽고 데이터를 가져옵니다.
CountOrders는 일정하고 로트가 변경됩니다. 이러면 안되지만 다른 방법은 없습니다.
이상적으로는 항목 MyArray[CountOrders][OrderLots()]
결과를 제공하려면 MyArray[0][0.01]MyArray[1][0.01]
그러나 이것은 µl에서 작동하지 않습니다
구조가 당신을 도울 것입니다. 필요한 필드로 구조를 만들고, 그러한 구조 의 배열을 선언하고 , 시간을 열어 주기로 주문 데이터로 채우고, 마음이 원하는 대로 검색합니다. 인덱스로 구조체의 필드를 확인하고 필요한 값과 비교합니다. 인덱스는 시작 시간으로 주문의 일련 번호를 가리키고 구조 필드에는 이 특정 주문에 필요한 모든 데이터가 포함됩니다.
Artyom Trishkin : 구조가 당신을 도울 것입니다. 필수 필드를 사용하여 구조를 만들고 이러한 구조 의 배열을 선언하고 시간을 열어 주기로 주문 데이터로 채우고 원하는 것을 검색합니다. 인덱스로 구조체의 필드를 확인하고 필요한 값과 비교합니다. 인덱스는 시작 시간으로 주문의 일련 번호를 가리키고 구조 필드에는 이 특정 주문에 필요한 모든 데이터가 포함됩니다.
우리는 그런 빌어먹을 것을 얻었다
struct myorder { int Ticket; double orderopenprice; int ordertype; double profit; double stoploss; double lot; };
주기 인덱스 i는 필요한 주문뿐만 아니라 모든 주문을 참조하기 때문에 함수에서 변수를 선언해야 합니다(예: n=0;). 이 변수 는 배열의 크기를 담당합니다. 루프 내에서 검사를 통과한 후 이 변수의 값을 늘리고 이 변수의 값만큼 배열의 크기를 늘리고 인덱스 n-1의 구조 필드를 이미 채우십시오: orders[n-1].xxx =XXX;
주기 인덱스 i는 필요한 주문뿐만 아니라 모든 주문을 참조하기 때문에 함수에서 변수를 선언해야 합니다(예: n=0;). 이 변수는 배열의 크기를 담당합니다. 루프 내에서 검사를 통과한 후 이 변수의 값을 늘리고 이 변수의 값만큼 배열의 크기를 늘리고 인덱스 n-1의 구조 필드를 이미 채우십시오: orders[n-1].xxx =XXX;
주문이 많은데 왜 제대로 된 주문을 받고 바로 꺼낼 수 없습니까? (필수) 원하는 대로 그들과 함께 하시겠습니까? 예를 들어 주문 (i-4)
예를 들어 여기 https://docs.mql4.com/ru/basis/preprosessor/compilation
현재 예에서 나는 그 이상으로 진행되지 않도록 거기에 임의의 로트와 함께 무한한 수의 주문 을 넣을 수 있기를 원합니다.
물론 우리는 경계를 알고 모두가 알고 있지만 그렇게 원합니다.
나는 대괄호 안에 요소를 지정하면 마지막 요소가 될 것이라는 사실에서 진행합니다.
여기 내가 이 쓰레기를 얻은 것이 있습니다. 무리를 순서대로 볼 거라고 예상했는데... 많이? 그래서 많은 대신에 결과를 주문에 추가합니다(많은 종류의 주문 * 계수)
거기에서 데이터를 추출하는 문제
나는 내가 상상하는대로 얻고 싶다
마이어레이[0][0.01]
마이어레이[1][0.01]
마이어레이[2][0.02]
등...
글쎄, 실제 질문은 무엇입니까?
로트가 있는 배열을 작성한 다음 로트 크기별로 정렬합니다. 귀하의 경우 각 다음 위치가 더 큰 로트로 열리기 때문에 이것은 여는 숫자로 정렬됩니다.
double SPosMass[];
void OnTick ()
{
// Заполняем массивы
int b=- 1 ,s=- 1 ; // Объявим переменные с минусом
for ( int i= 0 ; i< OrdersTotal (); i++) {
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic || Magic< 0 )) {
if ( OrderType ()== OP_BUY ) {
b++;
ArrayResize (BPosMass,b+ 1 );
BPosMass[b]= OrderLot();
}
if ( OrderType ()== OP_SELL ) {
s++;
ArrayResize (SPosMass,s+ 1 );
SPosMass[s]= OrderLot();
}
}}} // конец записи массив
// Читаем отсортированный массив с лотами
// Buy
if (b> 0 ) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
ArraySort (BPosMass, WHOLE_ARRAY , 0 , MODE_ASCEND ); // Отсортируем по размеру лота
// Работа с полученными данными
Comment ( "Самый старый Buy лот: " , BPosMass[ 0 ],
"\nПоследний Buy лот: " , BPosMass[b],
"\nПредпоследний Buy лот: " , BPosMass[b- 1 ]
);
} // end Buy
// Sell
if (s> 0 ) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
ArraySort (SPosMass, WHOLE_ARRAY , 0 , MODE_ASCEND ); // Отсортируем по размеру лота
// Работа с полученными данными
Comment ( "Самый старый Sell лот: " , SPosMass[ 0 ],
"\nПоследний Sell лот: " , SPosMass[s],
"\nПредпоследний Sell лот: " , SPosMass[s- 1 ]
);
} // end Sell
// Конец функции OnTick()
}
그런 다음 다음과 같이 적용합니다. 총 위치 수를 세고 3보다 작으면 배열에 액세스하지 않고 더 많으면 배열을 읽고 데이터를 가져옵니다.
배열 종료는 쓰는 시점이 아니라 읽는 시점에 발생합니다.
배열 종료는 쓰는 시점이 아니라 읽는 시점에 발생합니다.
아니요. 존재하지 않는 배열 인덱스 에 접근할 때 .
글쎄, 내가 무엇을 썼습니까?
2017.01 . 열셋 12 : 51 : 14.372 2017.01 . 05 16:30:00 마틴 GBPUSD , M5 : MyArray [CountOrders][ 0 ] 0.02
2017.01 . 열셋 12 : 51 : 14.372 2017.01 . 05 16:25:00 마틴 GBPUSD,M5 : MyArray [ 주문 수][ 0 ] 0.01
CountOrders는 일정하고 로트가 변경됩니다. 이러면 안되지만 다른 방법은 없습니다.
이상적으로 항목 MyArray[CountOrders][ OrderLots() ]
결과를 제공하려면 MyArray[0][0.01] MyArray[1][0.01]
그러나 이것은 µl에서 작동하지 않습니다
글쎄, 그리고 그것은 어떻게 든 함수에서 스트림으로 추출됩니다.2017.01 . 열셋 12 : 51 : 14.372 2017.01 . 05 16:30:00 마틴 GBPUSD , M5 : MyArray [CountOrders][ 0 ] 0.02
2017.01 . 열셋 12 : 51 : 14.372 2017.01 . 05 16:25:00 마틴 GBPUSD,M5 : MyArray [ 주문 수][ 0 ] 0.01
CountOrders는 일정하고 로트가 변경됩니다. 이러면 안되지만 다른 방법은 없습니다.
이상적으로는 항목 MyArray[CountOrders][ OrderLots() ]
결과를 제공하려면 MyArray[0][0.01] MyArray[1][0.01]
그러나 이것은 µl에서 작동하지 않습니다
구조가 당신을 도울 것입니다. 필수 필드를 사용하여 구조를 만들고 이러한 구조 의 배열을 선언하고 시간을 열어 주기로 주문 데이터로 채우고 원하는 것을 검색합니다. 인덱스로 구조체의 필드를 확인하고 필요한 값과 비교합니다. 인덱스는 시작 시간으로 주문의 일련 번호를 가리키고 구조 필드에는 이 특정 주문에 필요한 모든 데이터가 포함됩니다.
우리는 그런 빌어먹을 것을 얻었다
{
int Ticket;
double orderopenprice;
int ordertype;
double profit;
double stoploss;
double lot;
};
myorder orders[];
int i;
void CalcOrders()
{
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
&& ( OrderMagicNumber ()==Magic) && ( OrderType ()< 2 ))
orders[i].Ticket= OrderTicket ();
orders[i].lot= OrderLots ();
orders[i].orderopenprice= OrderOpenPrice ();
orders[i].ordertype= OrderType ();
orders[i].profit= OrderProfit ();
orders[i].stoploss= OrderStopLoss ();
}
}
예를 들어 주문의 로트 5를 뽑아 세 번째 로트와 비교하고 싶습니다.
시가를 합산하고 포지션 수로 나눕니다.
그러한 명령의 형태로 항목 자체가 필요합니다
우리는 그런 빌어먹을 일이 있어
{
int Ticket;
double orderopenprice;
int ordertype;
double profit;
double stoploss;
double lot;
};
myorder orders[];
int i;
void CalcOrders()
{
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
&& ( OrderMagicNumber ()==Magic) && ( OrderType ()< 2 ))
orders[i].Ticket= OrderTicket ();
orders[i].lot= OrderLots ();
orders[i].orderopenprice= OrderOpenPrice ();
orders[i].ordertype= OrderType ();
orders[i].profit= OrderProfit ();
orders[i].stoploss= OrderStopLoss ();
}
}
예를 들어 주문의 로트 5를 뽑아 세 번째 로트와 비교하고 싶습니다.
시가를 합산하고 포지션 수로 나눕니다.
이에 대한 명령 형식의 항목 자체가 필요합니다.
주기 인덱스 i는 필요한 주문뿐만 아니라 모든 주문을 참조하기 때문에 함수에서 변수를 선언해야 합니다(예: n=0;). 이 변수 는 배열의 크기를 담당합니다. 루프 내에서 검사를 통과한 후 이 변수의 값을 늘리고 이 변수의 값만큼 배열의 크기를 늘리고 인덱스 n-1의 구조 필드를 이미 채우십시오: orders[n-1].xxx =XXX;
OrdersTotal() 함수를 사용하여 주문을 정렬할 때 -1을 쓰는 이유를 알려주세요.
예: for (i=OrdersTotal()-1 ;i>=0; i--)
왜 OrdersTotal() 만 아닌가요?
이 함수의 주문 수는 0부터 시작합니까 아니면 1부터 시작합니까? 즉, 하나의 주문이 있는 경우 OrdersTotal()은 0 또는 1과 같습니까?
주기 인덱스 i는 필요한 주문뿐만 아니라 모든 주문을 참조하기 때문에 함수에서 변수를 선언해야 합니다(예: n=0;). 이 변수는 배열의 크기를 담당합니다. 루프 내에서 검사를 통과한 후 이 변수의 값을 늘리고 이 변수의 값만큼 배열의 크기를 늘리고 인덱스 n-1의 구조 필드를 이미 채우십시오: orders[n-1].xxx =XXX;