Alexandr24: Preciso de ajuda para encontrar o valor máximo do indicador N para o dia anterior; recebo dados através do iCustom, mas é um impasse. Acho que isso é feito através do ArrayMaximum, mas como encontrar o valor
Não consigo descobrir como encaixar o iCustom ali, mas não consigo pensar em nenhuma outra opção.
1. Encontre o número da barra no início do dia anterior, encontre o número da barra no final para.
2. Eu faria loop de um número para o outro e calcularia o máximo.
Você pode, naturalmente, usar o ArrayMaximum, mas após o primeiro passo.
Com relação aos procuradores, se alguém precisar realmente de IPs de trabalho, eu mesmo posso aconselhar http://buy.fineproxy.org/ por um longo tempo eu compro endereços lá, tudo funciona perfeitamente e há a possibilidade de um período de teste!
Você não pode escrever códigos que de forma desatenta :)
Ir para Comentário("USDCADAsk = ",USDCADAsk); seguido por USDCADAsk = DoubleToString(MarketInfo("USDCAD",MODE_ASK),usdcaddigits); USDCADAsk é declarado como duplo e você coloca uma string nele,
e depois Digits.... novamente ^) e Ponto
Você mesmo tem que procurar por tais erros, ninguém os consertará, assim como o comércio! O compilador gera 28 erros e você coloca a demonstração no comércio. Você pode desejar estar usando dinheiro real, mas o mercado teria corrigido você!
De quem é o Bid Ask ?
Correção
Acontece que você não precisava usar variáveis adicionais e depois não precisa de normalização, deveria ser assim.
Primeiro, você mesmo tentou exibi-los na tela para verificar, o que levou a erros, e segundo, a normalização é desejável e o preço de ajuste do pedido e TP, SL. Se o preço não for normalizado, isso pode causar erros. Esta é a regra e não devemos quebrá-la. Veja exemplos e analise porque este é o caso e não o contrário, por exemplo https://book.mql4.com/ru/samples/shared
Olá, você poderia me dizer como acrescentar, digamos, 23% ao OrderOpenPrice? Se você sabe que o OrderOpenPrice já é de 77%. Divido-a por 77, multiplico-a por 23 e obtive 7 pontos em vez de 31. Aqui está uma linha de código if (MarketInfo-OrderOpenPrice()>OrderOpenPrice()/50*Percent*Point). Esta é uma transferência para o Breakeven, mas não em pontos, mas em pontos percentuais. Agradecemos antecipadamente!
vidnab: Olá! Se você não se importa de me dizer como adicionar 23% ao OrderOpenPrice? Se você sabe que o OrderOpenPrice já é de 77%. Estou dividindo por 77, multiplicando por 23 e recebo 7 pontos em vez de 31. Aqui está uma linha de código if (MarketInfo-OrderOpenPrice()>OrderOpenPrice()/50*Percent*Point). Esta é uma transferência para o Breakeven, mas não em pontos, mas em pontos percentuais. Agradecemos antecipadamente!
Comprei cem mil euros a 50 rublos, depois acrescentei 23% ao preço de compra.
Para o seu caso, você precisa estabelecer o código na íntegra. Embora, se você quiser apenas levar a 100%, divida por 0,77.
Obrigado por sua resposta. Aqui está todo o código
//+----------------------------------------------------------------------------+ //| e-MovingInWL2.mq4 | //| | //| Kim Igor V. aka KimIV | //| http://www.kimiv.ru | //| | //| 27.10.2008 O assessor se move para o breakeven. | //+----------------------------------------------------------------------------+ #direitos de propriedade intelectual "Kim Igor V. aka KimIV" #link da propriedade "http://www.kimiv.ru"
//------- Parâmetros externos do consultor especializado -----------------------------------------+ string externa _P_Expert = "---------- Parâmetros EA"; bool externo AllSymbols = Verdadeiro; // Posições de observação de todos os símbolos magia int externa = -1; // Identificador de posição nível de lucro interno externo = 25; // nível de lucro em pontos nível interno externoWLoss = 1; // Nível de equilíbrio em pontos comentário externo ShowComment = True; // Comentário do show
//------- Parâmetros de execução das ordens de negociação ------------------------------+ string externa _P_Performance = "---------- Parâmetros de execução"; Use o sinal sonoro. External string SoundSuccess = "expert.wav"; // Som de sucesso cordão externo SoundError = "timeout.wav"; // Som de erro. Número externo internoOfTry = 2; // Número de tentativas
//------- Variáveis globais do Expert Advisor -------------------------------------+ bool gbDisabled = False; // Bandeira de EA trancada bool gbNoInit = Falso; // Bandeira de inicialização falhada color clModifyBuy = Aqua; // ícone colorido clModifyBuy color clModifySell = Tomate; // Cor do ícone de modificação de venda
//------- Conexão de módulos externos -----------------------------------------+ #incluir <stdlib.mqh>
//+----------------------------------------------------------------------------+ //| | //| FUNÇÕES PRÉ-DEFINIDAS | //| | //+----------------------------------------------------------------------------+ //| função de inicialização especializada | //+----------------------------------------------------------------------------+ init() { gbNoInit=Falso; se (!IsTradeAllowed()) { Mensagem ("Para que a EA funcione corretamente, é necessário que o "+ "Permitir que a EA negocie"); gbNoInit=Verdadeiro; retornar; } se (!IsLibrariesAllowed()) { Mensagem ("Para que a EA funcione corretamente, você deve "Permitir a importação de EAs externos"); gbNoInit=Verdadeiro; retornar; } se (!IsTesting()) { se (IsExpertEnabled()) Mensagem("O Expert Advisor será iniciado com o próximo tick"); outra mensagem ("O botão "Allow EAs to start") é liberado; } início(); }
//+----------------------------------------------------------------------------+ //| função de desinicialização especializada | //+----------------------------------------------------------------------------+ void deinit() { se (!IsTesting()) Comentário("); }
//+----------------------------------------------------------------------------+ //| função de início especializado | //+----------------------------------------------------------------------------+ início nulo() { se (gbDisabled) { Mensagem("Erro crítico! EA STOPPED!"); retornar; } se (gbNoInit) { Mensagem("inicialização da EA falhou!"); retornar; } se (ShowComment) { Comentário(IIFs(AllSymbols, "AllSymbols", ", ") "Magic="+IIFs(Magic<0, "Any", DoubleToStr(Magic, 0))+" " LevelProfit="+DoubleToStr(LevelProfit, 0)+"n " LevelWLoss="+DoubleToStr(LevelWLoss, 0)+"n". ); } else Comment(");
//+----------------------------------------------------------------------------+ //| | //| FUNÇÕES DO USUÁRIO | //| | //+----------------------------------------------------------------------------+ //| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Versão : 01.09.2005 | //| Descrição : Retorna o nome da operação comercial | //+----------------------------------------------------------------------------+ //| Parâmetros: ||| //| op - identificador da operação comercial | //+----------------------------------------------------------------------------+ string GetNameOP(int op) { interruptor (op) { caso OP_BUY : retornar("Comprar"); caso OP_SELL : devolução("Vender"); caso OP_BUYLIMIT : devolução("BuyLimit"); caso OP_SELLLIMIT : devolução("SellLimit"); caso OP_BUYSTOP : devolução("BuyStop"); caso OP_SELLSTOP : devolução("SellStop"); default : devolução ("Operação Desconhecida"); } }
//+----------------------------------------------------------------------------+ //| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Versão : 18.07.2008 | //| Descrição : Retorna um de dois valores, dependendo da condição. | //+----------------------------------------------------------------------------+ color IIFc(bool condition, color ifTrue, color ifFalse) { se (condição) retornar(ifTrue); caso contrário, retornar(ifFalse); }
//+----------------------------------------------------------------------------+ //| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Versão : 01.02.2008 | //| Descrição : Retorna um de dois valores, dependendo da condição. | //+----------------------------------------------------------------------------+ IIFs de corda(bool condition, string ifTrue, string ifFalse) { se (condição) retornar(ifTrue); caso contrário, retornar(ifFalse); }
//+----------------------------------------------------------------------------+ //| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Versão : 01.09.2005 | //| Descrição : Exibindo uma mensagem no comentário e no log | //+----------------------------------------------------------------------------+ //| Parâmetros: | //| m - texto da mensagem | //+----------------------------------------------------------------------------+ Mensagem nula(string m) { Comentário(m); se (StringLen(m)>0) Imprimir(m); }
//+----------------------------------------------------------------------------+ //| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Versão : 28.11.2006 | //| Descrição : Modificação de um pedido pré-selecionado |. //+----------------------------------------------------------------------------+ //| Parâmetros : | //| pp - nível de preço do pedido | //| sl - nível de preço da parada | //| tp - nível de preço do take out | //| ex - data de expiração | //+----------------------------------------------------------------------------+ void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) { bool fm; color cl=IIFc(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell); op, pa, pb, os, ot; int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice(); se (sl<0 ) sl=OrderStopLoss(); se (tp<0 ) tp=OrderTakeProfit();
se (pp!=op || sl!=os ||| tp!=ot) { para (it=1; it<=NumberOfTry; it++) { se (!IsTesting() && (!IsExpertEnabled() ||| IsStopped())) quebrar; enquanto (!IsTradeAllowed()) Sleep(5000); RefreshRates(); fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl); se (fm) { se (UseSound) PlaySound(SoundSuccess); break; {} else { er=GetLastError(); se (UseSound) PlaySound(SoundError); pa=MarketInfo(OrderSymbol(), MODE_ASK); pb=MarketInfo(OrderSymbol(), MODE_BID); Imprimir("Erro(",er,") modificando a ordem:",ErrorDescription(er),", tentar ",it); Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(), "op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp); Dormir(1000*10); } } } }
//+----------------------------------------------------------------------------+ //| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Versão : 23.04.2009 | //| Descrição : Move stop level to lossless | //+----------------------------------------------------------------------------+ //| 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) | //+----------------------------------------------------------------------------+ void MovingInWL(string sy="", int op=-1, int mn=-1) { po duplo, pp; 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)) { se (mn<0 || OrderMagicNumber()==mn) { po=MarketInfo(OrderSymbol(), MODE_POINT); se (OrderType()==OP_BUY) { se (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) { pp=MarketInfo(OrderSymbol(), MODE_BID); if (pp-OrderOpenPrice()>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1); } } } se (OrderType()==OP_SELL) { se (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) { pp=MarketInfo(OrderSymbol(), MODE_ASK); se (OrderOpenPrice()-pp>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1); } } } } } } } } //+----------------------------------------------------------------------------+
Primeiro, você mesmo tentou exibi-los na tela para verificar, o que levou a erros, e segundo, a normalização é desejável e o preço de ajuste do pedido e TP, SL. Se o preço não for normalizado, isso pode levar a erros. Esta é a regra e não devemos quebrá-la. Veja exemplos e analise porque este é o caso e não o contrário, por exemplo https://book.mql4.com/ru/samples/shared
Eu não o escrevi para censurar, apenas para deixar os outros verem. Obrigado por seu tempo.
Preciso de ajuda para encontrar o valor máximo do indicador N para o dia anterior; recebo dados através do iCustom, mas é um impasse. Acho que isso é feito através do ArrayMaximum, mas como encontrar o valor
Não consigo descobrir como encaixar o iCustom ali, mas não consigo pensar em nenhuma outra opção.
1. Encontre o número da barra no início do dia anterior, encontre o número da barra no final para.
2. Eu faria loop de um número para o outro e calcularia o máximo.
Você pode, naturalmente, usar o ArrayMaximum, mas após o primeiro passo.
Desculpe pela inundação, vou perguntar novamente.
Você pode sugerir um indicador de interesse aberto gratuito? Obrigado de antemão!
Você não pode escrever códigos que de forma desatenta :)
Ir para Comentário("USDCADAsk = ",USDCADAsk); seguido por USDCADAsk = DoubleToString(MarketInfo("USDCAD",MODE_ASK),usdcaddigits); USDCADAsk é declarado como duplo e você coloca uma string nele,
e depois Digits.... novamente ^) e Ponto
Você mesmo tem que procurar por tais erros, ninguém os consertará, assim como o comércio! O compilador gera 28 erros e você coloca a demonstração no comércio. Você pode desejar estar usando dinheiro real, mas o mercado teria corrigido você!
De quem é o Bid Ask ?
Correção
Acontece que você não precisava usar variáveis adicionais e depois não precisa de normalização, deveria ser assim.
Acontece que você não precisava usar variáveis adicionais e depois não precisa de normalização, deveria ser assim.
Primeiro, você mesmo tentou exibi-los na tela para verificar, o que levou a erros, e segundo, a normalização é desejável e o preço de ajuste do pedido e TP, SL. Se o preço não for normalizado, isso pode causar erros. Esta é a regra e não devemos quebrá-la. Veja exemplos e analise porque este é o caso e não o contrário, por exemplo https://book.mql4.com/ru/samples/shared
Olá! Se você não se importa de me dizer como adicionar 23% ao OrderOpenPrice? Se você sabe que o OrderOpenPrice já é de 77%. Estou dividindo por 77, multiplicando por 23 e recebo 7 pontos em vez de 31. Aqui está uma linha de código if (MarketInfo-OrderOpenPrice()>OrderOpenPrice()/50*Percent*Point). Esta é uma transferência para o Breakeven, mas não em pontos, mas em pontos percentuais. Agradecemos antecipadamente!
Comprei cem mil euros a 50 rublos, depois acrescentei 23% ao preço de compra.
Para o seu caso, você precisa estabelecer o código na íntegra. Embora, se você quiser apenas levar a 100%, divida por 0,77.
Obrigado por sua resposta. Aqui está todo o código
//+----------------------------------------------------------------------------+
//| e-MovingInWL2.mq4 |
//| |
//| Kim Igor V. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 27.10.2008 O assessor se move para o breakeven. |
//+----------------------------------------------------------------------------+
#direitos de propriedade intelectual "Kim Igor V. aka KimIV"
#link da propriedade "http://www.kimiv.ru"
//------- Parâmetros externos do consultor especializado -----------------------------------------+
string externa _P_Expert = "---------- Parâmetros EA";
bool externo AllSymbols = Verdadeiro; // Posições de observação de todos os símbolos
magia int externa = -1; // Identificador de posição
nível de lucro interno externo = 25; // nível de lucro em pontos
nível interno externoWLoss = 1; // Nível de equilíbrio em pontos
comentário externo ShowComment = True; // Comentário do show
//------- Parâmetros de execução das ordens de negociação ------------------------------+
string externa _P_Performance = "---------- Parâmetros de execução";
Use o sinal sonoro.
External string SoundSuccess = "expert.wav"; // Som de sucesso
cordão externo SoundError = "timeout.wav"; // Som de erro.
Número externo internoOfTry = 2; // Número de tentativas
//------- Variáveis globais do Expert Advisor -------------------------------------+
bool gbDisabled = False; // Bandeira de EA trancada
bool gbNoInit = Falso; // Bandeira de inicialização falhada
color clModifyBuy = Aqua; // ícone colorido clModifyBuy
color clModifySell = Tomate; // Cor do ícone de modificação de venda
//------- Conexão de módulos externos -----------------------------------------+
#incluir <stdlib.mqh>
//+----------------------------------------------------------------------------+
//| |
//| FUNÇÕES PRÉ-DEFINIDAS |
//| |
//+----------------------------------------------------------------------------+
//| função de inicialização especializada |
//+----------------------------------------------------------------------------+
init() {
gbNoInit=Falso;
se (!IsTradeAllowed()) {
Mensagem ("Para que a EA funcione corretamente, é necessário que o "+
"Permitir que a EA negocie");
gbNoInit=Verdadeiro; retornar;
}
se (!IsLibrariesAllowed()) {
Mensagem ("Para que a EA funcione corretamente, você deve
"Permitir a importação de EAs externos");
gbNoInit=Verdadeiro; retornar;
}
se (!IsTesting()) {
se (IsExpertEnabled()) Mensagem("O Expert Advisor será iniciado com o próximo tick");
outra mensagem ("O botão "Allow EAs to start") é liberado;
}
início();
}
//+----------------------------------------------------------------------------+
//| função de desinicialização especializada |
//+----------------------------------------------------------------------------+
void deinit() {
se (!IsTesting()) Comentário(");
}
//+----------------------------------------------------------------------------+
//| função de início especializado |
//+----------------------------------------------------------------------------+
início nulo() {
se (gbDisabled) {
Mensagem("Erro crítico! EA STOPPED!"); retornar;
}
se (gbNoInit) {
Mensagem("inicialização da EA falhou!"); retornar;
}
se (ShowComment) {
Comentário(IIFs(AllSymbols, "AllSymbols", ", ")
"Magic="+IIFs(Magic<0, "Any", DoubleToStr(Magic, 0))+" "
LevelProfit="+DoubleToStr(LevelProfit, 0)+"n "
LevelWLoss="+DoubleToStr(LevelWLoss, 0)+"n".
);
} else Comment(");
string sy=IIFs(AllSymbols, "", NULL);
MovingInWL(sy, -1, Magic);
}
//+----------------------------------------------------------------------------+
//| |
//| FUNÇÕES DO USUÁRIO |
//| |
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 01.09.2005 |
//| Descrição : Retorna o nome da operação comercial |
//+----------------------------------------------------------------------------+
//| Parâmetros: |||
//| op - identificador da operação comercial |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
interruptor (op) {
caso OP_BUY : retornar("Comprar");
caso OP_SELL : devolução("Vender");
caso OP_BUYLIMIT : devolução("BuyLimit");
caso OP_SELLLIMIT : devolução("SellLimit");
caso OP_BUYSTOP : devolução("BuyStop");
caso OP_SELLSTOP : devolução("SellStop");
default : devolução ("Operação Desconhecida");
}
}
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 18.07.2008 |
//| Descrição : Retorna um de dois valores, dependendo da condição. |
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
se (condição) retornar(ifTrue); caso contrário, retornar(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 01.02.2008 |
//| Descrição : Retorna um de dois valores, dependendo da condição. |
//+----------------------------------------------------------------------------+
IIFs de corda(bool condition, string ifTrue, string ifFalse) {
se (condição) retornar(ifTrue); caso contrário, retornar(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 01.09.2005 |
//| Descrição : Exibindo uma mensagem no comentário e no log |
//+----------------------------------------------------------------------------+
//| Parâmetros: |
//| m - texto da mensagem |
//+----------------------------------------------------------------------------+
Mensagem nula(string m) {
Comentário(m);
se (StringLen(m)>0) Imprimir(m);
}
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 28.11.2006 |
//| Descrição : Modificação de um pedido pré-selecionado |.
//+----------------------------------------------------------------------------+
//| Parâmetros : |
//| pp - nível de preço do pedido |
//| sl - nível de preço da parada |
//| tp - nível de preço do take out |
//| ex - data de expiração |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
se (sl<0 ) sl=OrderStopLoss();
se (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice(), dg);
os=NormalizeDouble(OrderStopLoss(), dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
se (pp!=op || sl!=os ||| tp!=ot) {
para (it=1; it<=NumberOfTry; it++) {
se (!IsTesting() && (!IsExpertEnabled() ||| IsStopped())) quebrar;
enquanto (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
se (fm) {
se (UseSound) PlaySound(SoundSuccess); break;
{} else {
er=GetLastError();
se (UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Imprimir("Erro(",er,") modificando a ordem:",ErrorDescription(er),", tentar ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
"op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Dormir(1000*10);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 23.04.2009 |
//| Descrição : Move stop level to lossless |
//+----------------------------------------------------------------------------+
//| 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) |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
po duplo, pp;
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)) {
se (mn<0 || OrderMagicNumber()==mn) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
se (OrderType()==OP_BUY) {
se (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
se (OrderType()==OP_SELL) {
se (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
se (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
Primeiro, você mesmo tentou exibi-los na tela para verificar, o que levou a erros, e segundo, a normalização é desejável e o preço de ajuste do pedido e TP, SL. Se o preço não for normalizado, isso pode levar a erros. Esta é a regra e não devemos quebrá-la. Veja exemplos e analise porque este é o caso e não o contrário, por exemplo https://book.mql4.com/ru/samples/shared
Eu não o escrevi para censurar, apenas para deixar os outros verem. Obrigado por seu tempo.