Bom dia,
Acredito que a sua normalização está incorreta. Abaixo um trecho de código que pode te ajudar a resolver esse problema.
int digits_adjust=1; if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; m_adjusted_point=m_symbol.Point()*digits_adjust;
Use a variável grifada e multiplica pelo seu TKP e STP.
Também seria legal você imprimir o valor que esta sendo enviado a fim de entender se o valor que esta passando como parâmetro em STP ou TKP esta correto. Mesmo com esse ajuste ocorre de colocarmos o stop muito próximo do valor de abertura e consequentemente se manda a ordem já toda preenchida dará erro de envio(ERR_TRADE_SEND_FAILED).
Quanto ao outro erro acredito que apenas colocando um if resolve.
if(!OrderSend(param1,param2)) { Print("Erro"); return; }
Essa critica se dá pois a função chamada é do tipo booleana.
Bom dia,
Acredito que a sua normalização está incorreta. Abaixo um trecho de código que pode te ajudar a resolver esse problema.
Use a variável grifada e multiplica pelo seu TKP e STP.
Também seria legal você imprimir o valor que esta sendo enviado a fim de entender se o valor que esta passando como parâmetro em STP ou TKP esta correto. Mesmo com esse ajuste ocorre de colocarmos o stop muito próximo do valor de abertura e consequentemente se manda a ordem já toda preenchida dará erro de envio(ERR_TRADE_SEND_FAILED).
Quanto ao outro erro acredito que apenas colocando um if resolve.
Essa critica se dá pois a função chamada é do tipo booleana.
Olá Jonathan, td. bem?
1- Vou tentar de novo, utilizando a condição indicada por você (
int digits_adjust=1;
if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; m_adjusted_point=m_symbol.Point()*digits_adjust;
embora esses parâmetros, também tenham dado o mesmo problema; porém vou mexer nos valores (aumentar a distância do preço) e ver o que posso extrair de fatos novos.
- Aproveitando a o oportunidade; fui informado "extra-forum" que deveria utilizar os parâmetros abaixo para melhor adequar o algoritmo a nossas corretoras brasileiras e a bolsa propriamente dita. O que segue:
/*
double PNT=_Point;
if(_Digits==3 || _Digits==5) PNT*=10.0;
//--- Ajusta point para a porra da BMF
if(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_CALC_MODE)==SYMBOL_CALC_MODE_EXCH_FUTURES)
{
if(SymbolInfoString(_Symbol,SYMBOL_CURRENCY_BASE)=="BRL" &&
(StringFind(m_symbol.Name(),"DOL",0)!=-1 || StringFind(m_symbol.Name(),"WDO",0)!=-1)) PNT=1.00;
}
*/
.....Você tem conhecimento sobre isso?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá, minhas felicitações aos membros deste forum.
Pessoal, estou com um problema que não encontrei solução de modo a atender minhas necessidades. Ou seja, recebo sempre a informação de erro 4756, e informando que o preço é inválido (sempre o SL).
- Utilizei várias configurações, mas sem sucesso, portanto segue abaixo uma parte do algoritmo para ver se alguém pode me ajudar.
1 - Conta na Corretora Modal e versão 5.00 Build 1745;
2 - Operações no Míni índice e Míni Dólar;
3 - Parametrização do Dígitos:
if(_Digits==5 || _Digits==3)
{
STP = STP*10;
TKP = TKP*10;
}
4 - Parâmetros da ordem "Buy":
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_DEAL;
mrequest.price = NormalizeDouble(latest_price.ask,_Digits);
mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits);
mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits);
mrequest.symbol = _Symbol;
mrequest.volume = Lot;
mrequest.magic = EA_Magic;
mrequest.type = ORDER_TYPE_BUY;
mrequest.type_filling = ORDER_FILLING_FOK;
mrequest.deviation=5;
//--- Enviar Pedido...
OrderSend(mrequest,mresult);
// Retorna o resultado com o código
if(mresult.retcode==10009 || mresult.retcode==10008)
{
Alert("A ordem de compra foi realizada com o Ticket#:",mresult.order,"!!");
}
else
{
Alert("Deu merda na solicitação do Pedido - ERRO! :",GetLastError());
ResetLastError();
return;
5 - Na verdade não sei se é apenas erro de parâmetro do ponto decimal, ou o tratamento se falta algum parâmetro para ajustar os preços;
6 - Gosto de algoritmos "limpos" sem qualquer discrepância" e na compilação aparece ainda a seguinte critica:
return value of 'OrderSend' should be checked my_first_ea2.mq5 na
Linha 219 referente: OrderSend(mrequest,mresult);
Ficaria imensamente agradecido a qualquer informação e ajuda na solução do erro acima informado.
Abs. a todos