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
Gumko:
Já está de pé há dois dias.
Olá a todos.
Modificação e problemas.
Função externa:
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- estrutura vinculativa e resultados comerciais
Pedido MqlTradeRequest;
Resultado MqlTradeResult;
//---- inicialização da estrutura de pesquisa de comércio MqlTradeRequest para modificação de posição
request.action = TRADE_ACTION_SLTP;
request.symbol = símbolo;
request.sl = StopLoss;
request.tp = Takeprofit;
palavra de corda = "";
StringConcatenate(palavra,
"<< ============ Modifyposition(): Modificar a posição",
símbolo," ============ >>>");
Imprimir(palavra);
//---- modificar posição e verificar os resultados da pesquisa de comércio
if(!OrderSend(request,result)||| result.deal==0)
{
Imprimir("Modificar erro =", GetLastError();
devolução(falso);
}
return(true);
}
Mas não funciona desta forma.
Como fazer?
Obrigado :)
Tente desta forma:
Tente desta forma:
Yedelkin,
Obrigado, não funcionou.
Verifiquei se contava correctamente para o início da chamada de função.
Aqui está como o fiz:
double Bid = NormalizeDouble(SímboloInfoDouble(Moeda,SYMBOL_BID),_Dígitos);
double Ask = NormalizeDouble(SímboloInfoDouble(Moeda,SYMBOL_ASK),_Dígitos);
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Dígitos);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Dígitos);
if(Abrir > 0){
start_buy = Perguntar - Abrir; Imprimir("start_buy=",start_buy);
start_sel = Aberto - Bid;Print("start_sel=",start_sel);
}
Surpresa no diário de bordo:
MR 0 Core 1 10:21:49 2012.10.01 10:12:42 negócio #2 vender 0,10 EURUSD a 1,28146 feito (com base no pedido #2)
GH 0 Core 1 10:21:49 2012.10.01 01 01 01:12:42 negócio realizado [#2 vender 0,10 EURUSD a 1,28146]
NI 0 Core 1 10:21:49 2012.10.01 01 01 01:12:42 encomenda executada venda 0,10 a 1,28146 [#2 venda 0,10 EURUSD a 1,28146 (0,00000)
OF 0 Core 1 10:21:49 2012.10.01 01 01 01:12:43 start_buy=0.000129999999999999635
DR 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_buy=0.0001099999999998325
EN 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=7.00000000000145e-005
Claro que estava a pensar apenas em sela, de onde vieram os números?
Penso ter escrito a função correctamente, tal como se mostra:
Modificação SL & TP
Ordem comercial para modificação dos níveis StopLoss e/ou TakeProfit. Requer 4 campos:
Então o que exactamente "falhou"?
Inserir o código correctamente (Ctrl+Alt+M):
Aqui a normalização tem de ser utilizada numa sequência diferente.
1. como os valores do tipo SymbolInfoDouble(Currency,SYMBOL_BID) vêm do servidor, já são considerados normalizados. E não há necessidade de os normalizar uma segunda vez. Isto é, podem simplesmente ser escritas:
2. mas após qualquer operação aritmética a normalização desaparece, por isso, se precisar de obter um número normalizado, deve escrevê-lo assim:
Ainda estou a pensar no resto.
DR 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=5.000000000010552e-005
PT 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=7.0000000145e-005
Naturalmente, apenas interessado na sel - de onde vieram tais números?
7.00000000000145e-005 é apenas uma das formas de registar um valor numérico real. Penso que é chamado "científico". Para mais pormenores, ver."MQL5 Reference Guide / Language Basics / Data Types / Real Types (double, float)".
Yedelkin,
Obrigado por abordar o problema.
Aqui está o código. As funções para abrir a posição foram escritas por Nikolay Kositsin.
Por exemplo, acrescentei MA à IFM e quero registar este MA no meu EA. Não sei onde e como o fazer.
Obrigado pela sua resposta)
1. Eu diria o seguinte: usar o código de outra pessoa com muito cuidado. Porque o código de outra pessoa significa também os erros de outra pessoa.
2. Aqui(https://www.mql5.com/ru/forum/6343/page64#comment_357008) sugeri que se tentasse zerar correctamente as variáveis antes de as utilizar. Mas o seu código ainda não implementou esta sugestão. Além disso, o seu código contém construções do seguinte tipo:
Como vê, nesta construção, as variáveis de pedido e resultado são zeradas não antes de serem utilizadas, mas depois de serem utilizadas. Além disso, quando estas variáveis locais são zeradas, a função deixa de funcionar, ou seja, essa zeragem em si não tem qualquer significado. Por outras palavras, uma tal construção é um bom exemplo de como as variáveis MqlTradeRequest e MqlTradeResult não devem ser zeradas. Portanto, se estiver ansioso, por favor, tente limpar correctamente as variáveis. Se algo correr mal, por favor, descreva em detalhes o que "não está a funcionar".
3. A Biblioteca Standard tem uma classe comercial"MQL5 Reference / Standard Library / Trade Classes / CTrade". Tente descobrir como aplicá-lo na prática. Na fase inicial de imersão na língua, esta classe pode ser bastante suficiente. Por exemplo, esta classe tem o seguinte método:"MQL5 Reference / Standard Library / Trade Classes / 2CTrade/ PositionModify". É implementado da seguinte forma:
A linha 'ClearStructures();' nela limpa a variável m_request antes de a utilizar.