Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 762

 
Alexey Kozitsyn:
E não são posições ou acordos que precisam de ser verificados, mas sim ordens, porque uma ordem vem primeiro, depois um acordo, depois uma posição.

Porquê apenas encomendas? Um negócio não tem um ID de posição (bilhete)?

 
Alexey Viktorov:

Porquê apenas encomendas? Um negócio não tem um ID de posição (bilhete)?

Sim, tem razão. Tanto as encomendas como os negócios têm um identificador de posição. No entanto, no caso geral, devemos saber que à posição é atribuído um identificador da primeira ordem que iniciou o negócio. Consequentemente, a "entidade" que inicia a posição é a ordem, e não o negócio. E são as ordens, e não os negócios, que devem ser procuradas.

A partir da documentação:

O identificador de posição é um número único que é atribuído a cada posição recentemente aberta e não muda ao longo da sua vida útil. Corresponde ao bilhete da ordem com que a posição foi aberta.

O identificador da posição é especificado em cada ordem (ORDER_POSITION_ID) e cada comércio (DEAL_POSITION_ID) que o abriu, alterou ou fechou. Utilize esta propriedade para procurar ordens e negócios relacionados com a posição.

 
Alexey Kozitsyn:

Sim, tem razão. Tanto as ordens como os negócios têm um identificador de posição. No entanto, em geral, deve saber que à posição é atribuído o identificador da primeira ordem que iniciou o comércio. Consequentemente, a "entidade" que inicia a posição é a ordem, e não o negócio. E são as ordens, e não os negócios, que devem ser procuradas.

A partir da documentação:

Não vou discutir, é exactamente isso que diz a documentação. Mas noutra parte da mesma documentação diz"Como regra...", o que significa que pode haver inconsistências. E este é o "como regra" que uma vez encontrei...

posição

O bilhete de posição. Deve ser preenchido quando uma posição é alterada e fechada, para a sua identificação única. Em regra, corresponde ao bilhete da ordem, em resultado do qual a posição foi aberta.

Não me lembro, e é pouco provável que o tenha compreendido, lido, feito correcções e esquecido. Li-o, corrigi-o, esqueci-me dele.
 
Vitaly Muzichenko:
Aconselhar como recuperar o bilhete que foi utilizado para o comércio. Na imagem do ecrã, está "63214735".

Aquiestá à procura do número da posição na lista de acordos, ou então está errado.

Aqui está um guião que demonstra o que a HistorySelectByPosition

//--- input parameters
input int      Position;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{ ulong Ticket;
  if ( HistorySelectByPosition(Position) )
  { Print("Position = "+IntegerToString(Position));
    int o=HistoryOrdersTotal()-1;
    while ( o>=0 )
    { Ticket=HistoryOrderGetTicket(o);
      Print("Order "+IntegerToString(o)+" = "+IntegerToString(Ticket));
      o--;
    }
    int d=HistoryDealsTotal()-1;
    while ( d>=0 )
    { Ticket=HistoryDealGetTicket(d);
      Print("Deal "+IntegerToString(d)+" = "+IntegerToString(Ticket));
      d--;
    }
  }
}

E é assim que se parece o resultado :

Position = 65328142
Order 1 = 65347809
Order 0 = 65328142
Deal 1 = 4070777
Deal 0 = 4051254

0 = Posição Aberta

1 = Posição próxima

Se não o obtiver = não entrou numa posição de bilhete

O mesmo resultado pode ser obtido se se começar com o Bilhete de Acordo:

Para a função HistoryDealGetInteger()

ENUM_DEAL_PROPERTY_INTEGER

Identificador

Descrição

Tipo

DEAL_TICKET

Bilhete de acordo. Número único a ser atribuído a cada comércio

longo

DEAL_ORDER

Ordem, com base na qual o comércio foi executado

longo

DEAL_TIME

Tempo de execução do negócio

data/hora

DEAL_TIME_MSC

Tempo de execução em milissegundos a partir de 01.01.1970

longo

DEAL_TYPE

Tipo de negócio

ENUM_DEAL_TYPE

DEAL_ENTRY

Direcção do negócio - entrada, saída ou inversão do mercado

ENUM_DEAL_ENTRY

DEAL_MAGIC

Número mágico para o negócio (ver ORDER_MAGIC)

longo

TEMPORADA

Motivo ou fonte do acordo

ENUM_DEAL_DEAL_REASON

DEAL_POSITION_ID

O identificador da posição na abertura, modificação ou encerramento da qual este comércio esteve envolvido. Cada posição tem um identificador único, que é atribuído a todos os negócios feitos no instrumento durante o tempo de vida da posição.

longo

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Ivanov:

Obrigado!

Eu precisava disto:HistoryOrderGetTicket

 
Vitaly Muzichenko:

Obrigado!

Eu precisava disto:HistoryOrderGetTicket

A encomenda pode ser de 1.0 lote. Mas pode ser parcialmente executado, por exemplo, lote 0,9 - o restante será rejeitado (depende do modo de execução). Depois a troca será de lote 0,9. E quando se começa a procurar lotes na encomenda, haverá inconsistências.

 

Por favor, ajude - preciso de algum código são para obter o valor do ambiente OHLC - os existentes são muito lentos

Opção 1

//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   ArraySetAsSeries(Open,true);
   int copied=CopyOpen(Symbol(),0,0,Bars(Symbol(),0),Open);
   if(copied>0 && index<copied) open=Open[index];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(Symbol(),0,0,Bars(Symbol(),0),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   ArraySetAsSeries(Close,true);
//   int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),Close);
   int copied=CopyClose(Symbol(),0,0,Bars(Symbol(),0),Close);
   if(copied>0 && index<copied) close=Close[index];
   return(close);
  }
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   ArraySetAsSeries(OpenI,true);
   int copied=CopyOpen(symbol,timeframe,0,Bars(symbol,timeframe),OpenI);
   if(copied>0 && index<copied) open=OpenI[index];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(LowI,true);
   int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),LowI);
   if(copied>0 && index<copied) low=LowI[index];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(HighI,true);
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),HighI);
   if(copied>0 && index<copied) high=HighI[index];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   ArraySetAsSeries(CloseI,true);
   int copied=CopyClose(symbol,timeframe,0,Bars(symbol,timeframe),CloseI);
   if(copied>0 && index<copied) close=CloseI[index];
   return(close);
  }


Opção 2

//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   int copied=CopyOpen(Symbol(),0,index,1,Open);
   if(copied>0) open=Open[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   int copied=CopyLow(Symbol(),0,index,1,Low);
   if(copied>0) low=Low[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   int copied=CopyHigh(Symbol(),0,index,1,High);
   if(copied>0) high=High[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   int copied=CopyClose(Symbol(),0,index,1,Close);
   if(copied>0) close=Close[0];
   return(close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,OpenI);
   if(copied>0) open=OpenI[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   int copied=CopyLow(symbol,timeframe,index,1,LowI);
   if(copied>0) low=LowI[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   int copied=CopyHigh(symbol,timeframe,index,1,HighI);
   if(copied>0) high=HighI[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,CloseI);
   if(copied>0) close=CloseI[0];
   return(close);
  }
 
Aleksey Vyazmikin:

Por favor, ajude - preciso de algum código são para obter o valor do ambiente OHLC - os existentes são muito lentos

Opção 1


Opção 2

Afixar um trecho de código para mostrar como o aplicar.
 
Vitaly Muzichenko:
Afixar um pedaço de código como os aplica

Não sei que peça está a abrandar - aplico-as de diferentes maneiras, incluindo em loops...


aqui está um exemplo


            for(int X=1;X<DonchianBarStart+1;X++)
              {
               PricePeresek=Donchianf(0,X+1);
               if((Low(X)>PricePeresek && High(X)>PricePeresek) || 
                  (Low(X)<PricePeresek && High(X)<PricePeresek))
                  calcBarPeresek++;
               else break;
              }
 
Aleksey Vyazmikin:

Não sei que peça está a abrandar - aplico-a de diferentes maneiras, incluindo em loops...

Parece que sim em loops, e pode passar sem a função

            double LOW[1],HIGH[1];
             for(int X=1;X<DonchianBarStart+1;X++)
              {
               PricePeresek=Donchianf(0,X+1);
               CopyLow(Symbol(),PERIOD_CURRENT,X,1,LOW);
               CopyHigh(Symbol(),PERIOD_CURRENT,X,1,HIGH);
               if((LOW[0]>PricePeresek && HIGH[0]>PricePeresek) || 
                  (LOW[0]<PricePeresek && HIGH[0]<PricePeresek))
                  calcBarPeresek++;
               else break;
              }
Razão: