Obrigado por compartilhar o especialista, estou tentando adicionar uma condição para fechar a posição quando o fechamento da barra passa a nuvem, esse é o código que adicionei, pode me ajudar, por favor, sou muito novo no mql5
Obrigado por compartilhar o especialista, estou tentando adicionar uma condição para fechar a posição quando o fechamento da barra passa a nuvem, esse é o código que adicionei, pode me ajudar, por favor, sou muito novo no mql5
Por favor, insira o código corretamente: PRIMEIRO, pressione o botão e, EM SEGUIDA, cole o código na janela pop-up.
Insira o código corretamente: PRIMEIRO, pressione o botão e, EM SEGUIDA, cole o código na janela pop-up.
Olá, novamente
Muito obrigado por responder e peço desculpas pela bagunça que fiz. Alterei um pouco o código da minha última postagem e ele ainda não fecha a posição, e eu defini stoploss = 0
double Kij2=iIchimokuGet(KIJUNSEN_LINE,3);
double SpanA2=iIchimokuGet(SENKOUSPANA_LINE,3);
double SpanB2=iIchimokuGet(SENKOUSPANB_LINE,3);
double Chinkou2=iIchimokuGet(CHIKOUSPAN_LINE,3);
//encerramento de ordens// m_trade.PositionClose(m_symbol.Name());//comprar pedidos// {// se (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY )// {// se(iClose(_Symbol,Period(),1) < SpanB)// {//m_trade.PositionClose(_Symbol);// }// } // }//SELL ORDERS// se(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)// {// se(iClose(_Symbol,Period(),1) > SpanB)// {// m_trade.PositionClose(_Symbol);//}// }// if(m_trade.ResultRetcode()==10008 || m_trade.ResultRetcode()==10009) /A solicitação foi concluída ou a ordem foi colocada// {// Print("Regras de saída: Uma ordem de fechamento foi colocada com sucesso com o Ticket#: ",m_trade.ResultOrder());// }//caso contrário// {// Imprimir("Regras de saída: A solicitação de ordem de fechamento não pôde ser concluída: ",GetLastError());// ResetLastError();//retorno;// }// }// }// }//--- verificar BUYif (iClose(_Symbol,PERIOD_D1,1) < iClose(_Symbol,PERIOD_D1,2) && iHigh(_Symbol,PERIOD_H4,2) - iLow(_Symbol,PERIOD_H4,2) > iHigh(_Symbol,PERIOD_H4,1)- iLow(_Symbol,PERIOD_H4,2) )
{
if (iOpen(m_symbol.Name(),Period(),0) > Kij && iOpen(m_symbol.Name(),Period(),0) > SpanA)
// se(Ten1<=Kij1 && Ten>Kij &&//&& m_symbol.Ask()>SpanA1 //&& m_symbol.Ask()>SpanB1 && // iOpen(m_symbol.Name(),Period(),1)<iClose(m_symbol.Name(),Period(),1)) //|| //(Chinkou1<=iClose(m_symbol.Name(),Period(),11) && Chinkou>iClose(m_symbol.Name(),Period(),10) && // m_symbol.Ask()>SpanA1 && m_symbol.Ask()>SpanB1 && // iOpen(m_symbol.Name(),Period(),1)<iClose(m_symbol.Name(),Period(),1))
{
double sl=(InpStopLoss==0)?0.0:m_symbol.Ask()-ExtStopLoss;
if(sl>=m_symbol.Bid()) // incidente: a posição ainda não está aberta e já deve estar fechada
{
PrevBars=0;
return;
}
double tp=(InpTakeProfit==0)?0.0:m_symbol.Ask()+ExtTakeProfit;
if(iClose(_Symbol,Period(),1) < SpanB)
{
if(m_position.Select(_Symbol)) //se a posição para esse símbolo já existir
{
if(m_position.PositionType()==POSITION_TYPE_BUY) m_trade.PositionClose(_Symbol); //e essa é uma posição de compra, então feche-a// se (m_Position.PositionType()==POSITION_TYPE_SELL) retornar;
}
}
OpenBuy(sl,tp);
}
}
//--- verificar SELLif (iClose(_Symbol,PERIOD_D1,1) > iClose(_Symbol,PERIOD_D1,2) && iHigh(_Symbol,PERIOD_D1,2) - iLow(_Symbol,PERIOD_H4,2) > iHigh(_Symbol,PERIOD_H4,1)- iLow(_Symbol,PERIOD_H4,2) )
{
if(iOpen(m_symbol.Name(),Period(),0) < Kij && iOpen(m_symbol.Name(),Period(),0) < SpanB)
// se(Ten1>Kij1 && Ten<Kij &&//&& m_symbol.Bid()<SpanA1 && m_symbol.Bid()<SpanB1 && // iOpen(m_symbol.Name(),Period(),1)>iClose(m_symbol.Name(),Period(),1)) //|| //(Chinkou1>=iOpen(m_symbol.Name(),Period(),11) && Chinkou<iOpen(m_symbol.Name(),Period(),10) && //m_symbol.Bid()<SpanA1 && m_symbol.Bid()<SpanB1 && //iOpen(m_symbol.Name(),Period(),1)>iClose(m_symbol.Name(),Period(),1)))
{
double sl=(InpStopLoss==0)?0.0:m_symbol.Bid()+ExtStopLoss;
if(sl<=m_symbol.Ask()) // incidente: a posição ainda não está aberta e já deve estar fechada
{
PrevBars=0;
return;
}
double tp=(InpTakeProfit==0)?0.0:m_symbol.Bid()-ExtTakeProfit;
if(iClose(_Symbol,Period(),1) > SpanB)
{
if(m_position.Select(_Symbol)) //se a posição para esse símbolo já existir
{
if(m_position.PositionType()==POSITION_TYPE_SELL) m_trade.PositionClose(_Symbol); //e essa é uma posição de compra, então feche-a// se (m_Position.PositionType()==POSITION_TYPE_SELL) retornar;
}
}
OpenSell(sl,tp);
}
}
// m_trade.PositionClose(_Symbol);
}
Ative a depuração de código e teste passo a passo.
Obrigado por sua resposta.
Fiz a depuração e descobri que o SL incorreto devido à alta propagação causou esse problema.
Obrigado por sua resposta.
Fiz a depuração e descobri que o SL incorreto devido à alta propagação causou esse problema.
O código dentro do Expert Advisor está correto - mas se, no momento da colocação, o preço fizer um movimento forte, a POSIÇÃO não será aberta.
O código dentro do Expert Advisor está correto, mas se, no momento da colocação, o preço fizer um movimento forte, a POSIÇÃO não será aberta.
Acho que essa seção deve ser modificada para o crypo:
Quando uso RISK para determinar o lote, vejo o erro getpointer e tenho de usar fix LOT:
***
Quando uso o RISK para determinar o lote, vejo o erro getpointer e tenho que usar o fix LOT:
Você vê seu erro - pense: qual valor de risco você está definindo?
Observação: se estiver usando instrumentos com um spread ENORME, é preciso definir um Stop Loss adequado.
Lembre-se sempre: há DOIS preços: Ask e Bid.
Você vê o seu erro - pense: que valor de risco você está estabelecendo?
Obrigado por sua resposta. Tudo está correto no expert. Os problemas se devem ao saldo insuficiente e aoSL incorreto devido ao spread enorme.
Defino 1% de risco para um saldo de US$ 500. Alavancagem definida como 100. Esses erros aparecem:
OpenBuy, ERRO: método CheckOpenLong
OpenSell, ERRO: método CheckOpenShort
isso significa que esse saldo não é suficiente para abrir uma posição com o tamanho mínimo de lote em BTC?
Isso é verdade?
Obrigado por sua resposta. Tudo está correto no expert. Os problemas se devem ao saldo insuficiente e ao SL incorreto devido ao spread do abraço.
Eu defini 1% de risco para um saldo de US$ 500. A alavancagem foi definida como 100. Esses erros aparecem:
OpenBuy, ERRO: método CheckOpenLong
OpenSell, ERRO: método CheckOpenShort
isso significa que esse saldo não é suficiente para abrir uma posição com o tamanho mínimo de lote em BTC?
Isso é verdade?
Você encontrou seu erro. Agora pense em como corrigir seu erro.
Olá, Vladimir
Obrigado por compartilhar o especialista, estou tentando adicionar uma condição para fechar a posição quando o fechamento da barra passa a nuvem, esse é o código que adicionei, pode me ajudar, por favor, sou muito novo no mql5
Olá, Vladimir
Obrigado por compartilhar o especialista, estou tentando adicionar uma condição para fechar a posição quando o fechamento da barra passa a nuvem, esse é o código que adicionei, pode me ajudar, por favor, sou muito novo no mql5
Por favor, insira o código corretamente: PRIMEIRO, pressione o botão
e, EM SEGUIDA, cole o código na janela pop-up.
Insira o código corretamente: PRIMEIRO, pressione o botão e, EM SEGUIDA, cole o código na janela pop-up.
Olá, novamente
Muito obrigado por responder e peço desculpas pela bagunça que fiz. Alterei um pouco o código da minha última postagem e ele ainda não fecha a posição, e eu defini stoploss = 0