![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
E aqui está outra pergunta para Igor.
Você criou uma função personalizada separada (ou outra) para inverter a posição de compra-venda e vice-versa, sem a habitual OrderClose - OrderSend?
Não sou Igor, mas existe uma função OrderCloseBy padrão para inverter.
Olá, eu preciso de ajuda para resolver um problema. Deixe-me tentar descrevê-lo:
Há uma função que conta as ordens:
int OrdersAll(int mag)
{
int kolvo=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderType()==OP_BUY || OrderType()==OP_SELLL) && OrderSymbol()==Symbol() && OrderMagicNumber() == mag )
kolvo++;
}
}
return(kolvo);
}
Além disso, no processo, se não houver pedido para o símbolo atual, quando a condição for atendida, 1 pedido, por exemplo, para comprar deve ser colocado:
if(OrdersAll(MAGICNO)==0)
{
if(condição)
{
op=Ask;if(SL>0){sl=Ask-SL*Point*mn;}if(TP>0){tp=Ask+TP*Point*mn;}
err=OrderSend(Symbol(),OP_BUY,LotsOptimized(),NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),
NormalizeDouble(tp,Digits),"",MAGICNO,0,Blue);
if(err<0)
{
Print("OrderSend()- Error OP_BUY. O pedido não é aceito. op "+op+" sl "+sl+" tp "+tp+""+GetLastError());return(-1);
}
}
}
Em vez disso, ao abrir vários símbolos no terminal e executar uma EA em cada um deles, por exemplo, o código acima pode abrir uma ordem - isto é correto, mas ao mesmo tempo pode abrir 20-30 ordens até que a morsa se esgote se a condição se mantiver por vários tiquetaques. Ainda não vi isso acontecer em um único instrumento, mas também não tenho certeza se isso não acontecerá em um único instrumento. Como eu conserto meu código para dificultar a abertura de não mais que um pedido.
Igor, boa noite,
Eu não posso administrar sua chamada de função:
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 19.02.2008 |
//| Descrição : Retorna o lucro total das posições em aberto na moeda do depósito |
//+----------------------------------------------------------------------------+
//| Parâmetros: |
//| sy - nome do instrumento (" - qualquer símbolo, |
//| NULL - símbolo atual) |
| //| op - operação (-1 - qualquer posição) |
//| mn - MagicNumber (-1 - qualquer magik) |
//+----------------------------------------------------------------------------+
duplo GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
duplo p=0;
int i, k=OrdensTotal();
se (sy=="0") sy=Símbolo();
para (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
se ((OrderSymbol()==sy ||| sy==") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (mn<0 || OrderMagicNumber()==mn) {
p+=OrderProfit()+OrderComission()+OrderSwap();
}
}
}
}
}
retorno(p);
}
Você pode me dizer, na chamada TotOrdProf=GetProfitOpenBuyPosInCurrency(EURUSD, ____, 1);
1. Suponha EURUSD, se estiver entre aspas "EURUSD" ou se for permitido sem ele;
2. Qual deve ser o segundo parâmetro de chamada (onde é um traço) para calcular o lucro total de compra e venda (eu tentei o padrão -1; não correto)
3. O terceiro parâmetro é o número mágico do Expert Advisor? - Ainda não cheguei a ele, apenas uma pergunta se entendi corretamente o parâmetro.
Obrigado.
TotOrdProf=GetProfitOpenBuyPosInCurrency("EURUSD",-1, -1);
- somente para EURUSD
- todas as posições em aberto (-1)
- posições com qualquer magik (-1)
Boa tarde.
Como você sabe, Sleep() não funciona no terminal de teste, então você tem que usar laços de funções matemáticas para atrasar a execução:
onde zFILE é o Expert Advisor's execution delay.
Minha pergunta é: Existe uma solução mais sofisticada, pois preciso de algum atraso de alguns segundos a 10-20min (processamento de dados por programa externo)?
Ou pelo menos como medir o tempo de execução com mais precisão (o desempenho dos processadores é diferente) e pegar o mais lento ?
Pergunta: existe uma solução mais elegante (função de atraso), pois o atraso é necessário de alguns segundos a 10-20min (processamento de dados por software externo) ?
Não tentou usar callbacks e sincronizadores?
As funções de Kim
Será que existe uma função que lhe permite puxar o nome do último padrão?
e registrar mudanças em seus componentes
KimIV talvez você possa e escreva um indicador
O indicador deve procurar um canal plano dentro de um período de tempo especificado e não mais amplo do que o especificado nas configurações
Este indicador deve pesquisar o canal dentro de um dia e com transição para o dia seguinte como em sua função éTradeTimeInt().
![](https://c.mql5.com/mql4/forum/2009/09/ind.jpg)
Este indicador pode desenhar 5 canais durante um dia ou apenas um.
Nas configurações
dupla altura máxima externa do canal em pontos
tempo int externo Bar_Time como calculamos o intervalo de tempo em barras (1) ou horas e minutos (2)
intervalo de tempo mínimo de fio externo do canal em horas e minutos
Intervalo de tempo mínimo int int externo do canal em barras
número máximo de canais sorteados externos que permanecem sorteados
Anexei um indicador semelhante a https://www.mql5.com/ru/code, mas ele desenha o canal em um intervalo de tempo estritamente definido e não procura tal canal por si só. Deve procurar apenas um canal que não exceda a altura máxima do canal e que não seja inferior ao intervalo de tempo mínimo do canal.
Se escolhermos Bar_Time para o tempo do canal, o canal(1) é calculado a partir do tempo atual menos o tempo dado nas configurações, ou seja, 2 horas 15 min ou outro tempo. Se agora for 1 hora 15 min, procura-se o máximo e o mínimo a partir de 23 horas 00 minutos e se o máximo menos o mínimo estiver abaixo da altura máxima do canal, traça duas linhas max e min das 23:00 às 02:15. Ele também desenha os níveis de Fibo acima e abaixo do canal.
Se escolhermos Bar_Time por número de barras, o canal é calculado a partir da barra atual menos o número de barras especificado nas configurações, ou seja, da barra zero até a barra zero menos o número especificado nas configurações. Se o número escolhido for 50, buscamos o alto e o baixo das últimas 50 barras a partir da barra zero e se o alto menos o baixo não for maior que a altura máxima do canal, duas linhas de alto e baixo de 50 barras serão traçadas.
Todos os níveis e dados de canal são armazenados em buffers
Pergunta a Igor
Se você puder me dar um fragmento de código de um Expert Advisor trabalhando em duas contas separadas (Buy Sell), pesquisando o estado de cada conta (para calcular o tamanho do lote) e tendo a capacidade de transferir o depósito de uma conta para outra, bem como simulando o saque de parte do depósito sob certas condições (digamos um lucro mensal ou trimestral - a partir dele n%)
Deixe-me esclarecer minha pergunta
1 Expert Advisor trabalha em Buy (sondagens estado da conta 2) . 6200
2 Expert Advisor abre posição de Venda (solicita saldo de conta em 1) ... 8400
Se não houver posições em aberto
1100 da conta 2 para a conta 1
conta 1 - 7300
conta 2 - 7300
depósito bruto total SD=14600 Risco máximo - 10% Lote máximo 0,14
Mais
a partir de 01.04.09 SD=10000
a partir de 01.07.09 SD=14600
Lucro=4600
10% = 460
460 deduzidos na terceira conta
Obrigado
Caro Igor, me ajude!
Eu conectei a-SimpleTrailing.mqh.
Acrescentei o que foi especificado, mas 3 erros estão aparecendo:
'clModifyBuy' - variável não definida
'clModifySell' - variável não definida
'ti' - variável já definida
O que fazer?(
Aqui está o que se encaixa: