[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 256

 
hoz:


Ontem eu estava com pressa, tive que ir. Eu escrevi a pergunta naquele momento, não a que eu queria.

Na verdade, eu me referia aos Consultores Especialistas que, sob uma determinada condição, enviam um monte de ordens (uma grade). Não vi em tais Conselheiros Especialistas que nem se espalhem, nem parem de perder, nem posição de preço acima (abaixo de Asc ou Bid), nem nada mais é verificado. Vou escrevê-lo eu mesmo e mostrá-lo a todos.


Por que até mesmo tomar alguns gore-experts como exemplo? No mínimo são exclusivamente para o testador, no máximo são escritas com as mãos tortas, como dito acima...
 
alsu:

Por que tomar como exemplo alguns especialistas da Woe-experts? No mínimo são apenas para o testador, no máximo são escritas com as mãos tortas, como dito acima...

Bem, eu entendi como implementá-lo, mas decidi ver como os outros o fazem.
 

Rapazes, estou tendo um problema realmente horrível! Meu gráfico não muda para a esquerda quando eu salvo o desenho! A função "gráfico de deslocamento" é ativada! Como posso consertá-lo?


 

Olá!

Quero que meu consultor especializado não abra mais do que um negócio por dia. Você pode me dizer como fazer isso?

 

Olá, já há algum tempo venho pesquisando o mql4, talvez um dos programadores experientes possa ajudar. Eu quero saber como fazer para que o bloqueio seja feito quando o pedido atingir -30 ou -40. Tenho que adicionar algumas propriedades para que este roteiro bloqueie os pedidos assim que eles entrarem com menos.

void start()
{
double StopLoss;
double Lots=0;
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS))
continuar;
if(OrderSymbol()!=Symbol())
continuar;
if(OrderType()==OP_BUY)
Lots+=OrderLots();
if(OrderType()==OP_SELLL)
Lots-=OrderLots();
}
if(Lots>0)
OrderSend(Symbol(),OP_SELLL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);

 
protey7:

Olá!

Quero que meu consultor especializado não abra mais do que um negócio por dia. Você pode me dizer como fazer isso?

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

Rapazes, estou tendo um problema realmente horrível! Meu gráfico não muda para a esquerda quando eu salvo o desenho! A função "gráfico de deslocamento" é ativada! Como posso consertá-lo?

Nota: no gráfico na parte superior direita há um pequeno triângulo como este. Quando você passa o cursor sobre ele, uma ponta de ferramenta aparecedizendo "Chart shift". Prenda-o e mova-o para a esquerda tanto quanto você precisar para dar espaço à direita.
 
hoz:

Bem, eu entendi como implementá-lo, mas decidi ver como os outros o fazem.
E se outros começarem a pular de janelas?
 
paladin80:


Obrigado pela dica!

Somente na variante sugerida o especialista não funciona)))) Aqui está uma variante de trabalho que eu tenho :

se (OrderTotal()==0) // Se não houver posições em aberto

{ for (int i=OrdersHistoryTotal()-1; i>=0; i--) // Busca de pedidos da lista do histórico da conta

{ se (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // a ordem é selecionada entre as ordens fechadas

{

if (OrderCloseTime()>=iTime(NULL,PERÍODO_D1,0)) // Se o tempo de fechamento do pedido for maior ou igual ao início da abertura atual da vela

// O Expert Advisor não funciona. Qualquer outro período pode ser inserido ao invés de PERÍODO_D1.

retorno(-1);

} } }

 
alsu:

Por que você toma como exemplo alguns especialistas da Woe-experts? No mínimo são projetados exclusivamente para o testador, no máximo são escritos com as mãos tortas, como foi dito acima...


Escrevi à minha maneira. Eu não otimizei particularmente o código, apenas o escrevi para fazê-lo funcionar e mostrar a lógica.

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

O passo é o espaçamento da grade de ordem.

Minha pergunta é a seguinte. Minha lógica é correta? Existe alguma maneira de melhorar o código para que ele funcione mais rapidamente? Do ponto de vista do desempenho...

Tenho também uma idéia de que talvez precisemos fazer pausas após cada mensagem. Bem, em todos esses pontos, tudo isso é muito interessante para mim.