Vou simplificar um pouco a resposta para evitar confusão. O sinal (&) indica que o argumento da função pode mudar seu valor no momento da execução e voltará para de onde a função foi chamada com um valor diferente. No caso em questão, a função SaveOrder pode alterar o conteúdo das variáveis g_arrstBuyOrderInfo e g_arrstSellOrderInfo, assim como as variáveis g_nBuyOrdersCnt e g_nSellOrdersCnt.
Obrigado. Torna-se um pouco mais claro. Só não está claro como tudo isso pode ser descoberto sem se referir ao fórum. Eu não encontrei tais explicações nos tutoriais.
Por favor, me dê mais alguns conselhos:
1) O compilador escreve - 'g_nBuyOrdersCnt' - declaração sem tipo ; 'g_nSellOrdersCnt' - declaração sem tipo. Estou correto ao assumir que o g_nBuyOrdersCnt e o g_nSellOrdersCnt devem ser declarados globalmente para evitar um erro do compilador?
2) Compilador:'para' - não são permitidas expressões em um escopo global. Não está claro aqui.
3) Na funçãoSaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) vazia, o compilador escreve: a declaração de 'arrstOrderInfo' esconde a declaração global. ver declaração anterior de 'arrstOrderInfo'. Também não está muito claro.
4) 'nOrderCnt' é um identificador não declarado. Por que não é declarado em nenhum lugar?
E uma última coisa: eu ainda não entendo de onde vêm.n e.f e o que são.
Obrigado. Está começando a fazer um pouco mais de sentido. Só não está claro como você pode descobrir tudo isso sem se referir a um fórum. Eu não consegui encontrar tais explicações nos livros didáticos.
Por favor, me dê mais alguns conselhos:
1) O compilador escreve - 'g_nBuyOrdersCnt' - declaração sem tipo ; 'g_nSellOrdersCnt' - declaração sem tipo. Estou correto ao assumir que o g_nBuyOrdersCnt e o g_nSellOrdersCnt devem ser declarados globalmente para evitar um erro do compilador?
2) Compilador:'para' - não são permitidas expressões em um escopo global. Não está claro aqui.
3) Na funçãoSaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) vazia, o compilador escreve: a declaração de 'arrstOrderInfo' esconde a declaração global. ver declaração anterior de 'arrstOrderInfo'. Também não está muito claro.
4) 'nOrderCnt' é um identificador não declarado. Por que não é declarado em nenhum lugar?
Veja como tudo deve estar no código se você olhar para o código como um todo:
#property strictinputint i_nMagicNumber = 12876;
#define MAX_ORDERS_CNT int(500)
struct OrderInfo
{
int nTicket;
int nType;
double fOpenPrice;
double fSL;
double fTP;
datetime dtOpenTime;
};
int g_nBuyOrdersCnt,
g_nSellOrdersCnt;
OrderInfo g_arrstBuyOrderInfo[MAX_ORDERS_CNT],
g_arrstSellOrderInfo[MAX_ORDERS_CNT];
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Expert initialization function |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+intOnInit()
{
returnINIT_SUCCEEDED;
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Expert deinitialization function |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Expert tick function |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+voidOnTick()
{
FindOrders();
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Fills the orders arrays |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+void FindOrders()
{
g_nBuyOrdersCnt = 0;
g_nSellOrdersCnt = 0;
for (int i = OrdersTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS))
continue;
if (OrderSymbol() != Symbol()) // Если нужны ордера только по текущему символу, к графику которого прикреплен советникcontinue;
if (OrderMagicNumber() != i_nMagicNumber) // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советникаcontinue;
if (OrderType() == OP_BUY)
SaveOrderInfo(g_arrstBuyOrderInfo, g_nBuyOrdersCnt);
if (OrderType() == OP_SELL)
SaveOrderInfo(g_arrstSellOrderInfo, g_nSellOrdersCnt);
}
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Saves one selected order in the specified array |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt)
{
if (nOrdersCnt >= MAX_ORDERS_CNT)
return;
arrstOrderInfo[nOrdersCnt].nTicket = OrderTicket();
arrstOrderInfo[nOrdersCnt].nType = OrderType();
arrstOrderInfo[nOrdersCnt].fOpenPrice = OrderOpenPrice();
arrstOrderInfo[nOrdersCnt].fSL = OrderStopLoss();
arrstOrderInfo[nOrdersCnt].fTP = OrderTakeProfit();
++nOrdersCnt;
}
Uma última coisa: eu ainda não entendo de onde vêm.n e.f e o que são.
O operador "ponto" indica o acesso a um membro de uma estrutura ou classe. Neste caso, trata-se de uma estrutura.
As letras n e f são uma forma de especificar o tipo de dados armazenados em uma variável. Afinal, com um grande número de variáveis, é impossível lembrar o tipo de cada uma delas. E se em um nome de uma variável houver uma indicação de seu tipo, a necessidade de lembrar desaparece por si só. n é um sinal de um número inteiro (de Numérico), f é um número real (de float - número de ponto flutuante). Esta forma de escrever nomes de variáveis é chamada de notação húngara.
O operador de ponto indica o acesso a um membro de uma estrutura ou classe. Neste caso, uma estrutura.
As letras n e f são uma forma de especificar o tipo de dados que são armazenados em uma variável. Afinal, com um grande número de variáveis, é impossível lembrar o tipo de cada uma delas. E se em um nome de uma variável houver uma indicação de seu tipo, a necessidade de lembrar desaparece por si só. n é um sinal de um número inteiro (de Numérico), f é um número real (de float - número de ponto flutuante). Esta forma de notação de nomes variáveis é chamada de notação húngara.
Aí está!!! Afinal,g_ eg_n não são apenas uma abreviação, mas prefixos que dizem que são variáveis inteiras globais e globais!!! Ugh... E não consegui perceber porque estes traços em designações variáveis. Como é possível para um iniciante, que não está familiarizado com tais sutilezas, escrever código usando arrays, estruturas, etc.? Pensei que minha estratégia simples poderia ser escrita em linguagem simples, sem mergulhar na selva.
Você poderia me dar um link para um tutorial detalhado (estendido) sobre o mcl4 para estudar junto com seus conselhos?
E você poderia escrever o código acima sem usar a notação húngara para comparação? Você tem certeza de que a plataforma MT4 o entende claramente?
E uma pergunta sobre o código: para que é acontinuação; para que?
for (int i = OrdersTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS))
continue;
Se uma ordem não for selecionada na primeira iteração, então ela não será selecionada nas iterações subseqüentes e o ciclo continuará indefinidamente? Porque o número de pedidos não muda. Não seria mais corretoromper com uma mensagem de erro?
Aí está!!! Afinal,g_ eg_n não são apenas uma abreviação, mas prefixos que dizem que são variáveis globais e inteiras globais!!! Ugh... E não consegui perceber porque estes traços em designações variáveis. Como é possível para um iniciante, que não está familiarizado com tais sutilezas, escrever código usando arrays, estruturas, etc.? Pensei que minha estratégia simples poderia ser escrita em linguagem simples, sem mergulhar na selva.
Para fazer algo, temos que mergulhar nas sutilezas. Não há outra maneira.
Você poderia me dar um link para um tutorial detalhado (estendido) sobre o mcl4 para estudar junto com seus conselhos?
Conheço apenas um livro sobre MQL4 - o de Sergey Kovalev.
E você poderia escrever o código acima sem usar a notação húngara para comparação? Você tem certeza de que a plataforma MT4 o entende claramente?
Acostume-se a uma formatação de código apropriada de uma só vez )) A notação húngara foi inventada por programadores bastante experientes.
E uma pergunta sobre o código: para que é acontinuação; para que?
Então, se uma ordem não for selecionada na primeira iteração, ela não será selecionada nas próximas e o laço irá para o infinito? Porque o número de pedidos não muda. Não seria mais corretoromper com uma mensagem de erro?
Se não selecionamos uma ordem, isso não significa que não poderemos selecionar a próxima ordem. Portanto, é razoável continuar o ciclo.
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
Olá !
Você pode me dizer como repintar as barras sem usar modelos em mt4 !??
Ou como aplicar um esquema de cores !?
Vou simplificar um pouco a resposta para evitar confusão. O sinal (&) indica que o argumento da função pode mudar seu valor no momento da execução e voltará para de onde a função foi chamada com um valor diferente. No caso em questão, a função SaveOrder pode alterar o conteúdo das variáveis g_arrstBuyOrderInfo e g_arrstSellOrderInfo, assim como as variáveis g_nBuyOrdersCnt e g_nSellOrdersCnt.
Obrigado. Torna-se um pouco mais claro. Só não está claro como tudo isso pode ser descoberto sem se referir ao fórum. Eu não encontrei tais explicações nos tutoriais.
Por favor, me dê mais alguns conselhos:
1) O compilador escreve - 'g_nBuyOrdersCnt' - declaração sem tipo ; 'g_nSellOrdersCnt' - declaração sem tipo. Estou correto ao assumir que o g_nBuyOrdersCnt e o g_nSellOrdersCnt devem ser declarados globalmente para evitar um erro do compilador?
2) Compilador:'para' - não são permitidas expressões em um escopo global. Não está claro aqui.
3) Na funçãoSaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) vazia, o compilador escreve: a declaração de 'arrstOrderInfo' esconde a declaração global. ver declaração anterior de 'arrstOrderInfo'. Também não está muito claro.
4) 'nOrderCnt' é um identificador não declarado. Por que não é declarado em nenhum lugar?
Olá !
Você pode me dizer como repintar as barras sem usar modelos em mt4 !??
Ou como aplicar um esquema de cores !???
Se programática, veja as funções ChartSetInteger() e ChartGetInteger().
Obrigado. Está começando a fazer um pouco mais de sentido. Só não está claro como você pode descobrir tudo isso sem se referir a um fórum. Eu não consegui encontrar tais explicações nos livros didáticos.
Por favor, me dê mais alguns conselhos:
1) O compilador escreve - 'g_nBuyOrdersCnt' - declaração sem tipo ; 'g_nSellOrdersCnt' - declaração sem tipo. Estou correto ao assumir que o g_nBuyOrdersCnt e o g_nSellOrdersCnt devem ser declarados globalmente para evitar um erro do compilador?
2) Compilador:'para' - não são permitidas expressões em um escopo global. Não está claro aqui.
3) Na funçãoSaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) vazia, o compilador escreve: a declaração de 'arrstOrderInfo' esconde a declaração global. ver declaração anterior de 'arrstOrderInfo'. Também não está muito claro.
4) 'nOrderCnt' é um identificador não declarado. Por que não é declarado em nenhum lugar?
Veja como tudo deve estar no código se você olhar para o código como um todo:
Uma última coisa: eu ainda não entendo de onde vêm.n e.f e o que são.
O operador "ponto" indica o acesso a um membro de uma estrutura ou classe. Neste caso, trata-se de uma estrutura.
As letras n e f são uma forma de especificar o tipo de dados armazenados em uma variável. Afinal, com um grande número de variáveis, é impossível lembrar o tipo de cada uma delas. E se em um nome de uma variável houver uma indicação de seu tipo, a necessidade de lembrar desaparece por si só. n é um sinal de um número inteiro (de Numérico), f é um número real (de float - número de ponto flutuante). Esta forma de escrever nomes de variáveis é chamada de notação húngara.
O operador de ponto indica o acesso a um membro de uma estrutura ou classe. Neste caso, uma estrutura.
As letras n e f são uma forma de especificar o tipo de dados que são armazenados em uma variável. Afinal, com um grande número de variáveis, é impossível lembrar o tipo de cada uma delas. E se em um nome de uma variável houver uma indicação de seu tipo, a necessidade de lembrar desaparece por si só. n é um sinal de um número inteiro (de Numérico), f é um número real (de float - número de ponto flutuante). Esta forma de notação de nomes variáveis é chamada de notação húngara.
Aí está!!! Afinal,g_ eg_n não são apenas uma abreviação, mas prefixos que dizem que são variáveis inteiras globais e globais!!! Ugh... E não consegui perceber porque estes traços em designações variáveis. Como é possível para um iniciante, que não está familiarizado com tais sutilezas, escrever código usando arrays, estruturas, etc.? Pensei que minha estratégia simples poderia ser escrita em linguagem simples, sem mergulhar na selva.
Você poderia me dar um link para um tutorial detalhado (estendido) sobre o mcl4 para estudar junto com seus conselhos?
E você poderia escrever o código acima sem usar a notação húngara para comparação? Você tem certeza de que a plataforma MT4 o entende claramente?
E uma pergunta sobre o código: para que é acontinuação; para que?
Se uma ordem não for selecionada na primeira iteração, então ela não será selecionada nas iterações subseqüentes e o ciclo continuará indefinidamente? Porque o número de pedidos não muda. Não seria mais corretoromper com uma mensagem de erro?Contextos gráficos do menu, propriedades, cores - você já tentou isso?
Obrigado, eu já encontrei!!!
Se programática, veja as funções ChartSetInteger() e ChartGetInteger().
Obrigado por encontrá-lo já com sua ajuda!!!
Aí está!!! Afinal,g_ eg_n não são apenas uma abreviação, mas prefixos que dizem que são variáveis globais e inteiras globais!!! Ugh... E não consegui perceber porque estes traços em designações variáveis. Como é possível para um iniciante, que não está familiarizado com tais sutilezas, escrever código usando arrays, estruturas, etc.? Pensei que minha estratégia simples poderia ser escrita em linguagem simples, sem mergulhar na selva.
Para fazer algo, temos que mergulhar nas sutilezas. Não há outra maneira.
Você poderia me dar um link para um tutorial detalhado (estendido) sobre o mcl4 para estudar junto com seus conselhos?
Conheço apenas um livro sobre MQL4 - o de Sergey Kovalev.
E você poderia escrever o código acima sem usar a notação húngara para comparação? Você tem certeza de que a plataforma MT4 o entende claramente?
Acostume-se a uma formatação de código apropriada de uma só vez )) A notação húngara foi inventada por programadores bastante experientes.
E uma pergunta sobre o código: para que é acontinuação; para que?
Então, se uma ordem não for selecionada na primeira iteração, ela não será selecionada nas próximas e o laço irá para o infinito? Porque o número de pedidos não muda. Não seria mais corretoromper com uma mensagem de erro?Se não selecionamos uma ordem, isso não significa que não poderemos selecionar a próxima ordem. Portanto, é razoável continuar o ciclo.
A não seleção de uma ordem não significa que a próxima ordem não possa ser selecionada. Portanto, é razoável continuar o ciclo.
E não há necessidade de exibir uma mensagem de erro? Seria provavelmente útil saber por que uma ordem não é encontrada e como evitá-la?