[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 10
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
Você pode aconselhar se é possível determinar programmaticamente a possibilidade de estabelecer um stop loss/stake profit imediatamente na abertura/estabelecimento de uma ordem pendente ou posteriormente?
Verifique previamente os níveis de parada e lucro.
Os identificadores de solicitação utilizados na função MarketInfo(). Pode ser um dos seguintes valores:
Estou apenas aprendendo como escrever um EA, como muitos dos meus primeiros EAs sobre indicadores padrão, acabei de escrever um novo, mas agora compliquei minha tarefa. Em geral, como fazer, que no surgimento de condições abrisse uma posição e ao fechá-la, tomemos as mesmas condições ao salvar a nova não abriu, e abriu somente quando as condições opostas, etc. Obrigado!!!
há um exemplo pronto na ajuda
Parada de pré-verificação e níveis de definição de lucro .
Não há verificação nesta lista para certos tipos de conta. Aqui está um parágrafo do Regulamento de Operações Comerciais para contas NDD:
3.3 Se uma posição for aberta através do Terminal do Cliente usando um Expert Advisor, o Cliente não poderá designar Stop Loss e/ou Take Profit Orders. Se o Cliente desejar fazer estes pedidos, poderá fazê-lo modificando uma posição existente de acordo com as cláusulas 5.16 - 5.22 e 9.13 - 9.16.
Estou interessado em saber se isto pode ser verificado de forma programática. Pelo que entendi, não. É preciso originalmente escrever em um programa uma função para abrir posições / estabelecer ordens pendentes, levando em conta as condições que são estabelecidas pelo corretor.Não há verificação nesta lista para certos tipos de conta. Aqui está um parágrafo do Regulamento de Operações Comerciais para contas NDD:
Eu realmente não entendo as regras para definir ordens, tente jogar com a demonstração e veja o que você pode e não pode fazer. Pelo que entendo nada impede que você programe uma ordem e depois a modifique. É estranho, a menos que você corte a conexão após abrir uma posição não deixando nenhuma parada .
Estou interessado em saber se isto pode ser verificado de forma programática. Pelo que entendi, não. Inicialmente, é necessário escrever no programa uma função para abrir posições/definir ordens pendentes, levando em conta as condições estabelecidas pelo corretor.Não há verificação nesta lista para certos tipos de conta. Aqui está um parágrafo do Regulamento de Operações Comerciais para contas NDD:
Não há nenhum problema. Mesmo (se não para uso pessoal, porque você sabe em quais contas (condições comerciais e com quem) usá-la), mas se você enviar a EA para fazer o pedido e o cliente ainda não tiver decidido quais contas e onde ela será usada, mesmo em tipos de contas com a possibilidade de definir um take e stop imediatamente, então por padrão produza a EA com valores zero desses níveis ao definir todos os tipos de pedidos, então com sua modificação (funcionará lá e lá), enquanto, é claro, ninguém cancelou os requisitos e restrições de verificação na p.
Não entendo muito bem as regras para definir ordens, tente jogar com a demonstração, o que você pode e o que você não pode. Até onde eu entendo nada impede que você estabeleça uma ordem programática e depois a modifique. Certo, parece estranho, a menos que você corte a conexão após abrir uma posição não deixando nenhuma parada .
))) Não. Você me entendeu mal completamente. Eu não escrevi sobre "set programático", eu escrevi sobre definição programática. Em alguns tipos de conta você não pode abrir imediatamente uma posição e definir paradas/paradas, o que seria preferível/seguro para mim. No mql5, se não estou enganado, parece ser possível determinar isto. Gostaria de poder determinar isso e, dependendo da definição, escolher qual função utilizar.
Não há nenhum problema. Mesmo (se não para uso pessoal, porque você sabe em quais contas (condições de negociação e com quem) usá-la), mas se você fizer uma EA para pedir e o cliente ainda não tiver decidido em quais contas e onde irá usá-la, mesmo em tipos de contas com a possibilidade de definir um take e stop imediatamente, então você ainda faz uma EA com valores zero desses níveis por padrão ao definir todos os tipos de ordens, então com sua modificação (funcionará lá e lá), enquanto, é claro, ninguém cancelou os requisitos e restrições de verificação na p
Sim, não há problema quando há uma solução. Você só precisa usar o que você tem e usá-lo corretamente).
Roman. e ivandurak muito obrigado por suas respostas, mas isto ainda é difícil para mim. Encontrei uma sugestão em outro fórum sobre como fazer isto, mas até agora não posso aplicá-la ao meu código habitual
na BuyTrue, SellTrue;// definir variáveis que servirão como estas bandeiras
....
//--- Condição para compra
se (BuyTrue==0 && ... mais suas outras condições) // condição de posição aberta
{
....
OrderSend(....); //função para abrir um pedido
BuyTrue=1; // Se BuyTrue=1, a condição para abertura de posição não será totalmente satisfeita
// conseqüentemente, em um sinal de compra repetida não será aberto um comércio
SellTrue=0; // Em SellTrue=0 a condição da abertura da posição será totalmente satisfeita
// portanto, a próxima venda será apenas Sell
....
}
//--- Condição para a venda
se (SellTrue==0 && ... mais suas outras condições) // condição de posição aberta
{
....
OrderSend(....); //função para abrir um pedido
SellTrue=1; // Se SellTrue=1, a condição para abertura do pedido não será totalmente satisfeita
// portanto, em um segundo sinal de Venda, uma posição não será aberta
BuyTrue=0; // Na BuyTrue=0 a condição de abertura de posição será totalmente satisfeita
// conseqüentemente, a próxima negociação será Comprar somente
....
}
Meu código para abrir uma posição
total=OrdensTotal();
if(total<1)
{
// nenhuma ordem aberta identificada
if(AccountFreeMargin()<(1000*Lots))
{
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin();
retorno(0);
}
// verificar a posição longa (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError()));
retorno(0);
}
// verificar a posição curta (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido de venda aberto : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError()));
retorno(0);
}
retorno(0);
}
Roman. e ivandurak muito obrigado por suas respostas, mas isto ainda é difícil para mim. Encontrei uma sugestão em outro fórum sobre como fazer isto, mas até agora não posso aplicá-la ao meu código habitual
na BuyTrue, SellTrue;// definir variáveis que servirão como bandeiras descritas acima
....
//--- Condição para compra
se (BuyTrue==0 && ... mais suas outras condições) // condição de posição aberta
{
....
OrderSend(....); //função para abrir um pedido
BuyTrue=1; // Se BuyTrue=1, a condição para abertura de posição não será totalmente satisfeita
// conseqüentemente, em um sinal de compra repetida não será aberto um comércio
SellTrue=0; // Em SellTrue=0 a condição da abertura da posição será totalmente satisfeita
// portanto, a próxima venda será apenas Sell
....
}
//--- Condição para a venda
se (SellTrue==0 && ... mais suas outras condições) // condição de posição aberta
{
....
OrderSend(....); //função para abrir um pedido
SellTrue=1; // Se SellTrue=1, a condição para abertura do pedido não será totalmente satisfeita
// portanto, em um segundo sinal de Venda, uma posição não será aberta
BuyTrue=0; // Na BuyTrue=0 a condição de abertura de posição será totalmente satisfeita
// conseqüentemente, a próxima negociação será Comprar somente
....
}
Meu código para abrir um negócio.
total=OrdensTotal();
if(total<1)
{
// nenhuma ordem aberta identificada
if(AccountFreeMargin()<(1000*Lots))
{
Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin();
retorno(0);
}
// verificar a posição longa (BUY)
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError()));
retorno(0);
}
// verificar a posição curta (SELL)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido de venda aberto : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError()));
retorno(0);
}
retorno(0);
}
Primeiramente, cole seu código no editor via Ctrl+Alt+M (ou pressione SRC no topo do menu), caso contrário é ruim, o que está claro - tudo se mistura sob um só...:-)
Em segundo lugar, leia o tutorial, em particular as informações sobre o link que eu recomendei, abaixo do código está sua descrição e no final da descrição está precisamente descrito - como relatar uma vez um preço acima/abaixo do MA (você terá uma analogia com uma única entrada em uma determinada condição comercial - o uso de bandeiras e tudo), antes de TRABALHAR seu Mago ... :-)))
P.S. ou google search: Como inserir corretamente o código site:mql4.com