Como preenchê-los agora? No exemplo com o qual estou tentando fazer isso, uma variável adicional é aplicada, mas eu não entendo como usá-la:
// переменная, которая будет хранить количество ордеров, // принадлежащих эксперту:int _ExpertOrdersTotal=0;
Embora não esteja bem claro porque preciso de todas estas matrizes quando posso obter os valores do bilhete, tipo de posição, preço aberto e tempo aberto com a função correspondente.
Em matrizes: aqui declarei 4 matrizes em nível global:
Em seguida, eu os zerei na função de abertura de posição:
Como preenchê-los agora? O exemplo que estou tentando usar aplica uma variável adicional, mas eu não entendo como usá-la:
Embora não esteja bem claro por que todas estas matrizes, quando consigo obter os valores do bilhete, tipo de posição, preço aberto e tempo aberto com a função correspondente.
Tente escrever a partir do zero, emitindo todos os dados intermediários usando Alert(. Por exemplo
int ord=OrdersTotal();
if ! ord )
{
Alert("Ордера отсутствуют. Выход");
return;
} elseAlert("Всего ордеров = ", ord);
// Посмотрев, что получилось, добавляете:int n;
int Ords[10];
for(n=0; n<ord && n<10; n++)
{
OrderSelect(...
}
E se você pegar o exemplo de alguém, pegue-o completamente e estude-o. Quem sabe o que o autor do exemplo está usando arrays para
Em matrizes: aqui declarei 4 matrizes em nível global:
Use uma variedade de estruturas. O acesso será muito mais fácil. Aqui está uma variante com uma matriz estática. É mais fácil de entender. Mas eu mesmo utilizo matrizes dinâmicas. Mas o código vai ficar um pouco maior com eles.
Não, você não o fez. Porque são declaradas matrizes dinâmicas que têm tamanho zero por padrão. Portanto, neste caso, estas quatro linhas de código não fazem nada.
Agora, como preenchê-los? O exemplo que estou tentando usar tem uma variável adicional, mas eu não entendo como usá-la:
A seguir - um ciclo de pedidos é organizado, no qual cada "próprio" pedido é armazenado em uma matriz:
g_nOrderCnt = 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 (g_nOrderCnt < MAX_ORDERS_CNT)
continue;
g_arrstOrderInfo[g_nOrdersCnt].nTicket = OrderTicket();
g_arrstOrderInfo[g_nOrdersCnt].nType = OrderType();
g_arrstOrderInfo[g_nOrdersCnt].fOpenPrice = OrderOpenPrice();
g_arrstOrderInfo[g_nOrdersCnt].fSL = OrderStopLoss();
g_arrstOrderInfo[g_nOrdersCnt].fTP = OrderTakeProfit();
++g_nOrdersCnt;
}
Embora, não tenho bem certeza para que servem todas essas matrizes, quando posso obter os valores do bilhete, tipo de posição, preço aberto e tempo aberto usando a função correspondente.
É muito mais rápido e conveniente trabalhar com matrizes, uma vez que, em geral, nem todas as ordens presentes na conta precisam ser processadas por esta EA em particular. E como resultado, economizaremos muito esforço e dinheiro.
Além disso, eu mencionei acima é um caso geral. O universalismo nem sempre é necessário, é claro. Normalmente, tais matrizes são criadas com base nas exigências de uma estratégia. Por exemplo, podemos dividir os pedidos por tipo imediatamente: Comprar, Vender, ComprarStop, VenderStop, ComprarLimit, VenderLimit. Então, precisaremos de quatro matrizes desse tipo. Mas então não precisaremos passar por toda a lista de pedidos abertos novamente quando tomarmos decisões comerciais. Só precisamos saber o número de pedidos de um determinado tipo e consultar a matriz necessária.
Há mais uma coisa importante a considerar: mudar o conjunto de pedidos durante o processamento de um tick. Pode muito bem acontecer que uma lista de pedidos tenha sido recebida na entrada da OnTick, e outra em algum lugar no meio. Isto levará a um erro na operação do programa que é difícil de ser capturado. E o conjunto de ordens que já foi formado ao entrar no OnTick não mudará (a menos, é claro, que você mesmo mude durante a execução do programa).
string s=FileReadString(F1); // Ler string do arquivo de texto StringSplit(s, ","," , a); // Elementos de corda separados por vírgula em uma matriz datatime T1=StrToTime(a[4]); // Além disso, a transformação ... int ord=StrToInteger(a[8]); double Price=StrToDouble(a[12]);
Por exemplo, é possível dividir os pedidos por tipo de uma só vez: Compra, Venda, BuyStop, SellStop, BuyLimit, SellLimit. Então, precisaremos de quatro matrizes desse tipo. Mas então não precisaremos passar por toda a lista de pedidos abertos novamente quando tomarmos decisões comerciais. Só precisamos saber o número de pedidos de um determinado tipo e consultar a matriz necessária.
Isso é exatamente o que eu preciso, ou melhor, só paraComprar e Vender. O principal para minha estratégia simples é não deixar que as posições abertas interfiram umas com as outras para ver as condições de fechamento. Talvez, podemos prescindir de arrays? Eu não os entendo: como criá-los, como abordá-los - estou no escuro. Talvez minha situação se torne mais clara para você na captura de tela:
Parece que tudo no código é simples e funciona claramente, mas este é o único caso de incompreensão.
Isto é exatamente o que eu preciso, ou melhor, apenas paraComprar e Vender. Para minha estratégia simples, o mais importante é que as posições abertas não interfiram nas condições de fechamento um do outro. Talvez possamos passar sem matrizes? Eu não os entendo: como criá-los, como abordá-los - estou no escuro. Talvez minha situação se torne mais clara para você na captura de tela:
Parece que tudo no código é simples e funciona claramente, mas este é o único caso de incompreensão.
Claro que, na mais simples (e média complexidade), é mais conveniente sem matrizes. E quando se chega ao ponto de usar centenas de pedidos, é muito mais fácil distinguir entre os pedidos. Por exemplo, de acordo com OrderType() - um para comprar 0, o outro para vender 1. A estratégia de seu comerciante é boa - você pode ganhar 1 dia ou perder metade de um dia. A única coisa que precisamos é de como pegar essas flechas. E eles são muito freqüentes. Faz sentido primeiro aprender a dar sinais: Comprar e Vender
LRA: Naturalmente, na mais simples (e média complexidade) sem arrays é mais conveniente. Mas quando se chega ao ponto de usar centenas de pedidos - então...
Poderia ser a razão da minha situação que o registro escreve: 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 e repete solidamente para
2018.01.26 16:38:12 2018_WPR14_AMarkets EURUSD,M5: Alerta: Total de pedidos = 3 ? Na captura de tela você pode ver que este período captura duas condições de fechamento da VENDA.
E os sinais para abrir uma posição são acionados por uma combinação de vários indicadores e fechados por um indicador. E eles não trabalham com tanta freqüência: pode ficar em silêncio por alguns dias durante cinco minutos. Por exemplo, desde 1º de fevereiro deste ano, apenas 14 posições foram acionadas.
Poderia ser a razão da minha situação que o registro escreve: 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 e repete solidamente para
2018.01.26 16:38:12 2018_WPR14_AMarkets EURUSD,M5: Alerta: Total de pedidos = 3 ? Na captura de tela você pode ver que este período captura duas condições próximas
Qual é a sua situação? Você está dizendo que o terminal está fazendo uma entrada de registro que está causando o erro? e o que significa 138 ? você sabe onde procurar? Como você conseguiu isso é um erro muito raro. O que você vê na imagem da tela é metade da batalha. Como explicar isto ao Consultor Especialista? Você tem que escrever alguma condição matemática - ao invés de ver a captura de tela, o Consultor Especialista opera com números
Você está dizendo que o terminal faz uma entrada de registro, o que causa o erro? ... O que significa 138? Você sabe onde procurar?
Não, eu estou dizendo que o testador falha neste intervalo da história, o que impede que os sinais funcionem corretamente. Porque as solicitações não podem continuar por 24 horas.
Não, o que eu quero dizer é que há uma falha no testador neste ponto da história, o que impede que os sinais funcionem corretamente. Porque as solicitações não podem continuar por 24 horas.
Exigências no testador? Essa é a primeira vez que ouço. O testador é o ideal - ele nem sequer tem escorregamento
...algo está chutando o indicador - tendência para cima. Vou comprar ... Entendi... Embora não seja suficiente eu queria mudar a TP para cima - já funcionou...
Então defina uma EA que, se ela fizer isso, então sairá e continuará no próximo tick. E experimente na demonstração
Escreva pelo menos um bloco e mostre-o. O próximo passo é sugerir isso aqui.
Em matrizes: aqui declarei 4 matrizes em nível global:
Depois os zerei na função de abertura de posição:
Como preenchê-los agora? No exemplo com o qual estou tentando fazer isso, uma variável adicional é aplicada, mas eu não entendo como usá-la:
Embora não esteja bem claro porque preciso de todas estas matrizes quando posso obter os valores do bilhete, tipo de posição, preço aberto e tempo aberto com a função correspondente.
Em matrizes: aqui declarei 4 matrizes em nível global:
Em seguida, eu os zerei na função de abertura de posição:
Como preenchê-los agora? O exemplo que estou tentando usar aplica uma variável adicional, mas eu não entendo como usá-la:
Embora não esteja bem claro por que todas estas matrizes, quando consigo obter os valores do bilhete, tipo de posição, preço aberto e tempo aberto com a função correspondente.
Tente escrever a partir do zero, emitindo todos os dados intermediários usando Alert(. Por exemplo
E se você pegar o exemplo de alguém, pegue-o completamente e estude-o. Quem sabe o que o autor do exemplo está usando arrays para
Em matrizes: aqui declarei 4 matrizes em nível global:
Use uma variedade de estruturas. O acesso será muito mais fácil. Aqui está uma variante com uma matriz estática. É mais fácil de entender. Mas eu mesmo utilizo matrizes dinâmicas. Mas o código vai ficar um pouco maior com eles.
Depois os zerei na função de abertura de posição:
Não, você não o fez. Porque são declaradas matrizes dinâmicas que têm tamanho zero por padrão. Portanto, neste caso, estas quatro linhas de código não fazem nada.
Agora, como preenchê-los? O exemplo que estou tentando usar tem uma variável adicional, mas eu não entendo como usá-la:
A seguir - um ciclo de pedidos é organizado, no qual cada "próprio" pedido é armazenado em uma matriz:
Embora, não tenho bem certeza para que servem todas essas matrizes, quando posso obter os valores do bilhete, tipo de posição, preço aberto e tempo aberto usando a função correspondente.
É muito mais rápido e conveniente trabalhar com matrizes, uma vez que, em geral, nem todas as ordens presentes na conta precisam ser processadas por esta EA em particular. E como resultado, economizaremos muito esforço e dinheiro.
Além disso, eu mencionei acima é um caso geral. O universalismo nem sempre é necessário, é claro. Normalmente, tais matrizes são criadas com base nas exigências de uma estratégia. Por exemplo, podemos dividir os pedidos por tipo imediatamente: Comprar, Vender, ComprarStop, VenderStop, ComprarLimit, VenderLimit. Então, precisaremos de quatro matrizes desse tipo. Mas então não precisaremos passar por toda a lista de pedidos abertos novamente quando tomarmos decisões comerciais. Só precisamos saber o número de pedidos de um determinado tipo e consultar a matriz necessária.
Há mais uma coisa importante a considerar: mudar o conjunto de pedidos durante o processamento de um tick. Pode muito bem acontecer que uma lista de pedidos tenha sido recebida na entrada da OnTick, e outra em algum lugar no meio. Isto levará a um erro na operação do programa que é difícil de ser capturado. E o conjunto de ordens que já foi formado ao entrar no OnTick não mudará (a menos, é claro, que você mesmo mude durante a execução do programa).
string s=FileReadString(F1); // Ler string do arquivo de texto
StringSplit(s, ","," , a); // Elementos de corda separados por vírgula em uma matriz
datatime T1=StrToTime(a[4]); // Além disso, a transformação ...
int ord=StrToInteger(a[8]);
double Price=StrToDouble(a[12]);
Obrigado, exatamente o que eu queria.
A seguir, há 5 produtos fabricados
Lançamos uma leitura de alerta (qualquer)
por exemplo, nível "200".
Quando o alerta dispara, algo abre a pose, algo se apaga, algo faz outras coisas. Quero implementar um mecanismo para dar um sinal desta forma
Z.U.
Terminei o que eu queria, posso enviá-lo para revisão. Galpões perfeitamente. Mas é proibido afixar aqui.
Por exemplo, é possível dividir os pedidos por tipo de uma só vez: Compra, Venda, BuyStop, SellStop, BuyLimit, SellLimit. Então, precisaremos de quatro matrizes desse tipo. Mas então não precisaremos passar por toda a lista de pedidos abertos novamente quando tomarmos decisões comerciais. Só precisamos saber o número de pedidos de um determinado tipo e consultar a matriz necessária.
Isso é exatamente o que eu preciso, ou melhor, só paraComprar e Vender. O principal para minha estratégia simples é não deixar que as posições abertas interfiram umas com as outras para ver as condições de fechamento. Talvez, podemos prescindir de arrays? Eu não os entendo: como criá-los, como abordá-los - estou no escuro. Talvez minha situação se torne mais clara para você na captura de tela:
Parece que tudo no código é simples e funciona claramente, mas este é o único caso de incompreensão.
Isto é exatamente o que eu preciso, ou melhor, apenas paraComprar e Vender. Para minha estratégia simples, o mais importante é que as posições abertas não interfiram nas condições de fechamento um do outro. Talvez possamos passar sem matrizes? Eu não os entendo: como criá-los, como abordá-los - estou no escuro. Talvez minha situação se torne mais clara para você na captura de tela:
Parece que tudo no código é simples e funciona claramente, mas este é o único caso de incompreensão.
Naturalmente, na mais simples (e média complexidade) sem arrays é mais conveniente. Mas quando se chega ao ponto de usar centenas de pedidos - então...
Poderia ser a razão da minha situação que o registro escreve: 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 e repete solidamente para
2018.01.26 16:38:12 2018_WPR14_AMarkets EURUSD,M5: Alerta: Total de pedidos = 3 ? Na captura de tela você pode ver que este período captura duas condições de fechamento da VENDA.
E os sinais para abrir uma posição são acionados por uma combinação de vários indicadores e fechados por um indicador. E eles não trabalham com tanta freqüência: pode ficar em silêncio por alguns dias durante cinco minutos. Por exemplo, desde 1º de fevereiro deste ano, apenas 14 posições foram acionadas.
Poderia ser a razão da minha situação que o registro escreve: 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 e repete solidamente para
Qual é a sua situação? Você está dizendo que o terminal está fazendo uma entrada de registro que está causando o erro? e o que significa 138 ? você sabe onde procurar? Como você conseguiu isso é um erro muito raro. O que você vê na imagem da tela é metade da batalha. Como explicar isto ao Consultor Especialista? Você tem que escrever alguma condição matemática - ao invés de ver a captura de tela, o Consultor Especialista opera com números
Você está dizendo que o terminal faz uma entrada de registro, o que causa o erro? ... O que significa 138? Você sabe onde procurar?
Não, eu estou dizendo que o testador falha neste intervalo da história, o que impede que os sinais funcionem corretamente. Porque as solicitações não podem continuar por 24 horas.
Não, o que eu quero dizer é que há uma falha no testador neste ponto da história, o que impede que os sinais funcionem corretamente. Porque as solicitações não podem continuar por 24 horas.
Exigências no testador? Essa é a primeira vez que ouço. O testador é o ideal - ele nem sequer tem escorregamento
...algo está chutando o indicador - tendência para cima. Vou comprar ... Entendi... Embora não seja suficiente eu queria mudar a TP para cima - já funcionou...
Então defina uma EA que, se ela fizer isso, então sairá e continuará no próximo tick. E experimente na demonstração