[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 118
Eu escrevi código para abrir duas ordens pendentes (BuyStop e SellStop) nas condições a=true e b=true e após algum tempo a EA fecha ambas as ordens, até que um novo sinal apareça, mas às vezes a EA abre 2 ordens pendentes na mesma direção. Por que isso acontece e como evitar esse "bug"?
se (a=verdadeiro &&& b=verdadeiro) { int OrderCount = OrderTotal(); se (OrderCount>1) retornar(0); ticket1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, slippage, PriceOpen_Sell,0,0,Green); Sleep(1000);
para (int i=OrdensTotal()-1; i>=0; i--) { se (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) quebrar; se (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket()); se (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket()); se (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask, slippage); se (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage); }
retorno(0);
}
Você pode me dar uma dica?
Agradecemos antecipadamente
Eu ainda não vi o seu código, mas... para NÃO colocar dois ou mais pedidos em UM sinal, faça uma verificação ANTES de colocar um pedido: já existe um pedido colocado neste sinal? Se não - colocar para cima, se houver - fumaça.
Olá, você poderia me dizer porque no novo build 451 no MetaEditor quando você compila, o segundo arquivo ex 4 não aparece na pasta de especialistas ao lado do arquivo mq 4
Aqui você pode ver claramente que o preço TP e SL estão abaixo e acima do Ask e Bid respectivamente, ou seja, tudo está correto. Mas por alguma razão recebo um erro de modificação porque a parada está errada. Como assim?
Aqui você pode ver claramente que o preço TP e SL estão abaixo e acima do Ask e Bid respectivamente, ou seja, tudo está correto. Mas por alguma razão recebo um erro de modificação porque a parada está errada. Como assim?
Você lê ao menos o que está sendo repreendido?
ERR_INVALID_FUNCTION_PARAMVALUE
4051
Valor do parâmetro da função inválida
Se você não entender nada, nós resolvemos isso com o resto do mundo.
Quando você faz um pedido pendente, o cordel não deve ser muito relevante. Deve ser verificada a correspondência com a distância mínima permitida definida em MarketInfo(Symbol(), MODE_STOPLEVEL). A primeira coisa que me chamou imediatamente a atenção.
A segunda é imprimir o preço ao qual o pedido é feito. O Stop and Take não deve ser estabelecido em relação ao Ask and Bid, mas sim em relação ao preço de estabelecimento do pedido
Veja os parâmetros passados para a função a ser chamada. Quando nada estiver claro, nós resolvemos isso com o mundo...
ZS. Quando você coloca uma ordem pendente a linha
if (price < Bid)
Isto não é muito apropriado. Você deve verificar se a distância mínima permitida corresponde àquela especificada em MarketInfo(Symbol(), MODE_STOPLEVEL). A primeira coisa que me chamou logo a atenção.
Geralmente encontro tais verificações para modificação de pedidos, mas não para abertura. Já vi isso. Se eu fixar o preço pendente para bystop, será um erro. E se eu definir uma parada de 10 pips será certamente maior do que o valor StopLoss. Eu não negocio com carrapatos :)
Em segundo lugar, imprimir o preço ao qual o pedido é feito. O Stop and Take não deve ser colocado em relação ao Ask and Bid, mas em relação ao preço ao qual o pedido é feito
Presumo que isto seja para modificação? Afinal, é o Bid and Ask que é importante para nós quando abrimos o pedido. Eu arrumei tudo com o posto acima.
Quero fazer uma EA trabalhar em várias janelas ao mesmo tempo. Mas apenas um pedido pode ser aberto para cada instrumento. Portanto, agora existe uma condição:
int total = EncomendasTotal();
se (total<1) { análise e bloco de posição aberta} ou { análise e bloco de posição fechada }
Agora, se ela for aberta em dois símbolos ao mesmo tempo, a abertura em um deles será bloqueada no outro. É por isso que inventei algo semelhante:
Boa tarde.
Eu escrevi código para abrir duas ordens pendentes (BuyStop e SellStop) nas condições a=true e b=true e após algum tempo a EA fecha ambas as ordens, até que um novo sinal apareça, mas às vezes a EA abre 2 ordens pendentes na mesma direção. Por que isso acontece e como evitar esse "bug"?
se (a=verdadeiro &&& b=verdadeiro)
{
int OrderCount = OrderTotal();
se (OrderCount>1) retornar(0);
ticket1=OrderSend(Symbol(), OP_BUYSTOP, getLot(), PriceOpen_Buy, slippage, PriceOpen_Sell,0,0,Green);
Sleep(1000);
ticket2=OrderSend(Symbol(), OP_SELLSTOP, getLot(), PriceOpen_Sell, slippage, PriceOpen_Buy,0,0,Green);
Sleep(1000*59*TimeFrame);
para (int i=OrdensTotal()-1; i>=0; i--)
{
se (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) quebrar;
se (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
se (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
se (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask, slippage);
se (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage);
}
retorno(0);
}
Você pode me dar uma dica?
Agradecemos antecipadamente
Olá,
É possível inserir um horário com um peso fixo 1:1 nos ajustes?
Diga-me como fazer isso, se for possível.
Obrigado de antemão.
Esta biblioteca pode.
Seção "3.3 Função para definir as propriedades do gráfico" função ServiceSetScaleFix1To1().
A biblioteca funciona apenas com as localizações em russo e inglês. Pode funcionar no seu também.
Aqui está a função de abertura do pedido:
Aqui está a impressão dos parâmetros:
Aqui você pode ver claramente que o preço TP e SL estão abaixo e acima do Ask e Bid respectivamente, ou seja, tudo está correto. Mas por alguma razão recebo um erro de modificação porque a parada está errada. Como assim?
Aqui está a função de abertura do pedido:
Aqui está a impressão dos parâmetros:
Aqui você pode ver claramente que o preço TP e SL estão abaixo e acima do Ask e Bid respectivamente, ou seja, tudo está correto. Mas por alguma razão recebo um erro de modificação porque a parada está errada. Como assim?
Você lê ao menos o que está sendo repreendido?
Se você não entender nada, nós resolvemos isso com o resto do mundo.
ZZY. Quando você faz um pedido pendente, o fio
if (price < Bid)Quando você faz um pedido pendente, o cordel não deve ser muito relevante. Deve ser verificada a correspondência com a distância mínima permitida definida em MarketInfo(Symbol(), MODE_STOPLEVEL). A primeira coisa que me chamou imediatamente a atenção.
A segunda é imprimir o preço ao qual o pedido é feito. O Stop and Take não deve ser estabelecido em relação ao Ask and Bid, mas sim em relação ao preço de estabelecimento do pedido
Esta biblioteca pode.
Seção "3.3 Funções de ajuste de propriedade gráfica" função ServiceSetScaleFix1To1().
A biblioteca funciona apenas com localizações em russo e inglês. Pode funcionar no seu também.
Você lê ao menos o que está sendo repreendido?
Veja os parâmetros passados para a função chamada. Quando nada ficar claro, vamos resolver isso em paz...
Claro que estou lendo, é por isso que estou curioso. Eu desvinculei todos os parâmetros de entrada.
Isto é o que eu tenho:
bool OpenSell(double price) { int ticket = -1; double SL = OrderOpenPrice() + i_sl * pt; double TP = OrderOpenPrice() - i_tp * pt; if (price < Bid) ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0); if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true)) { if (i_sl > 0 && OrderStopLoss() == 0) { Print("ND(price) = ", DoubleToStr(ND(price),Digits)); Print("ND(SL) = ", DoubleToStr(ND(SL),Digits)); Print("ND(TP) = ", DoubleToStr(ND(TP),Digits)); Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits)); if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red)) { Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError()); Print("pt = ", pt); Print("Ask = ", Ask); Print("Bid = ", Bid); Print("SL_s = ", OrderOpenPrice() + i_sl * pt); Print("TP_s = ", OrderOpenPrice() - i_tp * pt); } } } return (true); }Aqui está o que está no diário de bordo:
Algumas das ordens são modificadas e outras não. Os valores de ND(TP), ND(SL) logo no início foram retornados ao acaso. Por quê?
A função de normalização, a propósito, é minha:
Você lê ao menos o que está sendo repreendido?
Veja os parâmetros passados para a função a ser chamada. Quando nada estiver claro, nós resolvemos isso com o mundo...
ZS. Quando você coloca uma ordem pendente a linha
if (price < Bid)Isto não é muito apropriado. Você deve verificar se a distância mínima permitida corresponde àquela especificada em MarketInfo(Symbol(), MODE_STOPLEVEL). A primeira coisa que me chamou logo a atenção.
Geralmente encontro tais verificações para modificação de pedidos, mas não para abertura. Já vi isso. Se eu fixar o preço pendente para bystop, será um erro. E se eu definir uma parada de 10 pips será certamente maior do que o valor StopLoss. Eu não negocio com carrapatos :)
Em segundo lugar, imprimir o preço ao qual o pedido é feito. O Stop and Take não deve ser colocado em relação ao Ask and Bid, mas em relação ao preço ao qual o pedido é feito
Presumo que isto seja para modificação? Afinal, é o Bid and Ask que é importante para nós quando abrimos o pedido. Eu arrumei tudo com o posto acima.
Boa tarde,
Quero fazer uma EA trabalhar em várias janelas ao mesmo tempo. Mas apenas um pedido pode ser aberto para cada instrumento. Portanto, agora existe uma condição:
int total = EncomendasTotal();
se (total<1) { análise e bloco de posição aberta} ou { análise e bloco de posição fechada }
Agora, se ela for aberta em dois símbolos ao mesmo tempo, a abertura em um deles será bloqueada no outro. É por isso que inventei algo semelhante:
int total = EncomendasTotal();
int cnt;
if(total>0)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
Símbolo_FLAG = verdadeiro;
}
}
}
if(total<1 || total>0 && Symbol_FLAG == falso) { análise e abertura ptposition block}
mas não funciona com o testador...
Talvez você possa me dizer, talvez eu esteja tramando algo irrealizável?