Ajude-me a aprender a programar.

 

Como posso coletar e usar informações sobre o comércio? Preciso coletar informações sobre todas as posições da EA, seu volume, lucro, tipo, preço de abertura. E depois consulte as informações sobre a posição mais recente, ou a maior posição. Acho difícil escrever em arrays.

1. É necessário lidar com arrays?

2. É melhor usar um conjunto de estruturas ou diferentes matrizes?

3. Por que eu preciso de uma matriz dinâmica se eu tenho que alocar memória de qualquer maneira? Não é mais fácil usar uma matriz estática? Ou não podemos passar sem uma dinâmica, porque pode ser indexada ao contrário?


Exemplo de código sem oop, porque eu não poderia nem mesmo escrever esta construção, se você não se importa, obrigado.

 
pribludilsa:

Como posso coletar e usar informações sobre o comércio? Preciso coletar informações sobre todas as posições da EA, seu volume, lucro, tipo, preço de abertura. E depois consulte as informações sobre a posição mais recente, ou a maior posição. Acho difícil escrever em arrays.

1. É necessário lidar com arrays?

2. É melhor usar um conjunto de estruturas ou diferentes matrizes?

3. Por que eu preciso de uma matriz dinâmica se eu tenho que alocar memória de qualquer maneira? Não é mais fácil usar uma matriz estática? Ou não podemos passar sem uma dinâmica, porque pode ser indexada ao contrário?


Exemplo de código sem oop, porque eu não poderia nem mesmo escrever esta construção, se não fosse muito incômodo, obrigado.

Por que construir qualquer coisa? Você precisa percorrer as posições e processar as informações - e não precisa montá-las. Tudo o que você coleta no mesmo momento é uma informação obsoleta.

 

1. Quando se trata de histórico comercial, as matrizes são normalmente dispensadas. Isto é mais ou menos como no exemplo:https://www.mql5.com/ru/docs/trading/historyselect. Vale a pena explorar todas as funções na coluna do lado esquerdo do link (e todos os exemplos lá).

2. Uma variedade de estruturas é muito útil. Mas as funções embutidas que podem ser aplicadas às matrizes multidimensionais - ArraySort() etc. - não funcionam com ele.

3. se você tiver certeza de que o tamanho inicial especificado da matriz é suficiente, você pode usar também matrizes estáticas. Se seu tamanho for razoável.

 
Vladimir Karputov:

Por que recolher qualquer coisa? Você precisa percorrer os itens e processar as informações - e não precisa coletá-las. Tudo o que você coleta ao mesmo tempo é informação obsoleta.

Estou tentando escrever uma grade sem uma oop. Então decidi praticar para começar, e parece que não consigo construir uma entrada para a matriz. Ou talvez eu não precise dele? Qual é a melhor maneira de fazer isso? Bem, eu estava pensando em um loop. Foi assim que eu comecei.
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. Quando se trata de histórico comercial, as matrizes são normalmente dispensadas. Isto é mais ou menos como no exemplo:https://www.mql5.com/ru/docs/trading/historyselect. Vale a pena explorar todas as funções na coluna do lado esquerdo do link (e todos os exemplos lá).

2. Uma variedade de estruturas é muito útil. Mas as funções embutidas que podem ser aplicadas às matrizes multidimensionais - ArraySort() etc. - não funcionam com ele.

3. se você tiver certeza de que o tamanho inicial especificado da matriz é suficiente, você pode usar também matrizes estáticas. Se seu tamanho for razoável.

Não sou eu com a história, são as posições que eu quero analisar que estão abertas. Qual é a melhor maneira de fazer isso?
 
Estou escrevendo uma grade sem um OOP. Preciso descobrir qual das posições em aberto é a maior, e que tipo de comércio é, comprar ou vender. Entendo que preciso primeiro coletar dados de cada posição no loop, escrevê-los em um array, depois analisar o array, ou tomar o elemento mais recente, se ele for dinâmico com indexação reversa.
 
pribludilsa:
Não é com a história, eu quero analisar as posições abertas. Qual é a melhor maneira de fazer isso?

Quase o mesmo, mas sem HistóriaSelect(). Começamos com a função PositionsToatal() e depois por esse link exploramos todas as funções que começam com Position

 
pribludilsa:
Eu escrevo uma grade sem OOP. Preciso saber qual das posições em aberto é a maior, e é por meio de que tipo de negócios, comprar ou vender. Entendo que primeiro devo coletar dados de cada posição no loop, escrevê-los em um array e depois analisar o array ou tomar o elemento mais novo se ele for dinâmico com indexação reversa.

Você não precisa organizar as posições e procurar os altos e baixos à medida que avança.

 
Dmitry Fedoseev:

Você não precisa percorrer a matriz e procurar o máximo e o mínimo à medida que avança.


Obrigado. Mas você pode nos dar um pequeno exemplo? Precisamos escrevê-lo para compará-lo, não é mesmo? E escreva-o onde mais, mas em uma matriz? Não consigo descobrir como fazer isso sem escrever. Estamos trabalhando com uma posição em um loop pass, como podemos comparar outra posição se ela estiver em outro loop pass?

 
pribludilsa:

Obrigado. Você pode nos dar um pequeno exemplo? Precisamos escrevê-lo para comparar, não é mesmo? E escreva-o onde, mas em uma matriz? Não consigo descobrir como fazer isso sem escrever. Estamos trabalhando com uma posição em um loop pass, como podemos comparar outra posição se ela está em outro loop pass?

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:

Obrigado por esse exemplo.

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

Pensei que eu era o único que preferia colocar dessa forma, em vez de escrever "não sei".

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

hz significa "Eu gostaria de saber"... não me interpretem mal...


ps; ajuda a manter o controle de tudo durante a depuração do programa.

Razão: