Ayúdame a aprender a programar.

 

¿Cómo recojo y utilizo la información sobre las operaciones? Necesito recoger información sobre todas las posiciones del EA, su volumen, beneficio, tipo, precio de apertura. Y a continuación, consulte la información sobre la posición más reciente, o la posición más grande. Me resulta difícil escribir en matrices.

1. ¿Es necesario tratar con matrices?

2. ¿es mejor utilizar un array de estructuras o diferentes arrays?

3. ¿Por qué necesito una matriz dinámica si tengo que asignar memoria de todos modos? ¿No es más fácil utilizar una matriz estática? ¿O no se puede prescindir de una dinámica, porque se puede hacer un índice inverso?


Código de ejemplo sin oop, porque ni siquiera he podido escribir esta construcción, si no te importa, gracias.

 
pribludilsa:

¿Cómo recojo y utilizo la información sobre las operaciones? Necesito recoger información sobre todas las posiciones del EA, su volumen, beneficio, tipo, precio de apertura. Y a continuación, consulte la información sobre la posición más reciente, o la posición más grande. Me resulta difícil escribir en matrices.

1. ¿Es necesario tratar con matrices?

2. ¿es mejor utilizar un array de estructuras o diferentes arrays?

3. ¿Por qué necesito una matriz dinámica si tengo que asignar memoria de todos modos? ¿No es más fácil utilizar una matriz estática? ¿O no se puede prescindir de una dinámica, porque se puede hacer un índice inverso?


Código de ejemplo sin OOP, porque ni siquiera pude escribir esta construcción, si no te importa, gracias.

¿Por qué construir algo? Hay que hacer un bucle con las posiciones y procesar la información, y no hay que ensamblarla. Todo lo que se recoge en el mismo momento es información obsoleta.

 

1. Cuando se trata del historial comercial, se suele prescindir de las matrices. Esto es más o menos como en el ejemplo:https://www.mql5.com/ru/docs/trading/historyselect. Merece la pena explorar todas las funciones en la columna de la izquierda del enlace (y todos los ejemplos que hay).

2. Un conjunto de estructuras es muy práctico. Pero las funciones incorporadas que pueden aplicarse a las matrices multidimensionales - ArraySort() etc. - no funcionan con ella.

3. Si está seguro de que el tamaño inicial de la matriz especificado es suficiente, puede utilizar también matrices estáticas. Si su tamaño es razonable.

 
Vladimir Karputov:

¿Por qué coleccionar algo? Es necesario recorrer los elementos y procesar la información, y no es necesario recogerla. Todo lo que se recoge al mismo tiempo es información obsoleta.

Estoy tratando de escribir una cuadrícula sin un oop. Así que decidí practicar para empezar, y parece que no puedo construir una entrada en la matriz. ¿O tal vez no lo necesito? ¿Cuál es la mejor manera de hacerlo? Bueno, estaba pensando en un bucle. Así es como empecé.
int OnInit()
{
ENUM_POSITIONS_TYPE ar [1000]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{}
void OnTick()
{
for(int index=PositionsTotal()-1; index>=0; index--)
{
ulong ticket=PositionGetTicket(index);
PositionSelectByTicket(ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev:

1. Cuando se trata del historial comercial, se suele prescindir de las matrices. Esto es más o menos como en el ejemplo:https://www.mql5.com/ru/docs/trading/historyselect. Merece la pena explorar todas las funciones en la columna de la izquierda del enlace (y todos los ejemplos que hay).

2. Un conjunto de estructuras es muy práctico. Pero las funciones incorporadas que se pueden aplicar a las matrices multidimensionales - ArraySort() etc. - no funcionan con ella.

3. Si está seguro de que el tamaño inicial de la matriz especificado es suficiente, puede utilizar también matrices estáticas. Si su tamaño es razonable.

No soy yo quien tiene la historia, son las posiciones que quiero analizar las que están abiertas. ¿Cuál es la mejor manera de hacerlo?
 
Estoy escribiendo una cuadrícula sin OOP. Necesito averiguar cuál de las posiciones abiertas es la mayor, y qué tipo de operación es, compra o venta. Entiendo que tengo que recoger primero los datos de cada posición del bucle, escribirlos en un array, y luego analizar el array, o tomar el elemento más reciente, si es dinámico con indexación inversa.
 
pribludilsa:
No es con la historia, quiero analizar las posiciones abiertas. ¿Cuál es la mejor manera de hacerlo?

Casi lo mismo, pero sin HistorySelect(). Comenzamos con la función PositionsToatal() y luego por ese enlace estudiamos todas las funciones que comienzan con Position

 
pribludilsa:
Escribo una cuadrícula sin OOP. Necesito saber cuál de las posiciones abiertas es la mayor, y por qué tipo de operaciones, de compra o de venta. Entiendo que primero debo recoger los datos de cada posición del bucle, escribirlos en un array y luego analizar el array o tomar el elemento más nuevo si es dinámico con indexación inversa.

No tienes que pasar por una serie de posiciones y buscar altas y bajas a medida que avanzas.

 
Dmitry Fedoseev:

No es necesario recorrer la matriz y buscar el máximo y el mínimo sobre la marcha.


Gracias. Pero, ¿puede darnos un breve ejemplo? Tenemos que escribirlo para compararlo, ¿no? ¿Y escribirlo dónde más sino en una matriz? No sé cómo hacerlo sin escribir. Estamos trabajando con una posición en un pase de bucle, ¿cómo podemos comparar otra posición si está en otro pase de bucle?

 
pribludilsa:

Gracias. ¿Puede darnos un breve ejemplo? Hay que escribirlo para comparar, ¿no? ¿Y escribirlo dónde sino en un array? No sé cómo hacerlo sin escribir. Estamos trabajando con una posición en un pase de bucle, ¿cómo podemos comparar otra posición si está en otro pase de bucle?

int Magic=123;

double maxBuyPrice=0;
ulong maxBuyTicket=0;
double minSellPrice=DBL_MAX;
ulong minSellTicket=0;   

for(int i=0;i<PositionsTotal();i++){
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0){
      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol()){
         long type=PositionGetInteger(POSITION_TYPE);
         if(type==POSITION_TYPE_BUY){
            if(PositionGetDouble(POSITION_PRICE_OPEN)>maxBuyPrice){
               maxBuyPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if(type==POSITION_TYPE_SELL){
            if(PositionGetDouble(POSITION_PRICE_OPEN)<minSellPrice){
               minSellPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if(maxBuyTicket!=0){
   
}
if(minSellTicket!=0){

}
 
Dmitry Fedoseev:

Gracias por el ejemplo.

      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol())

Creía que era el único que prefería ponerlo así, en lugar de escribir "no lo sé".

      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())

hz significa "me gustaría saber"... no me malinterpretes...


ps; Ayuda a mantener un registro de todo durante la depuración del programa.

Razón de la queja: