[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 69
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Por favor, alguém veja o meu post anterior (na página 67). Não consigo encontrar o erro - as ordens pendentes não estão sendo definidas.
Não há engano. Você deveria ser mais cuidadoso.
Não há engano. Você precisa ser mais cuidadoso
Não, não, não, não, não. Você está olhando para o posto errado. Há outro logo abaixo :))). A versão que você verificou não especifica o nível do preço atual (somente o preço atual) ao qual o pêndulo deve ser fixado. Obrigado por seu feedback.
Não, não, não. Você olhou para um posto errado. Há outro logo abaixo :))). A versão que você verificou não mostra o nível a partir do preço atual (mostra apenas o preço atual), ao qual o pingente deve ser ajustado. Obrigado por seu feedback.
Algo com a chamada de função OPENORDER() ou a própria função.
Funciona assim
se (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); caso contrário TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); caso contrário SL=0;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
}
Algo com a chamada de função OPENORDER() ou a própria função.
Funciona assim
se (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); caso contrário TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); caso contrário SL=0;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
}
Aaaaaaaaaaaaah!!! Deuses dos computadores!!! Eu já passei por isso dez vezes! Por que não está funcionando?! O principal é que o mercado está aberto. Os pendentes são escritos exatamente sobre o mesmo princípio. O que está faltando? :)))))))
Favor aconselhar como inserir o TrailingStopFrCnSAR_v2 no Expert Advisor, que é descrito no tutorial?
Como eu desabilito o rastreamento de pedidos, para que funcione quando outro EA coloca um pedido pendente ou abre um pedido?
Urrrrrrra!!!!!!!! Encontrei o bug!
Se alguém estiver interessado, aqui está uma versão funcional:
#direitos autorais "Copyright © 2010, Khlystov Vladimir"
#p
roperty link "cmillion@narod.ru
#property show_inputs
//--------------------------------------------------------------------
stoploss int externo = 0; // nível de exposição do SL, se 0, SL não for exposto
lucro int int externo = 0; //t nível de TP, se 0, TP não é exibido
magia int int externa = 123456; //número de um pedido
bool BUY = falso; //abrir pedido de BUY
venda externa = falso; //abrir ordem de venda
bool BUYSTOP externo = falso; //abrir ordem BUYSTOP
bool SELLSTOP externo = falso; //abrir ordem SELLSTOP
Lote duplo externo = 0,1; // volume do pedido
escorregamento interno externo = 3; // desvio de preço máximo permitido para ordens de mercado
Distância interna externaSet = 20; //Mercado distância
//--------------------------------------------------------------------
duplo SL,TP;
//--------------------------------------------------------------------
int start()
{
se (COMPRAR)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); caso contrário TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); caso contrário SL=0;
OPENORDER ("Comprar");
}
se (VENDER)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); caso contrário TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); caso contrário SL=0;
OPENORDER ("Sell");
}
se (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); caso contrário TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); caso contrário SL=0;
OPENORDER ("Buy Stop");
}
se (SELLSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); caso contrário TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); caso contrário SL=0;
OPENORDER ("Sell Stop");
}
retorno(0);
}
//--------------------------------------------------------------------
OPENORDER(string ord) vazio
{
int error,err;
enquanto (verdadeiro)
{ erro=verdadeiro;
if (ord==="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord==="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,",Magic,0);
if (ord==="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord==="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,",Magic,0);
se (erro==-1) //failure
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
se (erro ||| err >10) retornar;
}
retornar;
}
//--------------------------------------------------------------------
ShowERROR nulo()
{
int err=GetLastError();
interruptor ( err )
{
caso 1: devolução;
caso 2: Alerta("Sem conexão com o servidor comercial ",Symbol()); retornar;
caso 3: Alerta("Parâmetros incorretos de erro ",Símbolo()); retornar;
caso 130: Alerta("Erro no fechamento do bilhete", Símbolo()); retornar;
caso 134: Alerta("Não há dinheiro suficiente", Símbolo()); retornar;
caso 146: Alerta("O Subsistema de Comércio de Erros está ocupado", Símbolo()); retornar;
caso 129: Alerta("Error Wrong price ",Symbol()); retornar;
caso 131: Alerta("Error Incorrect volume ",Symbol()); retornar;
case 4200:Alerta("O objeto de erro já existe ",Symbol()); retornar;
padrão: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------
Muito obrigado a todos que participaram da discussão!!! Em nenhum lugar sem você! :)))))
Urrrrrrra!!!!!!!! Descobrimos o erro!
Um grande obrigado a todos que participaram da discussão!!! Em nenhum lugar sem você! :)))))
você ainda tem um erro em seu código.
Lembre-se: as paradas e recebimentos de ordens pendentes não são contadas a partir do preço atual, mas a partir do preço de abertura da ordem.
AJUDA! Por favor me diga, se eu fechar parte de uma posição (por exemplo, pedir 1 lote, e fechar 0,5 lote) PedidoFechar bilhete deve mudar? Meu testador diz que sim... Como evitá-lo? Abaixo está um pedaço de código para fechamento...
1 2011.01.31 06:57 vender 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 fechar 1 0.51 1.36039 0.00000 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 vender 2 2 2.04 1.36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 fechar 2 0.40 1.36038 0.00000 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 vender 3 1.64 1.36177 0.00000 0.00000 0.00000 0.00000 10125.98
Outra pergunta: quero dividir meu pedido em 4 partes e fechar cada uma delas quando Cls_S===verdadeiro acionamento. Eu tentei usar o contador... Não funciona...
Alguém pode me dar uma idéia?
Obrigado antecipadamente!!!!
if (Tip===1 && ((Cls_S0===verdadeiro&&&TotClS==0)||(Cls_S1==verdadeiro&&&TotClS===1)
|||(Cls_S2==verdadeiro&&&TotClS===2)||(Cls_S3==verdadeiro&&TotClS====3)) // Uma ordem de venda está aberta.
{ // e há um critério para fechá-lo
Alerta ("Tentativa de fechar 0,2 Lote de Venda ",Ticket",". Aguardando resposta...");
RefreshRates(); // Refresh data
Ans=OrderClose(Ticket,LotCt,Ask,5);
se (Ans===verdadeiro) // Funcionou :)
{
TotClS++;
Alerta ("Fechado 0,2 Venda de Lote ",Ticket);
quebra; // Sair do circuito fechado
}
se (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // Tentativa
retornar; // Sair do início()
}
quebra; // Sair enquanto
Eu fiz um desenho temporário do tampão de bandeira - está vazio, mas por quê? Onde está o meu erro?
Acabei de corrigi-lo um pouco, para que mostrasse algo.
- Eu coloco o indicador em uma janela separada, então você pode colocá-lo de volta
- array macd[] estava pendurado no ar, tornou-o um indicador, aumentou a precisão
- fixou sua condição complexa para abrir, colocar uma simples para ajuste
- mudou a condição da bandeira, pelo menos ela funciona.
Então você pode introduzir gradualmente as condições, você verá imediatamente onde está o bug.