[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 1114
1. Precisamos remover &&OrderSymbol()==Symbol() do código.
2. Necessidade de normalizar a licitação e pedira.
3. É melhor não definir o deslizamento em 10 pontos, mas calculá-lo dinamicamente. Por exemplo, se um pedido de ouro e este instrumento transita 50 pontos por carrapato, então 10 pontos de escorregamento causarão solicitações. Portanto, é melhor calcular o tamanho mínimo do tick e multiplicá-lo por este 10.
4. Você deve inserir a manipulação de erros em seu código. Caso contrário, em caso de falha, você não entenderá as razões pelas quais as ordens não foram fechadas.
1. Você deve remover &&OrderSymbol()==Symbol() do código
2. Necessidade de normalizar a licitação e perguntar.
3. O Slippage é melhor para calcular dinamicamente em vez de 10 pips. Por exemplo, se um pedido em ouro e este instrumento se move 50 pontos por tick, então 10 pontos de deslizamento lhe causarão muitas solicitações. Portanto, é melhor calcular o tamanho mínimo do tick e multiplicá-lo por este 10.
4. Você deve inserir a manipulação de erros em seu código. Caso contrário, no caso de uma falha, você não entenderá as razões pelas quais as ordens não foram fechadas.
Esta é a visão geral, e você pode pensar em toda uma série de coisas a fazer.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает количество ордеров. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ko=0, ot;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) ko++;
}
}
}
}
return(ko);
}
O valor do número de pedidos é ko, então a próxima função deve ser escrita usando o ko? O que o retorno faz aqui?
O operador de retorno encerra a função atual e retorna o controle ao programa de chamada. O uso de retorno (expressão); encerra a função atual e envia o resultado. A expressão do operador está entre parênteses e não deve conter um operador de atribuição.
O operador de retorno encerra a função atual e retorna o controle ao programa de chamada. O uso de retorno (expressão); encerra a função atual e envia o resultado. A expressão do operador está entre parênteses e não deve conter um operador de atribuição.
Oh, então, em vez de uma atribuição explícita do resultado ko, nós o passamos pelo retorno? Acho que consegui, obrigado.
O que você quer dizer com "colocar para dormir" e o que você quer dizer com "parar"?
Coloque para dormir - coloque o sono, então ele tentará recomeçar.
Parar - completamente, para que o Expert Advisor pare de trabalhar (muda seu "rosto").
Por exemplo, o Expert Advisor está sob o Eurobucks, mas foi atirado para o EuroJPY. Ele verifica o símbolo e, no caso de um descasamento, lança o alerta e não tenta mais trabalhar antes do reinício manual.
Coloque para dormir - coloque o sono, então ele tentará recomeçar.
Parar - completamente, para que o Expert Advisor pare de trabalhar (muda seu "rosto").
Por exemplo, o Expert Advisor está sob o Eurobucks, mas foi atirado para o EuroJPY. Ele verifica o símbolo e, no caso de um descasamento, lança um alerta e não tenta trabalhar novamente antes do reinício manual.
Por que tão complicado?
Suficiente na função de início() para proporcionar condições de manuseio
int start(){
if (Symbol()!="EURUSD") {
Alert("Советник должен работать только на EURUSD");
return(0);
}
// Далее обработка, принятие решений
}
Neste caso, se você colocar o EA no instrumento errado, você será inundado de Alertas, até que você mesmo o desabilite (o EA).
Você também pode adicionar um som de sirene, depois você pode desligá-lo com certeza
1. Precisamos remover &&OrderSymbol()==Symbol() do código.
2. Necessidade de normalizar a licitação e pedira.
3. É melhor não definir o deslizamento em 10 pontos, mas calculá-lo dinamicamente. Por exemplo, se um pedido de ouro e este instrumento transita 50 pontos por carrapato, então 10 pontos de escorregamento causarão solicitações. Portanto, é melhor calcular o tamanho mínimo do tick e multiplicá-lo por este 10.
4. Você deve inserir a manipulação de erros em seu código. Caso contrário, em caso de falha, você não entenderá as razões pelas quais as ordens não foram fechadas.
1. Você deve remover &&OrderSymbol()==Symbol() do código
2. Necessidade de normalizar a licitação e perguntar.
3. O Slippage é melhor para calcular dinamicamente em vez de 10 pips. Por exemplo, se um pedido em ouro e este instrumento se move 50 pontos por tick, então 10 pontos de deslizamento lhe causarão muitas solicitações. Portanto, é melhor calcular o tamanho mínimo do tick e multiplicá-lo por este 10.
4. Você deve inserir a manipulação de erros em seu código. Caso contrário, no caso de uma falha, você não entenderá as razões pelas quais as ordens não foram fechadas.
Muito obrigado, vou tentar no testador, mas sobre a modificação dos pedidos, você tem algum conselho?
Para onde o retorno é enviado?
Claramente, para a linha 0 e esperar por um tique
também está claro aqui - pare
E aqui?
O valor do número de pedidos é ko, então a próxima função deve ser escrita usando o ko? O que o retorno faz aqui?return() não envia ninguém a lugar algum.
O operador de retorno encerra a função atual e retorna o controle ao programa de chamada. O uso de retorno (expressão); encerra a função atual e envia o resultado. A expressão do operador está entre parênteses e não deve conter um operador de atribuição.
return() não envia ninguém a lugar algum.
O operador de retorno encerra a função atual e retorna o controle ao programa de chamada. O uso de retorno (expressão); encerra a função atual e envia o resultado. A expressão do operador está entre parênteses e não deve conter um operador de atribuição.
Como, então, é correto impedir o funcionamento da EA se as condições não são atendidas? Não para adormecê-lo, mas para pará-lo completamente.
O que você quer dizer com "colocar para dormir" e o que você quer dizer com "parar"?
O que você quer dizer com "colocar para dormir" e o que você quer dizer com "parar"?
Coloque para dormir - coloque o sono, então ele tentará recomeçar.
Parar - completamente, para que o Expert Advisor pare de trabalhar (muda seu "rosto").
Por exemplo, o Expert Advisor está sob o Eurobucks, mas foi atirado para o EuroJPY. Ele verifica o símbolo e, no caso de um descasamento, lança o alerta e não tenta mais trabalhar antes do reinício manual.
Coloque para dormir - coloque o sono, então ele tentará recomeçar.
Parar - completamente, para que o Expert Advisor pare de trabalhar (muda seu "rosto").
Por exemplo, o Expert Advisor está sob o Eurobucks, mas foi atirado para o EuroJPY. Ele verifica o símbolo e, no caso de um descasamento, lança um alerta e não tenta trabalhar novamente antes do reinício manual.
Por que tão complicado?
Suficiente na função de início() para proporcionar condições de manuseio
Neste caso, se você colocar o EA no instrumento errado, você será inundado de Alertas, até que você mesmo o desabilite (o EA).Você também pode adicionar um som de sirene, depois você pode desligá-lo com certeza