[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 87

 
Mathemat:

Desculpe, mas está definitivamente nos Anais. A ignorância da língua inglesa não é desculpa.

Eu não sei qual é a propagação do EURUSD no micro, honestamente. Você provavelmente está proibido de participar deste fórum. Esses bastardos estão sempre pensando em algo para mantê-lo de fora.

Consegui entrar, obrigado.
 

Olá, por favor, ajude com um, creio elementar, ponto.

int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,0,0);
Alert(GetLastError());
return;
}

O roteiro abre uma ordem de mercado e tudo está bem. Mas se eu definir qualquer valor de SL ou TP, eu recebo um erro de "Parada Errada".

int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,Bid-50*Point,Bid+50*Point);
Alert(GetLastError());
return;
}

Este código não funciona mais. O que está errado? Eu não consigo entender...

int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,1.31845,1.40000);
Alert(GetLastError());
return;
}

E não funciona mesmo que eu insira valores numéricos de parada e lucro. A distância mínima entre o pedido e a ordem de parada está ok.

 

Prezados Profissionais! Eu tenho uma pergunta. eu tenho uma EA, ela opera por vários critérios, como fazê-la modificar ordens separadamente? por exemplo, eu abri duas ordens de COMPRA por sinais diferentes, um nível de breakeven é 90pp com incrementos de 40pp, outro é 50pp com incrementos de 50pp. eu não conseguiria fazer isso. Como já tentei, já vi quantos sinais tenho e não sei como utilizá-los. Muito obrigado de antemão!

 
azik1306:

Prezados Profissionais! Eu tenho uma pergunta. eu tenho uma EA, ela opera por vários critérios, como fazê-la modificar ordens separadamente? por exemplo, eu abri duas ordens de COMPRA por sinais diferentes, um nível de breakeven é 90pp com incrementos de 40pp, outro é 50pp com incrementos de 50pp. eu não conseguiria fazer isso. Como já tentei, já vi quantos sinais tenho e não sei como utilizá-los. já experimentei e não tenho idéia de como utilizá-lo.

-É possível abrir negócios através de diferentes sinais com diferentes números mágicos.

-É possível colocar "marcas" (por exemplo, o mesmo nível de arrasto) no campo de comentários ao abrir negócios e depois analisá-lo

sem ver o código em sua pergunta, eu não entendo exatamente o que você quer fazer separadamente

 

O código é aproximadamente o seguinte:

for( int c=1; c<=OrdensTotal(); c+++) // Loop de pedidos
{
OrderSelect(c-1,SELECT_BY_POS); // Se houver outro
// Análise de pedidos:
if(OrderMagicNumber()<1000)

if (R===1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Ponto) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R===2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R===1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
if (R===2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
retornar;
}
//--------------------------------------------------------------------

for(c=1; c<=OrdensTotal(); c++) // Loop de pedido
{
OrderSelect(c-1,SELECT_BY_POS); // Se houver outro
// Análise do pedido:
if (OrderMagicNumber()>1000)
if (Z===3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z===4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z===3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z===4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
return;
}

//

// Valores do pedido RefreshRates(); // Atualizar dados
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Min. lotes
Livre =AccountFreeMargin(); // Fundos livres
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valor de 1 lote
Passo =MarketInfo(Symb,MODE_LOTSTEP); // Passo alterar tamanho

if (Lotes > 0) // Se os lotes estiverem definidos, então
Lts =Lots; // trabalhar com eles
else // % free funds
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Para abrir

if(Lts < Min_Lot) Lts=Min_Lot; // Não menos que o mínimo
if(Lts*One_Lot > Free) // Muito mais caro que gratuito.
{
Alerta(" Não há dinheiro suficiente ", Lts," Muitos");
retorno; // Saída início()
}
// 8 --
// Abertura de pedidos

{
if (Total<2 && Opn_B===verdadeiro && B===falso)
{
// critério para abrir um pedido de compra. Comprar
RefreshRates(); // Atualizar dados
SL=Bid - New_Stop(StopLoss)*Point; // Cálculo de SL aberto.
TP=Bid + New_Stop(TakeProfit)*Point; // Cálculo de TP aberto.
Alerta("Tentativa de abertura de compra. À espera de resposta...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,y);//Open Buy
if (Ticket > 0) // Funcionou :)
{
Alerta ("Opened Buy order ",Ticket);
B=true;
S=false;
Y=OrderMagicNumber();
R=1;
return; // Exit start()
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continue; // Retry
// Sair do início()
}
if (Total<2 && Opn_S==verdadeiro && S==falso) // Ordens abertas. nenhum +
{
Sleep(10000); // aberto Critério de venda. Sell
RefreshRates(); // Atualizar dados
SL=Ask + New_Stop(StopLoss)*Point; // Cálculo de SL aberto.
TP=Ask - New_Stop(TakeProfit)*Point; // Cálculo de TP aberto.
Alerta("Tentativa de abrir Sell. Waiting for reply...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,y);//Open Sel
if (Ticket > 0) // Funcionou :)
{
Alerta ("Pedido de venda aberto ",Ticket);
S=verdadeiro;
B=falso;
Y=OrderMagicNumber();
R=2;
retorno; // Início de saída()
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // Retry
// Início de saída()
}

if (Total<2 && Opn_B1==verdadeiro && B1===falso)
{
RefreshRates(); // Atualizar dados
SL1=Bid - New_Stop1(StopLoss1)*Point; // Calcular SL aberto
TP1=Bid + New_Stop1(TakeProfit1)*Point; // Cálculo de TP aberto.
Alerta("Tentativa de abrir Compra. À espera de resposta...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL1,TP1,NULL,x);//Open Buy
if (Ticket > 0) // Funcionou :)
{
Alerta ("Opened Buy order ",Ticket);
B1=verdadeiro;
S1=falso;
X=OrderMagicNumber();
Z=3;
retorno; // Saída início()
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // Retry
// Sair do início()
}
if (Total<2 && Opn_S1==verdadeiro && S1==falso) // Ordens abertas. nenhum +
{
Sleep(10000); // aberto Critério de venda. Sell
RefreshRates(); // Atualizar dados
SL1=Ask + New_Stop1(StopLoss1)*Point; // Cálculo de SL aberto.
TP1=Ask - New_Stop1(TakeProfit1)*Point; // Cálculo de TP aberto.
Alerta("Tentativa de abrir Sell. Waiting for reply...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL1,TP1,NULL,x);//Open Sel
if (Ticket > 0) // Funcionou :)
{
Alerta ("Pedido de venda aberto", Ticket);
S1=verdadeiro;
B1=falso;
X=OrderMagicNumber();
Z=4;
retorno; // Saída início()
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // Tentativa
// Saída início()
}
pausa; // Saída enquanto
}

 
Tentei tanto pedidos seletos como majik, a EA confunde os pedidos
 
azik1306:

o código é algo parecido com isto:


Anexe códigos tão amplos com um arquivo, ou pelo menos com SRC (selecionável na barra de edição superior), porque é cansativo ler tais linhas.
 
azik1306:

o código é aproximadamente o seguinte:

for( int c=1; c<=OrdensTotal(); c++) // Laço de encomendas
{
OrderSelect(c-1,SELECT_BY_POS); // Se houver um próximo
// Análise de pedidos:
if(OrderMagicNumber()<1000)
if(R===1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue);
retornar;
}
if (R===2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue);
retornar;
}
if (R===1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue);
retornar;
}
if (R===2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue);
retornar;
}
retornar;
}
//--------------------------------------------------------------------
// Em princípio, você não precisa escrever mais nada: não será executado de qualquer forma

for(c=1; c<=OrdensTotal(); c++) // Laço de encomendas

{
OrderSelect(c-1,SELECT_BY_POS); // Se houver um próximo
// Análise de pedidos:
se (OrderMagicNumber()>1000)
if (Z===3 && Bid-OrderOpenPrice()>((NoLoss1)*Ponto) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
retornar;
}

if (Z===4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
retornar;
}
if (Z===3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
retornar;
}
if (Z===4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
retornar;
}
retornar ; // Mas "para estar no lado seguro", há também um "tiro de teste" ;)
}

........ Nada mais importa .......

//

//--------------------------------------------------------------------
// Valor do pedido

 
Obrigado, vou tentar agora.
 
Corrigido o código, mas a EA não quer se aproximar de cada pedido individualmente