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 199

 

Boa noite.

Você poderia me dizer como adicionar o fechamento de todas as posições e a exclusão de todas as ordens ao final da semana de negociação?

Obrigado!

 
Antonius:

Boa noite.

Você poderia me dizer como adicionar o fechamento de todas as posições e a exclusão de todas as ordens ao final da semana de negociação?

Obrigado!

Escreva tal roteiro, depois jogue-o na tabela quando quiser fechar e apague tudo. Isso é tudo...

Seja bem-vindo!

 
artmedia70:

Escreva tal roteiro, depois jogue-o na tabela quando quiser fechar e apague tudo. A questão é...

Por favor!



Obrigado:) Esclarecendo o pedido.

Precisamos acrescentar código ao EA que fechará todas as ordens e posições no final da semana de negociação.

Você poderia, por favor, escrever este código?

 
Antonius:


Obrigado:) Esclarecendo o pedido.

Precisamos acrescentar código ao EA que fechará todas as ordens e posições no final da semana de negociação.

Você poderia, por favor, escrever este código?

Eu posso fazer isso. Não há problema. Você já fez alguma coisa por conta própria? Este tópico não é sobre obter coisas de graça, é sobre ajudar as pessoas que estão tentando codificar por si mesmas.
 
artmedia70:
Eu posso fazer isso. Não há problema. Você já fez alguma coisa por conta própria? Este tópico não se trata de preparar algo de graça, mas de ajudar aqueles que estão tentando codificar por conta própria.


Confira em https://book.mql4.com/ru/trading/orderclose.

Pesquisado no google, no fórum. Não encontrei nenhum. Talvez eu esteja escrevendo a pergunta de forma errada.

Pensei em perguntar no tópico do novato.

 

Como receitar?

Enquanto você executa o roteiro:

Uma janela aparece com as guias "geral" e "parâmetros de entrada".

Preciso inserir uma data nos parâmetros de entrada.

É possível que quando eu executar o roteiro, uma caixa de data apareça, eu introduza a data, clique em ok e tudo funcione?

E posso fazer com que o roteiro lembre a última data em que entrei?

 
artmedia70:

A função que determina a última posição fechada na parada tem o tipo bool, enquanto você está tentando retornar o tipo duplo a partir dele. Assim, ele retorna 0 ou 1.

Eu lhe disse que você deveria acrescentar a passagem de uma variável por referência a ela:

Verifique agora a última compra, por exemplo:

Assim...


Muito obrigado.
 
artmedia70:

A função que determina a última posição fechada na parada tem o tipo bool, enquanto você está tentando retornar o tipo duplo a partir dele. Assim, ele retorna 0 ou 1.

Escrevi-lhe que você deve acrescentar a passagem de uma variável por referência a ela:

Verifique agora a última compra, por exemplo:

Assim...


Fez tudo como você disse. Todos compilados...... mas o funcionamento não funciona quando o assessor de testes..... todos os cargos de assessor abrem 0,1 lote.

double  Magic, Lot;

int start()
  {
        

  
 double Price=iOpen (Symbol (),0,0);
 

          
 int last_order_bar = 0;                                                                                                                        
 int ot = OrdersTotal();                                                                                                                        
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS))                                                                                                                        
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )                                                                                                                       
         last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());                                                                                                             
 }                                                                                                                      
                                                                                                                        
 int last_hist_order_bar = 0;                                                                                                                   
 int oht = OrdersHistoryTotal();                                                                                                                        
                                                                                                                
 if (oht>0)                                                                                                                     
 {                                                                                                                      
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))                                                                                                                         
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)                                                                                                                        
         last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
                                                                                                        
        }

                                                                                                        
if (ot==0)

 if (Bid ==Price)
//=============================================================== 
  
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

//============================================================
                                                                           // задавать минимальное значение лота я не стал,мне кажется для тестера это не обязательно
if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot))                        
{
Lot=Lot*2;
OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
else
{

Lot=0.1;        
OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
   return(0);
  }
//============================================================  
bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.
{
   double   pt;
   datetime t;                                                       //у вас тип переменной t был int - я сделал datetime
   int       dg, i, j=-1, k=OrdersHistoryTotal()-1;

   for (i=k; i>=0; i--) 
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
     {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)           continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) 
         {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
      
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) 
   {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())< 0.5*pt) // Если закрыт по стопу
      { 
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
      
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}

Por favor, diga-me qual é o meu erro.

Não entendo este ponto - como você notou corretamente a função retorna o valor do tipo bool, mas na chamada de função, na qual a função deve colocar o valor do tipo bool.

Você sugeriu especificar outros tipos de valores.

Obrigado.

 
solnce600:

Eu fiz tudo como você disse. Tudo compila......, mas a função não funciona ao testar a EA..... todas as posições que a EA abre 0,1 lotes.

Você poderia me dizer qual é o meu erro?

Não entendo este momento - como você percebeu corretamente a função retorna valor do tipo bool, mas na chamada de função, na qual a função deve colocar valor do tipo bool

Você sugere a especificação de outros tipos de valores .

Obrigado.


bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.

Por que você a removeu? Se você o tivesse deixado, tudo teria funcionado.

 
Vinin:

Por que removê-lo? Se tivessem, tudo teria funcionado

Eu me pergunto ..... o que esse sinal significa.... Não consigo pensar em nada no livro didático sobre isso.