[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 37
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
Muito obrigado por sua resposta! Mas ainda assim, como descrever a futura barra após Ask[0],Bid[0]?
Assim que esta futura barra aparecer, ela se tornará zero. E a barra que está agora [0] será [1].
Ask e Bid NÃO são arrays, há apenas um valor atual, todos os anteriores são esquecidos
Por favor, ajude-me a entender o cálculo do depósito
porque meu depósito estimado coincide exatamente com o terminal
somente quando todos os pedidos estão totalmente bloqueados
. Quando eu adiciono mais um pedido ao sistema de pedidos - o resultado do depósito
terminal sempre difere muito ligeiramente do meu depósito estimado
, mas eu nunca consigo ser um bala em uma bala!
Aqui está um exemplo muito breve:
A conta tem 4 pedidos de 10,00 lotes cada, dois deles de bicicletas
e dois de vendas. É claro que a conta está em equilíbrio e todas as ordens estão bloqueadas
Calculamos o depósito padrão para cada ordem, dividimo-lo por 4 e tudo está na ponta dos pés
O terminal bate exatamente.
Colocamos mais um byke a 1,00 lote a 1,4059
Calculamos o depósito. É claro que para isso temos que pagar o depósito padrão
uma vez que todas as encomendas existentes estão na caixa.
Para uma alavancagem de 1:100 temos a promessa para a nova bicicleta
ZALBuy = 140,59*1,00 = 140,59
Portanto, o antigo depósito deve ser aumentado neste valor,
Adicione o antigo depósito e o depósito para nosso byte 1,00
ZAL=ZALold + ZALBuy = 1407,23 + 140,59 = 1547,82
Após a colocação do tchau no terminal o depósito acabou sendo 1547,91
Isto seria aceitável se eu tivesse colocado o tchau 9 pontos acima de
à taxa de câmbio 1,4068 Pois se calcularmos o aumento real do depósito
como a diferença do depósito antes e depois, obtemos exatamente o depósito padrão
para 1,00 lote à taxa 1,4068
1547.91 - 1407.23 = 140.6801
A alteração da versão terminal, infelizmente, não ajudou!
-----------------------------------------------
Perdoe-me por tomar seu tempo, mas estaspequenas discrepâncias constantes realmente me incomodam
porque minha máquina conta diferentes opções,
e o depósito como saldo e lucro é usado para calcular
todos os parâmetros da conta após certas ações antes de serem implementadas
. Portanto, a precisão é muito desejável aqui.
Talvez eu não entenda algo, mas procurei na documentação
e não consegui encontrar a razão desta discrepância.
Eu ficaria muito grato por sua ajuda!
Cumprimentos MADZX
Você pode esquecer este cenário. A re-citação ocorre se o café quiser levar seu dinheiro, eles não querem saber qual é a lacuna, eles o farão de qualquer forma). Esta é a realidade de algotrading a maioria das empresas fraudulentas que se dizem "o melhor corretor XXXXX" (XXXXXX - inserir nome de um continente ou galáxia, o que quer que seja)
Alterar ou não alterar a configuração, tudo permanece o mesmo.
Absolutamente certo! Eu também já vi isso!
Olá! Você pode me dar uma descrição de um bar real +1. Por exemplo, eu preciso do preço do próximo bar, não do atual.
Tanto quanto eu entendo, você está tentando obter informações da máquina do futuro
Se você encontrar uma maneira - compartilhar, eu ficaria grato :)
Saudações a todos. Eu mesmo sou novo em programação, portanto, por favor, resolva o problema.
É necessário que vários EAs na mesma conta, abram um número limitado de pedidos.
Por exemplo: 10 EAs mas só pode abrir 5 pedidos, mas não mais de um por par de moedas.
Isto foi implementado da seguinte forma, mas não funciona dessa forma.
extern int МаксКолОрдеров = 5;
//+------------------------------------------------------------------+
int ПодсчетОткрОрдеров() {
int k=OrdersTotal();
if (Символ=="0") Символ=Symbol();
for (int i=МаксКолОрдеров; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Символ || Символ=="") {
if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) {
if (OrderMagicNumber()<1) return(True);
}
}
}
}
return;
}
//+------------------------------------------------------------------+
int start()
{
if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий();
}
Eu implementaria tal espetáculo da seguinte forma:
Todos os 10 de seus cavalos estão trabalhando cada um em seu próprio horário, como se em salas adjacentes
e, portanto, nenhum deles sabe o que o vizinho está fazendo atrás do muro - este é o principal problema
para sua idéia!
Portanto, eu instruiria cada EA a escrever suas ações em um arquivo de disco
que estará disponível para todos os cavalos, pois ele está no diretório do terminal .
Se algum deles tem um desejo ardente de fazer algo em sua janela
deve primeiro analisar este arquivo e verificar a possibilidade de implementar
desejo!
em relação ao seu cenário você precisa adicionar no arquivo o número de pedidos
e pares de moedas nos quais eles estão abertos
. Por exemplo:
EURUSD 1
GBPUSD 1
EURGBP 0
Aqui vemos que não podemos abrir negócios emEURUSD eGBPUSD porque o roteiro não permite que
tenha mais de um pedido por par.
É claro que haverá tantas linhas quantas houver pares em funcionamento.
Com esta solução todos os seus cavalos estarão sempre cientes do que está acontecendo no momento
, e poderão calcular se qualquer ação é permitida ou não no momento.
Quando você estabelece um pedido em qualquer par, você tem que colocar 1 na linha certa
Ao fechá-lo, substitua-o por zero
Isto definitivamente funcionará, embora um pouco complicado para um novato
. Mas vá em frente, porque todos estavam lá - como um novato até que chegue a hora!
Tenha uma boa caçada!
MADZX
Estou escrevendo uma estratégia de recuo. Preciso colocar uma ordem de parada acima (abaixo) do extremo da vela correspondente. Aqui está um exemplo:
É claro que se o fechamento for abaixo do aberto, é uma vela de baixa, e vice-versa - uma vela de alta elevação. Quero saber como fazer uma condição dizendo que a vela anterior está em alta. ... mais ou menos.
Logicamente, eu faço uma função que determinará o tipo de vela.
Então você deve de alguma forma perguntar se a barra com índice 1 está em alta ou em baixa. ...e fazer algo...
Como eu faço isso?
Eu implementaria um show como este:
Todos os seus 10 cavalos estão trabalhando cada um em seu próprio horário, como se estivessem em salas adjacentes
e, portanto, nenhum deles sabe o que o vizinho está fazendo atrás da parede - este é o principal problema
para sua idéia!
Portanto, eu instruiria cada EA a escrever suas ações em um arquivo de disco
que estará disponível para todos os cavalos, pois ele está no diretório do terminal .
Se algum deles tem um desejo ardente de fazer algo em sua janela
deve primeiro analisar este arquivo e verificar a possibilidade de implementar
desejo!
em relação ao seu cenário você precisa adicionar no arquivo o número de pedidos
e pares de moedas nos quais eles estão abertos
. Por exemplo:
EURUSD 1
GBPUSD 1
EURGBP 0
Aqui vemos que não podemos abrir negócios emEURUSD eGBPUSD porque o script não permite que
tenha mais de um pedido por par.
É claro que haverá tantas linhas quantas houver pares em operação.
Com esta solução todos os seus cavalos estarão sempre cientes do que está acontecendo no momento
, e poderão calcular se qualquer ação é permitida ou não no momento.
Quando você estabelece um pedido em qualquer par, você tem que colocar 1 na linha certa
Ao fechá-lo, substitua-o por zero
Isto definitivamente funcionará, embora um pouco complicado para um novato
. Mas vá em frente, porque todos estavam lá - como um novato até que chegue a hora!
Tenha uma boa caçada!
MADZX
Obrigado pela dica, mas é um pouco complicado demais. E então, em sua versão, tudo funciona, e são necessários 10 para verificar a condição de entrada,
Eles abrem apenas os primeiros cinco que conseguiram e depois, quando um deles fecha, o primeiro que corresponde às condições abre novamente,
não limitado a EURUSD 1 , GBPUSD 1 , EURGBP 0.
Acho que deveria haver uma solução mais simples. Deve ser semelhante à contagem do número total de pedidos com uma condição de limitação por um determinado parâmetro.
E a limitação pode ser definida ou por um símbolo ou por um número mágico não mais que um.
Embora sua versão provavelmente também funcione, mas não posso decidir como implementá-la em código.
Eu tenho uma coisa estranha acontecendo aqui. Esta é a função de abrir ordens:
aqui está o erro:
if(SL < g_stopLevel) SL = g_stopLevel*pt;
se o nível de parada = 5, então você está tentando colocar uma parada de perda em 0,00005.
O segundo erro é que você não verifica onde você está fazendo o pedido. Se o castiçal fechar em ou perto de sua altura baixa, você receberá o erro 130. Como você pode ver na figura, o servidor abriu uma ordem de venda em vez de um "selltop" porque você tentou abrir um pedido "selltop" a um preço maior ou igual ao preço atual.
Aprenda a usar a impressão. Basta colocar Print(); no lugar certo, colocar as variáveis requeridas entre parênteses e separá-las com isto: ", ", assim: Print(Price," ",SL); e durante os testes no momento da abertura de uma ordem na guia "Experts" você verá a que estas variáveis são iguais, e será capaz de entender o que está errado.
O registro também mostrará o que a EA está tentando fazer, onde estabelecer um Stop Loss e Take Profit. Lá você verá tudo o que precisa.
Logicamente, eu faço uma função que detectará o tipo de vela.
Vamos começar a trabalhar dentro da função.
Primeiramente, criamos uma variável na qual escreveremos a direção da vela anterior.
int Candle=-1;
Vamos preenchê-lo com alguns valores, um dos quais denotará uma alta, outro - baixa. Se -1, não é nada (não foi determinado ou não tem direção próxima=aberta).
Valor que proponho utilizar por analogia com uma ordem comercial 0 - comprar, 1 - vender;
então temos que escrever:
if(Close[1]>Open[1]) Candle=0; else
if(Close[1]<Open[1] Candle=1;
Agora temos uma direção definida e podemos usá-la diretamente na função OrderSend( símbolo de corda, int cmd, ...outras coisas...);
if(Candle!=-1) OrderSend( Symbol(),Candle, ...outras coisas...);
ou seguindo sua analogia:
if(Candle==0) OpenBuy();
if(Candle===1) OpenSell();
Obrigado pela dica, mas é um pouco complicado demais. E então acontece que todos eles funcionam em sua versão e são necessários 10 para verificar as condições de entrada,
e eles abrem apenas cinco que chegaram a tempo primeiro e depois, quando um deles fecha, o primeiro que corresponde às condições abre novamente,
não limitado a EURUSD 1 , GBPUSD 1 , EURGBP 0.
Acho que deveria haver uma solução mais simples. Deve ser como contar o número total de pedidos com uma condição de limitação por um determinado parâmetro.
E precisamos limitar este número ou por um símbolo ou por um número mágico, ou por não mais de um.
Embora, talvez, sua variante também funcione, mas como implementá-la no código, eu não consigo pensar.
Ou talvez assim :
Aqui está uma funçãohá aqui um erro:
se o nível de parada = 5, então você está tentando colocar uma parada de perda em 0,00005.
O segundo erro é que você não verifica onde está fazendo o pedido. Se o castiçal fechar em ou perto de sua altura baixa, você receberá o erro 130. Como você pode ver na figura, o servidor abriu uma ordem de venda em vez de um "selltop", porque você tentou abrir um pedido "selltop" a um preço maior ou igual ao preço atual.
Aprenda a usar a impressão. Basta colocar Print(); no lugar certo, colocar as variáveis requeridas entre parênteses e separá-las com isto: ", ", assim: Print(Price," ",SL); e durante os testes no momento da abertura de uma ordem na guia "Experts" você verá a que estas variáveis são iguais, e será capaz de entender o que está errado.
O registro também mostrará o que a EA está tentando fazer, onde estabelecer um Stop Loss e Take Profit. Ele mostrará tudo o que é necessário.
Eu a utilizo dessa forma de tempos em tempos. Veja, agora as funções se parecem com isto:
Eu li na revista:
Assim, inicialmente do preço de compra até a parada foi a diferença de 1.3204 - 1.3194 = 0.001 pontos
Mais 1.3210 - 1.3201 = 0.009 pontos
E por alguma razão, no segundo caso, a parada estava mais próxima do preço de entrada, mas não houve erro! Pensei sobre isso e não o entendi.
Corrigi o erro posteriormente de uma maneira diferente. Já existem condições no código:
if(price > Ask) && if(price < Bid) respectivamente para compra e venda. Ou havia outra variante? Agora não temos mais erros. Mas, mesmo assim, gostaria de ouvir a opinião de um programador mais experiente.