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 672

 
TarasBY:

Eu não trabalhei com esta função. A suposição é que se o terminal selecionar um caractere uma vez, a próxima tentativa de selecionar o mesmo caractere pode retornar falso. Tente ignorar o cheque de retorno por esta função.

Acontece que SymbolSelect("AUDUSD", verdadeiro) retorna verdadeiro somente se AUDUSD não estiver na MarketWatch - ou seja, quando o par é adicionado à MarketWatch. Uma vez que o par está no MarketWatch, as chamadas subseqüentes retornam falsas.

Este comportamento não corresponde em nada ao manual desta função.

Eu tive que usar uma função autoescrita que varre todos osSymbolName(i, true) para i=0...SymbolsTotal(true).

 
Mr.Profit:

Acontece que SymbolSelect("AUDUSD", verdadeiro) retorna verdadeiro somente se AUDUSD não estiver na MarketWatch - ou seja, quando o par é adicionado à MarketWatch. Uma vez que o par está no MarketWatch, as chamadas subseqüentes retornam falsas.

Este comportamento não corresponde em nada ao manual desta função.

Alguma coisa me faz pensar que podemos fazer sem a SymbolSelect().
 
TarasBY:
Algo me diz que você pode fazer sem a SymbolSelect().

Sim, acabei de atualizar meu post acima
 
borilunad:

O que é o outro, ou já deveríamos estar fazendo uma perna neste aqui?!


Mestre Forex

 
laveosa:
demorei 4 meses para fazer uma coruja em alpari..... nano quanto ao código consome muito tempo e não é pequena..... e agora tudo é !!!!! é uma vergonha .... Não tenho certeza do que fazer com ele.

Terceira coruja e ainda o mesmo erro, feliz por o problema não ser com o código :)
 
É o seguinte, eu coloquei um novo "Não" (é um cabo de fibra de vidro de alta velocidade com uma velocidade de download de 7mb por segundo.) e depois disso consegui o mesmo com Alpari, mas com Master Forex tudo está bem e Admeral também ......... aqui está outra nuance, o corretor é instalado no drive D:) ao reinstalar o sistema operacional eu não instalei um novo e usei o antigo .... talvez eu devesse instalá-lo?
 
laveosa:


Mestre Forex


Obrigado, eu vou dar uma olhada!
 
borilunad:

Obrigado, eu vou dar uma olhada!

Não é fazer campanha, apenas responder a uma pergunta :)
 

Olá a todos. Comecei a escrever EAs não faz muito tempo. Eu tenho enfrentado um problema aparentemente elementar, que não posso resolver. Por favor, ajude-me.

O problema. Em um novo tick eu perco o valor de uma variável.

Breve descrição. Atribuir a alguma variável o valor de retorno da função OrderSend() e sair usando o comando de retorno. No próximo tick o valor da variável torna-se igual a zero.

O elemento chave do código fonte. O código fonte completo abaixo.

se (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alerta ("Valor atribuído à variável ticket_sell", ticket_sell);
retornar;
}
}

Alerta ("Posição existente = ", posição_existe, "Pedido de compra", compra_singresso, "Pedido de venda", venda_singresso);

Resultado.

A captura de tela mostra que a posição foi aberta com sucesso e o ticket de pedido foi memorizado na variável ticket_sell. Entretanto, a variável ticket_sell torna-se zero no próximo tick. E eu não posso modificar/apagar o pedido no bilhete.

// Простой параболик. Переворотная стратегия.
// В условиях, когда в терминале уже есть открытые позиции по другим инструментам.

input double TakeProfit    =2500;
input double StopLoss      =400;
input double Lots          =1;
input double TrailingStop  =100;

input double Parameter1    =0.02; // Параметры индикатора PSAR
input double Parameter2    =0.2;
   
void OnTick()
{
int position_exists; // Переменная, принимающая значения 0 или 1. Указывает, открыта ли позиция по интструменту EURUSD

// Занесение в переменные значений индикатора на последнем и предпоследнем закрывшихся барах  
double SAR_Prev=iSAR(NULL,0,Parameter1,Parameter2,1);
double SAR_Prev2=iSAR(NULL,0,Parameter1,Parameter2,2);
// Занесение в переменные цен закрытия на последнем и предпоследнем барах
double LastClose=iClose(NULL,0,1);
double LastClose2=iClose(NULL,0,2);

  
//---------------------------------------------------------------------     
// Блок, который определяет, открыта ли позиция по инструменту EURUSD
// путём перебора всех открытых ордеров терминала в цикле. 
// Если позиция открыта, то переменной position_exists будет присвоено значение 1
int cnt;
string sym;
int type;

int total=OrdersTotal();
position_exists=0;
for (cnt=0; cnt<=total-1; cnt++)
   {
    bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    sym=OrderSymbol();
    type=OrderType();
    if (sym=="EURUSD" && (type==1 || type==0)) 
      {
       position_exists=1;
       break;
      }
   }     
//--------------------------------------------------------------------- 
// Если позиция по EURUSD не существует, то проверяем условия открытия сделки  
   if(position_exists==0)
      {
       if (SAR_Prev<LastClose && SAR_Prev2>LastClose2)
         {
          int ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point," ",111,0,Blue);
          Alert ("Присвоили значение пременной ticket_buy ", ticket_buy);
          return;
         }
         
       if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
         {
          int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point," ",111,0,Red);
          Alert ("Присвоили значение пременной ticket_sell ", ticket_sell);
          return;
         }
      }
      
   Alert ("Существование позиции = ", position_exists, " Ордер на покупку ", ticket_buy, " Ордер на продажу ", ticket_sell);
//--------------------------------------------------------------------- 
// Если позиция по EURUSD существует, то проверяем условия закрытия позиции  
   if (position_exists==1)
      {
       if (ticket_sell==0) // Если открытой позиции на продажу нет, то выбираем открытый ордер на покупку по тикету
         {bool select_buy=OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES);}
         
       if (ticket_buy==0) // Если открытой позиции на покупку нет, то выбираем открытый ордер на продажу по тикету
         {bool select_sell=OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES);}
         
       
       if(OrderType()==OP_BUY) 
         {
          if(SAR_Prev>LastClose && SAR_Prev2<LastClose2) // Проверяем уловия для закрытия длинной позиции
              {
               bool close_buy=OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
               return;
              }
         }
        
        
        if(OrderType()==OP_SELL)
         {
          if(SAR_Prev<LastClose && SAR_Prev2>LastClose2) // Проверяем уловия для закрытия короткой позиции
              {
               bool close_sell=OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);
               return;
              }
          } 
       }
} 

 
Sergey71:

Olá a todos. Comecei a escrever EAs não faz muito tempo. Eu tenho enfrentado um problema aparentemente elementar, que não posso resolver. Por favor, ajude-me.

O problema. Em um novo tick eu perco o valor de uma variável.

Breve descrição. Atribuir a alguma variável o valor de retorno da função OrderSend() e sair usando o comando de retorno. No próximo tick o valor da variável torna-se igual a zero.

O elemento chave do código fonte. O código fonte completo abaixo.

se (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alerta ("Valor atribuído à variável ticket_sell", ticket_sell);
retornar;
}
}

Alerta ("Posição existente = ", posição_existe, "Pedido de compra", compra_singresso, "Pedido de venda", venda_singresso);

Resultado.

A captura de tela mostra que a posição foi aberta com sucesso e o ticket de pedido foi memorizado na variável ticket_sell. Entretanto, a variável ticket_sell torna-se zero no próximo tick. E eu não posso modificar/apagar o pedido no bilhete.


Para evitar perder valor, precisamos de uma variável global, colocar sua declaração fora doOnTick() ou torná-la estática