
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
há apenas um contexto comercial para todos os EAs. a solução correta é construir seu próprio sistema de semáforos sobre variáveis globais.
em 4 minutos. em 10 minutos o erro 139 ocorreu 7 vezes
há apenas um contexto comercial para todos os EAs. a solução correta é construir seu próprio sistema semáforo sobre variáveis globais.
Eu executei 4 EAs em 4 min. em 10 min. 7 vezes erro 139
Você poderia me dizer, pelo menos em termos gerais, qual deveria ser este sistema de semáforos?
1. Em particular, como um comércio deve ser feito para não interferir com outros.
2. Escorregões, cheques, timeouts (que foram prometidos para estar ausentes em MT multithreaded, mas vamos lá)
E finalmente. Não tome isto como uma reprimenda. Você tem um livro didático. Nele é dado o especialista. Mostre-me aqueles semáforos ali.
Eis o meu especialista. Simples como uma calça para um rublo vinte. Vire uma posição a cada hora. Se você realmente se importa com comerciantes e lucros de corretores (eu não sei sobre as pessoas, mas quero primeiro obter uma EA estável funcionando, e depois mudar de demonstração para real), então, por favor, no exemplo desta minha EA, mostre-me como eu devo fazer isso direito.
Sinceramente,
Quark
P.S. A questão da origem dos erros 2, 6, 138 e 4109, que às vezes também aparecem, permanece em aberto.
Eu li o tópico em inglês. Sim... Esses caras precisam aprender russo urgentemente.
Não é similar, é o mesmo problema. É verdade, eles ainda não têm erros 2, 6, 138 e 4109. Eles estavam falando apenas de 139.
Para ser honesto, não vejo o ponto em IsTradeAllowed. O próprio Slava explicou como dez Expert Advisors podem usar esta função e, de repente, começar a negociar e todos, exceto o primeiro, ficam desapontados.
Seria muito melhor fazer fila de pedidos onde eles se amontoassem, vivessem por algum tempo e fossem executados ou excluídos. Mas tudo isto é um sonho.
Ao invés disso, teríamos que criar uma variável global nTrading, por exemplo, e armazenar ali o nome do Expert Advisor. E o que outros EAs devem fazer? Voltar ao MT3 com suas ordens pendentes Ou existem outras idéias?
A propósito, podemos prescindir da variável global, algo como
onde Buy() e Sell() devolvem OP_BUY / OP_SELL em caso de fracasso e -1 em caso de sucesso.
As desvantagens são óbvias - o corretor receberá dez ordens para abrir (fechar) em vez de uma. Se for automático, tudo está bem. Se for um ser humano - será ofendido. Pior, se o autômato e o humano agem de acordo com lógica diferente. Por exemplo, um autômato não tem fila (como Slava nos explicou, um fio, e as ordens competem em vez de formar uma fila), e um humano sim. Então o comerciante começa a negociar no real, e ele nem vai entender o porquê, porque ele recebeu a garantia (eu - na apresentação do seminário em Alpari) de que não há diferença entre demonstração e real.
A segunda opção - a cada especialista e moeda é atribuído seu próprio Mn, de modo que a combinação Expert Advisor + moeda é única. Depois escrevemos o código de tal forma que a EA com IM1 negociará no primeiro segundo, com IM7 - no sétimo segundo, etc., após a abertura da barra. Isto dará ao sistema um segundo para o comércio.
Pergunta a Slava - é um segundo o suficiente para evitar o problema?
As desvantagens são óbvias, os escalpadores - os pistões lhe falarão sobre elas :)
Caros desenvolvedores (e tudo mais). Obrigado pelos esclarecimentos. Ainda há algumas perguntas não respondidas neste e em posts anteriores. Esperando por uma resposta.
Quark
se for feita uma função para definir o valor de uma variável global na condição de que essa variável tenha um determinado valor, de modo que não haja construção
então será 100% confiável
algo como
Não. As paradas são executadas no servidor.
E sobre a fila - tive a idéia de fazer uma EA que executasse ordens escritas em um arquivo. E todos os outros especialistas apenas escrevem ordens a este arquivo.
Mas não é muito fácil para mim ( no sentido de uma implementação competente )... Mas é possível tentar. Por esforço comum =)))
Esta é a passagem que eu não entendi:
if(GlobalVariableGet(SemaphoreName)==0.0)
{
GlobalVariableSet(SemaphoreName,1.0);
bSemaphored=true;
break;
}
Agora sobre a lógica deste caso. Desculpe incomodá-lo, mas...
Se entendi corretamente, estamos sentados em um loop até conseguirmos definir o semáforo. Certo? Então nós negociamos, sabendo que ninguém está negociando, exceto nós. Então devolvemos o semáforo ao seu estado original.
Pergunta: como funciona(!IsStopped())? ? Pensei que era um cheque para permitir o comércio ao vivo.
Pergunta: esses não causarão atrasos no sistema enquanto dormem?
Pergunta: o sono e o semáforo serão processados corretamente em modo de teste?
Outra pergunta lógica. Entre o ajuste e a remoção do semáforo, temos duas (máximas) possibilidades para tratar as ordens. Primeiro Comprar() ou Vender() e depois, abaixo dele, FecharOrdem(). Essas duas "atividades" não irão competir entre si, embora dentro da EA, como se houvesse dois Conselheiros Especializados? Ou o processo é garantidamente linear e não alcançará CloseOrder() até que a Buy() retorne?
Agradecemos antecipadamente.
Quark
Não. As paradas são tratadas no servidor. e em nosso caso há concorrência para o fluxo comercial especializado do cliente
Eu falei mal. Caso Encomende(OP_BUYSTOP... também o envolve com código que define e remove os semáforos? Pergunta boba. Claro, você deve.
Reestruturou as funções comerciais (conectou minha biblioteca) e a anexou a outro euram - m15. Meijic, é claro, foi mudado.
Vou lhe dizer o que tenho mais tarde à noite ;)