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 78

 
Favor responder em ordem de prioridade. Eu tenho um indicador exibido por um gráfico de barras. Ao unir ou após reconectar, mostra um valor op-penny. Estabeleci a condição na primeira partida para reiniciar a 0ª célula da matriz. E eu a coloquei inite - isso não ajudou. Eu o reinicializo no início - ok. (Coloco condição no início: if(GetLastError()==6)zas[0]=0.0; - não ajuda.
 
dikson1976-1:
Favor responder em ordem de prioridade. Eu tenho um indicador exibido por um gráfico de barras. Ao unir ou após reconectar, mostra um valor op-penny. Estabeleci a condição na primeira partida para reiniciar a 0ª célula da matriz. E eu a coloquei inite - isso não ajudou. Eu o reinicializo no início - ok. (Coloco condição no início: if(GetLastError()==6)zas[0]=0.0; - não ajuda.

Não posso passar sem código.
 

Dozol:



Tente passar as ordens em ordem inversa.

 for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
Eu mesmo o manuseieiei. Vá com calma. Obrigado a todos vocês.
 
Dozol:

Amigos, ajudem-me. Preciso fechar todos os pedidos em um par de moedas selecionado. Aqui está o que escrevi (parte do código EA):

int Zakrit_vse() ...

Use SRC para colar código no fórum

Vou colá-lo aqui, talvez vocês encontrem algo interessante para vocês mesmos:

int Zakrit_vse()
{  
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(),CLR_NONE)
            Prov_oshibok();
            return(0);
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
}  }  }
}
 
Dozol:

Amigos, ajudem-me. Preciso fechar todos os pedidos em um par de moedas selecionado. Aqui está o que escrevi (parte do código EA):


Por que reinventar a roda quando tudo já foi inventado antes de você. Por exemplo. Não se esqueça disto.
 

Socorro! Tenho código para um indicador de canal externo (quando o limite superior do canal é atingido, o comércio se abre para vender - fecha quando o limite inferior é atingido, para comprar em ordem inversa). Por razões desconhecidas, não abre negócios, não consigo encontrar o erro. Funciona perfeitamente com outro indicador de canal. Gostaria de especificar imediatamente que todos os amortecedores estão prontos.

O código está anexado.

Lotes duplos externos = 0,1;
Comentário de cadeia externa = "TMA Canal2";
Exterior int TakeProfit = 20;
StopLoss int externo = 20;
escorregamento interno externo = 2; // escorregamento
magia int externa = 124;

cadeia externa Indi = "Dados indicadores";
String externo TimeFrame = " período detempo atual;
período TMAP externo int = 56;
preço interno externo = PREÇO_CLOSE;
duplo ATRMultiplicador externo = 2,0;
período intTRP externo = 100;
duplo TrendThreshold externo = 0,5;
bool externo ShowCenterLine = falso;

duplo PriceHigh, PriceLow, SL, TP;
int ticket;

//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
se (Dígitos ==3 || Dígitos ==3) // para um corretor de cinco dígitos
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
retorno(0);
}

//+------------------------------------------------------------------+
//| Calcular posições abertas |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(símbolo de corda)
{
int compra=0,vende=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
if(OrderType()==OP_BUY) compra++;
if(OrderType()==OP_SELL) vende++;
}
}
//---- volume de pedidos de devolução
if(compra>0) return(compra);
senão devolve(-sells);
}

//+------------------------------------------------------------------+
//| Verifique as condições de pedidos em aberto |
//+------------------------------------------------------------------+
CheckForOpen()
{
preço duplo alto, preço baixo;
int ticket;
//---- go trading only for first tics of new bar
if(Volume[0]>1) voltar;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);


if(Open[1]>PriceHigh ||| Close[1]>PriceHigh ||| High[1]>PriceHigh && Ask<==PriceHigh)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,0, "TMA Canal2",124,0,Red);
retornar;
}
//---- condições de compra
if(Open[1]<PriceLow ||| Close[1]<PriceLow ||| Low[1]<PriceLow && Bid>=PriceLow)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,0, "TMA Canal2",124,0,Blue);
retornar;
}
//----
}
//+------------------------------------------------------------------+
//| Verifique as condições de fechamento do pedido |
//+------------------------------------------------------------------+
verificação nula CheckForClose()
{
preço duplo alto, preço baixo;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) voltar;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continua;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Open[1]>PriceHigh ||| Fechar[1]>PriceHigh |||Alto[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
pausa;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<PriceLow ||| Close[1]<PriceLow ||| Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}

//+------------------------------------------------------------------+
//| Função Start |
//+------------------------------------------------------------------+
início nulo()
{
//---- verificação de histórico e comércio
if(Bars<100 || IsTradeAllowed()==falso) retorna;
//---- calcular pedidos em aberto pelo símbolo atual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
senão CheckForClose();
//----
}
//+------------------------------------------------------------------+

 
ZahvatkiN:

Sou novo no mql4, sou bom em trabalhar com SL e TP, mas tenho um problema quando preciso fechar pedidos por um sinal cruzado de um indicador. Não entendo realmente como funciona a função OrderSelect(). Sei que para buscar uma ordem usamos um loop, mas no processo de negociação, a ordem acaba de ser aberta e imediatamente fechada, já que as condições para abrir uma compra coincidem com as condições para fechar uma venda e como explicar que isto não deve ser entendido, por favor explique.

O botão SRC é usado para colar o código!

Como você o escreveu, faça também adições usando a Documentação!

Se você copiou, favor entrar em contato com o autor para revisões ou para trabalhar!

 


Vou acrescentar mais uma vez. Quantas vezes eu já lhe disse, use o botão na linha superior para inserir o código

E é desejável ater-se aos estilos de escrita de código.... Desejável, mas não essencial. Mas é mais provável que a maioria das pessoas responda com códigos fáceis de entender.

 

Sou novo no mql4, sou bom em trabalhar com SL e TP, mas tenho um problema quando preciso fechar pedidos por um sinal cruzado de um indicador. Não entendo realmente como funciona a função OrderSelect(). Sei que o laço é usado para procurar ordens, está no código, mas no processo de negociação acontece que a ordem acaba de ser aberta e imediatamente fechada, porque as condições para abrir uma compra coincidem com as condições para fechar a venda e como explicar que isto não deve fazer eu não entendo, por favor explique.

borilunad agradece pela dica, retoca-a, depois você também pode apagar essa mensagem com a citação para não desarrumá-la.

if(buy1sOpen())
         {
         OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "", magic, 0, Blue);
         }
      if(sell1sOpen()) 
         {
         OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "", magic, 0, Red);
         }
         
      for(int i=0; i<OrdersTotal(); i++)
         {
         OrderSelect(i,SELECT_BY_POS);
         if(buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if(sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
bool sell1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool buy1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool sell1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
Razão: