Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 887
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
fazer início nulo() e não haverá erro
Obrigado! O erro desapareceu, mas a posição ainda não fecha.
Não há código suficiente para dizer exatamente qual é a razão
Extrato:
void CritCloseBuy()
{
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) ||| ((Yellow_0-Red_0)>(Yellow_1-Red_1)&& ((MB_0<MB_1)&&(MB_1>MB_2))))
while(true)
{
ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
if (ord_close = false)
{
Comentário(" BAYposition closing failed with error #",GetLastError()));//Mensagem do erro
pausa;
}
senão
{
Ord=0;
pausa;
}
}
Pode ser a razão para a abertura:
Critérios nulosOpen()
{
se (///condição de abertura///)
enquanto (true)
{
ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,NULL,10011,0,clrNONE); // pedido aberto BAY, MAGIC 10011
if(ticket<=0)
{
Comentário("Abertura da posição BAY-10011 falhou com erro #",GetLastError());
pausa;
}
mais
{
Comentário("BAY-10011 posição aberta com lote 0.1,preço", Ask);
Ord=(Ord+1);
pausa;
}
}
Extrato:
antes ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
seria bom selecionar a ordem usando a função OrderSelect(). Não vejo o propósito de tal laço em torno da função de fechamento.
antes ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
seria bom selecionar a ordem usando a função OrderSelect().
Eu tenho o único. Bem, na verdade foi assim no início. Comecei a procurar a causa usando o método de apalpação. Eu não entendo o sentido do laço.
Eu só faço batota por analogia: se eu abria com loop, então eu deveria fechar também...
Igor Kim tem nosso exemplo:
início vazio() {
ManagePositions();
}
//+
+ //| Fechar posições a preço de mercado|
//| Parâmetros:|
//| sym - nome do instrumento ("" - símbolo atual)|
//| op - operação(-1 - qualquer posição)|
//| mn - MagicNumber(-1 - qualquer magik) |
//+
+
void ClosePositions(string sym="", int op=-1, int mn=-1) { int i, k=OrdersTotal();
if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, closeCloseBuy);
}
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, closeCloseSell);
}
}
}
}
}
} }
Mas o compilador requer a verificação do valor de retorno do OrderClose
Igor Kim tem nosso exemplo:
Mas o compilador requer que o valor de retorno OrderClose seja verificado
Bem, faça-o como no exemplo - primeiro selecione e depois feche. Não importa se é a única ordem ou um milhão de ordens, pois cada ordem deve ser selecionada primeiro.
A verificação é muito simples se(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, closeCloseSell)) Imprimir("Erro de fechamento #", GetLastError());
Igor Kim tem o nosso como exemplo:
...
Mas o compilador requer que o valor de retorno OrderClose seja verificado
Faça o mesmo que no exemplo - selecione primeiro e depois feche. Não importa se há apenas um pedido ou um milhão de pedidos, cada um tem que ser selecionado primeiro.
A verificação é muito simples se(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, closeCloseSell)) Imprimir("Erro de fechamento #", GetLastError());
Eu fiz o seguinte: se (!OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red))
{
Comentário("O fechamento da posição BAY falhou com erro #",GetLastError()));
pausa;
}
senão
{
Ord=0;
pausa;
}
Continua exigindo "o valor de retorno deve ser verificado .
Fez com que fosse assim:
ord_close=OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if (ord_close = false)
{
Comentário ("BAY position closing failed with error #",GetLastError()); //Mensagem de erro
pausa;
}
mais
{
Ord=0;
pausa;
}
Silencioso. Mas em ambos os casos, não fecha a posição
ZS: Eu acho que há um erro na definição de condições próximas e abertas
O posto acima mostra um exemplo de uma condição próxima. O que poderia estar errado aí?
É silencioso. Mas em ambos os casos, não fecha a posição
ZS: Acho que há um erro na definição das condições de fechamento e abertura de posições
No posto acima, há um exemplo de uma condição próxima. O que poderia estar errado aí?
Bem, se silenciosamente, sem erros, não fecha, então a condição de fechamento não é correta. Precisamos repensar e reescrever esta mesma condição.
Os parênteses aqui estão, de alguma forma, mal arranjados:
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))
Que tal isso?
if (((Yellow_0-Red_0<Yellow_1-Red_1) && (MA_0<MA_1 && MA_1>MA_2)) || ((Yellow_0-Red_0>Yellow_1-Red_1) && (MB_0<MB_1 && MB_1>MB_2)))