Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 219
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Eu sempre soube que ele contém o número de ordens -1, ou seja, OrdensTotal()-1 e tudo estava funcionando, mas comecei a escrever um programa e de repente, uma ordem não é mais contada, pedi OrdensTotal() e ele me deu o número total de ordens = 3, ao invés de 3-1.
O que acontece?
A forma usual do laço na ajuda:
int total=OrdensTotal();
for(int pos=0;pos<total;pos++)
{
}
Ou seja, a primeira ordem é igual a zero.
Mas não, de fato, a primeira ordem é 1, o que significa que devemos começar a busca a partir de 1 e não a partir de zero?
As metaquotas fizeram algo errado ou eu sou estúpido?
Olá, o que se passa com OrderTotal()?
Eu sempre soube que ele contém o número de ordens -1, ou seja, OrdensTotal()-1, e tudo estava funcionando, mas comecei a escrever um programa e de repente uma ordem não é contada. Eu pedi OrdensTotal() e ele diz ordens totais = 3, ao invés de 3-1.
O que acontece?
A forma usual do laço na ajuda:
int total=OrdensTotal();
for(int pos=0;pos<total;pos++)
{
}
Ou seja, a primeira ordem é igual a zero.
Mas não, de fato, a primeira ordem é 1, o que significa que devemos começar a busca a partir de 1 e não a partir de zero?
As metaquotas fizeram algo errado, ou eu sou estúpido?
Você misturou os PEDIDOS RELACIONADOS e POISÕES. Leia a referência. Seja mais específico em sua pergunta: o que você está tentando contar: PEDIDOS REMOVIDOS ou POSIÇÕES? E sim, nada mudou - o primeiro índice de elementos começa com '0'.
Acrescentado: exemplo
Exemplo: Calcular Posições e Ordens Pendentes
Você misturou os PEDIDOS RELACIONADOS e as POSIÇÕES. Leia a referência. Formar sua pergunta mais precisamente: o que você está tentando contar: PEDIDOS RETIRADOS ou POSIÇÕES? E sim, nada mudou - o primeiro índice de elementos começa com '0'.
Acrescentado: exemplo
Exemplo: Calcular Posições e Ordens Pendentes
Quero dizer MQL4, não MQL5, não há diferença entre ordens pendentes e de mercado!
Quero dizer MQL4, não MQL5, não há divisão em pendentes e pendentes de mercado!
Você está escrevendo no fórum MQl5. Você está escrevendo na seção principal. Você posta no fórum da MQL5 - e você receberá respostas sobre a MQL5.
As perguntas sobre o terminal antigo são dirigidas à seção especial: MQL4 e MetaTrader 4. De agora em diante, escreva lá. Transferirei suas perguntas para ele.
Comparei duas variantes, na primeira, usei OrderTotal()-1 e comecei a busca a partir do zero - recebi o erro
. Na segunda variante, comecei com uma e peguei toda a OrderTotal() - sem erro desta vez
Nas telas, você pode ver que OrdersTotal() mostra o número real de pedidos, não OrdersTotal()-1 ...
A questão é por que OrdensTotal() mostra o número real de ordens, em vez de -1, deveria ser assim ou é algo novo?
Porque, neste caso, devemos começar a busca não a partir de zero, mas a partir de um!
Comparei duas variantes, na primeira, usei OrderTotal()-1 e comecei a busca a partir do zero - recebi o erro
. Na segunda variante, comecei com uma e peguei toda a OrderTotal() - sem erro desta vez
Nas telas, você pode ver que OrdersTotal() mostra o número real de pedidos, não OrdersTotal()-1 ...
A questão é por que OrdensTotal() mostra o número real de ordens, em vez de -1, deveria ser assim ou é algo novo?
Porque, neste caso, devemos começar a busca não a partir de zero, mas a partir de um!
Acho que entendi meu erro, desculpe...
Há um offset de -1 nesta condição:
if (OrderSelect(i-1,SELECT_BY_POS)==verdadeiro){}
Desculpe por ser grosseiro, eu tirei a string de outro programa e não prestei atenção ao offset!
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+