[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 289

 

Bem, basicamente a estratégia em si é muito longa e complexa, e não adianta descrevê-la, é 1 ponto para criar um loop, ou seja, preciso encontrar algo em vez de total===1 que não abra uma posição que não corresponda ao pedido, ou seja, se fechar no st, então ......... abrir 1, se fechar em ......... тп abrir 2, a condição de falta de ordem no mercado, isso é tudo,

 
FoxUA:

Bem, basicamente a estratégia em si é muito longa e complexa, e não adianta descrevê-la, é 1 ponto para criar um loop, ou seja, preciso encontrar algo em vez de total===1 que não abra uma posição que não corresponda ao pedido, ou seja, se fechar no st, então ......... abrir 1, se fechar em ......... тп abrir 2, a condição de falta de ordem no mercado, isso é tudo,


Então você simplesmente não quer usar a função do Igor. Você precisa de uma função que devolva o tipo da última ordem fechada e por que ela foi fechada. Não devolverá o motivo da última ordem fechada de um determinado tipo. Vou tentar pensar em algo agora...

 
Figar0:


Então você simplesmente não se encaixa na função do Igor que você está usando. Você precisa de uma função que devolva o tipo da última ordem fechada e porque ela foi fechada (tap ou sl). Não devolverá o motivo da última ordem fechada de um determinado tipo. Vou tentar pensar em algo agora...


Se você tem algo semelhante a Klimovskoe que devolve um valor apenas para o último fechamento de pedido, eu ficaria muito grato a você
 

Tente tal função em conjunto com a função de Igor:

//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2011                                                     |
//|  Описание : Возвращает тип последней закрытой позиции                      |
//|  если Buy 1 , если Sell -1                                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    symbol - наименование инструмента                                       |
//|    magic - MagicNumber                                                     |
//+----------------------------------------------------------------------------+
int LastCloseDeal(string symbol, int magic) 
{
  int lastclosetime=-1;
  int lastcloseticket=-1;
  int lastdealtype=0;

  for (int i=0; i<OrdersHistoryTotal(); i++) 
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; 
    if (OrderSymbol()==symbol || OrderMagicNumber()==magic) 
    {
      if (lastclosetime<OrderCloseTime()) 
      {
        lastclosetime=OrderCloseTime();
        lastcloseticket=OrderTicket();
      }
    }
  }

  if (OrderSelect(lastcloseticket, SELECT_BY_TICKET, MODE_HISTORY)) 
  {
    if (OrderType()==OP_BUY) lastdealtype=1;
    if (OrderType()==OP_SELL) lastdealtype=-1;   
  }
  return(lastdealtype);
}
 

Seu pedaço de código deve então se parecer com isto

bool Buystop=isCloseLastPosByStop(NULL,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake(NULL,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop(NULL,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake(NULL,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if(total==1) 
 {

   if (LastCloseDeal(Symbol(), MagBuy)==1)

  {
      if(Buystop==True)    OpenPosition(NULL, OP_SELL, Lot,Bid+Sl3*Point, Bid-Tp3*Point,MagBuy);
      if(BuyTake==True)   OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy);      
   }

   if (LastCloseDeal(Symbol(), MagBuy)==-1)

   { 
      if(Sellstop==True)   OpenPosition(NULL, OP_BUY,  Lot, 0, Ask+Tp*Point,MagBuy);
      if(SellTake==True)    OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy); 
   }  

}

 
Figar0:

Seu pedaço de código deve então se parecer com isto


Obrigado. Vou tentar.
 
Para ser mais preciso: ao invés de enviar dados sobre o novo SL, a EA deve simplesmente armazená-los em variáveis (ou em outro lugar), e manter o trailing, trailing, e quando o preço atingir um determinado nível (preço), enviar um sinal para a DC para fechar o pedido, (uma espécie de trailing stop virtual com stoploss virtual). Em outras palavras, o Expert Advisor inclui uma parada móvel em um nível invisível de 1 pip para o servidor DC... é realista?
 
Centuriy:
Para ser mais preciso: em vez de enviar dados sobre um novo SL, a EA deve simplesmente armazená-los em variáveis (ou em outro lugar), e continuar a rastrear, a seguir, e quando o preço atingir um determinado nível, enviar um sinal à corretora sobre o fechamento de um pedido, (uma espécie de parada de rastreamento virtual com parada de parada virtual). Em outras palavras, o Expert Advisor inclui uma parada móvel em um nível invisível de 1 pip para o servidor DC... é realista?


Sim, é claro que é real. Você olha através das ordens abertas, elas têm um preço aberto, por exemplo, temos uma ordem de compra aberta ao preço de X, stop-loss virtual Y pontos, então se o preço atual Z < = X-Y* Ponto a ordem deve ser fechada. Naturalmente, também devemos levar em conta os spreads e se o stop loss não for fixo, mas calculado, o valor calculado deve ser armazenado com segurança em algum lugar, etc.

Busca por "parada virtual", "stoploss virtual", etc.

 
Figar0:


É realista, é claro. Se olharmos através das ordens abertas, seu preço aberto será definido, por exemplo, temos uma ordem de compra aberta a preço X e o stoploss virtual é de Y pontos, então se o preço atual Z <=X-Y*Ponto a ordem será fechada. É claro que temos que levar em conta os spreads, e se o stop loss não for fixo, mas calculado, então o valor calculado tem que ser armazenado com segurança em algum lugar, etc.

Busca por "parada virtual", "stoploss virtual", etc.

Acho que não podemos deixar de ter nossa própria contabilidade de pedidos de algum tipo.

Crie sua própria matriz de pedidos e armazene nela todos os dados de parada virtual necessários.

 
Figar0:


Sim, é claro que é real. Você olha através das ordens abertas, elas têm um preço aberto, por exemplo, temos uma ordem de compra aberta ao preço de X, stop-loss virtual Y pontos, então se o preço atual Z < = X-Y* Ponto a ordem deve ser fechada. Naturalmente, também devemos levar em conta os spreads e se o stop loss não for fixo, mas calculado, o valor calculado deve ser armazenado com segurança em algum lugar, etc.

Busca por "parada virtual", "stoploss virtual", etc.

Obrigado pela resposta, o problema é apenas a trailing stop (parada de trilha), eu quero trilhar 1 pip min, e eu quero enviar ordemModificar para a corretora a cada tick - é apenas hooliganismo IMHO ))

"Se o stop loss não for fixo, mas calculado, o valor calculado deve ser armazenado com segurança em algum lugar".

onde armazenar e como chamá-lo... Acho que tem de ser uma variável, ou estou enganado...