[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 394

 

Tudo bem!!!! Se não houver ordens desejadas, X permanece igual a zero com o número mágico desejado e as ordens serão abertas. Se houver alguma, X é igual a 2 e não serão abertas mais ordens.

Então, qual é o problema mais?

- Logo no primeiro momento, você seleciona uma ordem que não existe usando a função OrderSelect.

no primeiro loop for(int Uy=OrdersTotal();Uy<=-1;Uy--) Então o que, bem o ciclo corre mais por esperança, então eu o mudei para 0, não há mudança no trabalho, estes não são erros, não mudam, peço desculpas.

 
Inseriu um alerta para acompanhar o trabalho do ciclo. Eu não entendo nada. A variável, que está no loop, apenas uma vez, no início, com valor 0, e depois vender stop 0 e comprar stop 130, o que também é surpreendente, elas são simétricas!!!! E depois de 2,5 m da inscrição já diz erro 148 (o corretor proíbe muitos pedidos)
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Que bobagem. E a princípio, sempre que a data não está correta, cerca de 49 vezes. Sim!!!! X permanece sempre 0 e escreve bem. Em 2 ordens.

 
PRICE_OPEN !!!! - você não pode usar este preço! Funciona apenas para indicadores. Use o Bid or Ask.
 
Dimka-novitsek:

Tudo bem!!!! Se não houver ordens desejadas, X permanece igual a zero com o número mágico desejado e as ordens serão abertas. Se houver alguma, X é igual a 2 e não serão abertas mais ordens.

Então, qual é o problema mais?

- Logo no primeiro momento, você seleciona uma ordem que não existe usando a função OrderSelect.

no primeiro loop for(int Uy=OrdersTotal();Uy<=-1;Uy--) Então, o loop corre mais por esperança, então eu o mudei para 0, não há mudança no trabalho, estes não são erros, não mudam, peço desculpas.

Como pode funcionar por mais tempo do que ?

Não importa quantas ordens estejam abertas, a condição Uy<=-1 não é cumprida imediatamente porque o número de ordens é maior ou igual a zero imediatamente

 

Ajude-me a encontrar o erro,

Obrigado

void TrailPositions()
{
//-----
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


Se os carrapatos estão funcionando, o ícone da EA está "sorrindo", a EA deve fazer acordos (ou seja, condições para que ele apareça), mas ele não os faz, então é necessário depurar.

Organize o comando preço() no código da EA, especialmente nos lugares onde ele é comparado e veja o que está sendo comparado exatamente. Talvez você tenha uma comparação sobre a igualdade das variáveis com tipo duplo e o resultado da comparação é sempre falso, enquanto você assume que as variáveis são iguais.

Muito obrigado pelas dicas!!! Já resolvi meu problema. Descobri que o corretor que eu precisava ao colocar uma ordem de mercado, ou seja, de acordo com as condições, não tem a capacidade de colocar níveis de parada ao mesmo tempo. Agora os pedidos são feitos sem nenhum nível de parada e eu estabeleço níveis de parada imediatamente após cada pedido. Tenho um problema com isso: apenas uma pequena parte dos pedidos é modificada, enquanto a maioria dos pedidos mostra os seguintes resultados na seção "Consultores Especialistas":

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: aberto #30906670 venda 0.01 CLM1 a 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: bilhete inválido para a função OrderModify
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: abrir #30906787 comprar 0.01 ESM1 a 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: bilhete inválido para a função OrderModify

Aqui está o texto do código:

{
res=OrderSend(Symbol(),OP_SELLL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
retorno(0);

}

E é a primeira ordem que é modificada após o início do Expert Advisor!

Naturalmente, eu me enganei na modificação da ordem no código. Por favor, avise!

 
Assim, qualquer pessoa pode ajudar com uma função que mostra os dois últimos extremos em ZZ ???
 
Caros programadores, estou pedindo uma sugestão sobre como melhorar o Expert Advisor: Há uma posição aberta e depois de algum tempo há um sinal de reabertura na mesma direção. Quero preencher o segundo sinal somente se a primeira encomenda já estiver em lucro. Eu implementei isto comparando o tamanho do saldo e o patrimônio líquido (se o patrimônio líquido for maior que o saldo, a ordem aberta está no positivo).
Você pode sugerir um código para determinar o lucro/perda na última ordem em aberto que tiver?
 
Medida em pips, a mais confiável.
 
Roger:
Medida em pips, a mais confiável.
Você pode me dar um código?