Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 832

 
void OnTick()
  {
 TimeCurrent(dt); 
//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }
//--- сначала нужно записать в массивы значения буферов индиктора Fractal
//--- заполнение данными буфера

   ArraySetAsSeries(Signal,true);
   ArraySetAsSeries(Main,true);

   
   if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
   if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;

   double Main_1=Main[1];
   Main_1=NormalizeDouble(Main_1,5);
   Print("Main_1=",DoubleToString(Main_1,5));
    
   double Main_2=Main[2];
   Main_2=NormalizeDouble(Main_2,5);
   
   double Main_3=Main[3];
   Main_3=NormalizeDouble(Main_3,5);
   
   double Signal_1=Signal[1];
   Signal_1=NormalizeDouble(Signal_1,5);
   Print("Signal_1=",DoubleToString(Signal_1,5));
   
   double Signal_2=Signal[2];
   Signal_2=NormalizeDouble(Signal_2,5);
   
   double Signal_3=Signal[3];
   Signal_3=NormalizeDouble(Signal_3,5);
   
   
// Для сохранения значения времени бара мы используем static-переменную Old_Time.
// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }
     
     
// открытие покупок

     if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
     {
      if(IsNewBar!=false)
        {
           
              {
               open_by_market();

              }
        }
     }
  

  // закрытие покупок 
 
   if (Signal_3>80&&Signal_2>80&&Signal_1<80)
   {
   if(PositionsTotal()>0)
        {
         for(int i=0;i<PositionsTotal();i++)
           {
            ulong orders_ticket=PositionGetTicket(i);
            if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
              
              
              {  trade.PositionClose(orders_ticket); }        
            
         }
     }           
   }
 
}
   

Bom dia. Por favor esclarecer como implementar duas tarefas (usando sinais de compra como exemplo).

dado: ponto de entrada - passagem de linha estocástica abaixo de 20

encerramento do comércio - passagem de 80 nível para baixo através da linha de estocástico lento

ou seja, não abrir várias posições no mesmo nível como na imagem em anexo

2. fechar no segundo, e não no primeiro cruzamento do nível 80 de cima para baixo com uma linha estocástica lenta

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Arquivos anexados:
121.png  27 kb
 
gastinets:

Bom dia. Por favor esclarecer como implementar duas tarefas (usando sinais de compra como exemplo).

dado: ponto de entrada - passagem de linha estocástica abaixo de 20

encerramento do comércio - passagem de 80 nível para baixo através da linha de estocástico lento

ou seja, não abrir várias posições no mesmo nível como na imagem em anexo

2) A segunda ordem seria fechada na segunda, não a primeira, atravessando o nível 80 para baixo através da linha estocástica lenta

Em primeiro lugar, formulá-lo claramente:

  • condição de abertura da posição
  • estado próximo

 
Aconselhar como aceder à informação de posição na função OnTick do Expert Advisor construído. Pelo menos quer esteja aberto ou não. Onde posso obter um ponteiro para a posição? Ou precisa de ser feito de alguma outra forma?
 
VHS:
Aconselhar como aceder à informação de posição na função OnTick de um Expert Advisor construído. Pelo menos, se estiver aberto ou não. Onde posso obter um ponteiro para a posição? Ou precisa de ser feito de alguma outra forma?

O Conselheiro Especialista é concebido por quem?

Por favor, mostre-me o código.
 
Comentários não relacionados com este tópico foram transferidos para "Perguntas dos principiantes do MQL4 MT4 MetaTrader 4".
 
Vladimir Karputov:

O perito é concebido por quem?

Mostrar o código, por favor.
O Expert Advisor é concebido pela Wizard utilizando uma classe de sinal personalizada e uma classe de negociação personalizada. O código do próprio Expert Advisor é padrão. ExtExpert.OnTick() é chamado em OnTick, o resto do código é construído utilizando a biblioteca padrão. Na verdade, esta pergunta é um seguimento da anterior, à qual ninguém respondeu. Quero que o Expert Advisor concebido pela Wizard utilize a classe de sinais personalizados apenas para abrir posições e fechá-las apenas ao negociar e ignorar os sinais da classe de sinais. Descobri como ignorar os sinais. Mas como obter informação no onTick sobre se existe uma posição aberta para permitir ignorar, não compreendo.
 
VHS:
***E eu só fechei por negociação ***

Não é claro.

 

VHS:
***а закрывал уже только по трейдингу ***

Vladimir Karputov:

Não é claro.

"D" e "L" um ao lado do outro no teclado. O meu erro.

 
Artyom Trishkin:

"D" e "L" um ao lado do outro no teclado. Errado.

Sim, Artyom, muito obrigado. Aparentemente, auto-substituição (ou mãos tortas). E a classe e o fecho personalizados não são trayDing, mas sim trayLing.
Na classe CExpert, o método Processing vai primeiro para Direction e verifica se existe um sinal da classe do sinal. E depois (apenas se houver uma posição SelectPosition) verifica o Trailing. Como resultado, se houver uma posição aberta, esta fechará por vezes na ausência de sinais da classe de sinalização, obtendo um sinal da classe de sinalização.
A variante anterior - tirar informação sobre a presença de uma posição aberta da classe Trailing Stop e passá-la para Ignorar via OnTick - não funcionou. Aprendi a memorizar no OnInit o objecto móvel e a transferi-lo para o OnTick. Mas só funciona enquanto a posição estiver aberta. Mas depois de fechado, o processamento não começa a seguir o rasto e Ignorar permanece ignorado. Portanto, há apenas um toque final: após fechar a posição, definir este momento em OnTick e devolver Ignorar o valor "0". Mas como obter eficazmente informação sobre (presença/ausência de) uma posição no OnTick que não compreendo.
 
VHS:
Sim, Artem, muito obrigado. Aparentemente, troca automática (ou mãos tortas). E a classe e o fecho personalizados não é trayDing, é trayLing.
Na classe CExpert, o método Processing vai primeiro para Direction e verifica se existe um sinal da classe do sinal. E depois (apenas se houver uma posição SelectPosition) verifica o Trailing. Como resultado, se houver uma posição aberta, esta fechará por vezes na ausência de sinais da classe de sinalização, obtendo um sinal da classe de sinalização.
A variante anterior - tirar informação sobre a presença de uma posição aberta da classe Trailing Stop e passá-la para Ignorar via OnTick - não funcionou. Aprendi a memorizar no OnInit o objecto móvel e a transferi-lo para o OnTick. Mas só funciona enquanto a posição estiver aberta. Mas depois de fechado, o processamento não começa a seguir o rasto e Ignorar permanece ignorado. Portanto, há apenas um toque final: após fechar a posição, definir este momento em OnTick e devolver Ignorar o valor "0". Mas como obter eficazmente informação sobre (presença/ausência de) uma posição no OnTick que não compreendo.

Penso que pode tornar isto muito mais fácil - na sua EA defina o limiar FECHADO para 100, e dê 0,5 peso ao sinal - assim um sinal com um peso de 0,5 NUNCA passará o limiar de 100