Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 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); }        
            
         }
     }           
   }
 
}
   

Per favore, chiarisci come implementare due compiti (usando i segnali di acquisto come esempio).

dato: punto d'ingresso - incrocio della linea stocastica sotto il 20

trade close - attraversamento del livello 80 verso il basso attraverso la linea stocastica lenta

cioè non aprire diverse posizioni sullo stesso livello come nell'immagine allegata

2. chiudere al secondo, non al primo attraversamento del livello 80 dall'alto al basso con una linea stocastica lenta

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

Per favore, chiarisci come implementare due compiti (usando i segnali di acquisto come esempio).

dato: punto di ingresso - linea stocastica che attraversa sotto il 20

trade close - attraversamento del livello 80 verso il basso attraverso la linea stocastica lenta

cioè non aprire diverse posizioni sullo stesso livello come nell'immagine allegata

2) Il secondo ordine sarebbe chiuso al secondo, non al primo, attraversamento del livello 80 verso il basso attraverso la linea stocastica lenta

Prima di tutto, formulalo chiaramente:

  • condizione di apertura della posizione
  • condizione di chiusura

 
Si prega di consigliare come accedere alle informazioni sulla posizione nella funzione OnTick dell'Expert Advisor costruito. Almeno se è aperto o no. Dove posso trovare un indicatore della posizione? O deve essere fatto in qualche altro modo?
 
VHS:
Si prega di consigliare come accedere alle informazioni sulla posizione nella funzione OnTick di un Expert Advisor costruito. Almeno, se è aperto o no. Dove posso trovare un indicatore della posizione? O deve essere fatto in qualche altro modo?

L'Expert Advisor è stato progettato da chi?

Per favore, mostratemi il codice.
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 
Vladimir Karputov:

L'esperto è progettato da chi?

Mostra il codice, per favore.
L'Expert Advisor è progettato da Wizard utilizzando una classe di segnale personalizzata e una classe di trading personalizzata. Il codice dell'Expert Advisor stesso è standard. ExtExpert.OnTick() è chiamato in OnTick, il resto del codice è costruito usando la libreria standard. In realtà questa domanda è un seguito della precedente, alla quale nessuno ha risposto. Voglio che l'Expert Advisor progettato da Wizard usi la classe dei segnali personalizzati solo per aprire posizioni e chiuderle solo quando si fa trading e ignorare i segnali della classe dei segnali. Ho capito come ignorare i segnali. Ma come ottenere informazioni in onTick se c'è una posizione aperta per abilitare l'ignoramento, non capisco.
 
VHS:
***E ho sempre chiuso solo con il trading ***

Non è chiaro.

 

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

Vladimir Karputov:

Non è chiaro.

"D" e "L" uno accanto all'altro sulla tastiera. Errore mio.

 
Artyom Trishkin:

"D" e "L" uno accanto all'altro sulla tastiera. Sbagliato.

Sì, Artyom, grazie mille. Apparentemente auto-sostituzione (o mani storte). E la classe personalizzata e la chiusura non è trayDing, ma trayLing.
Nella classe CExpert, il metodo Processing va prima in direzione e controlla un segnale dalla classe signal. E poi (solo se c'è una SelectPosition) controlla Trailing. Di conseguenza, se c'è una posizione aperta, a volte si chiuderà in assenza di segnali dalla classe Trailing, ottenendo un segnale dalla classe signals.
La variante precedente - prendere informazioni sulla presenza di una posizione aperta dalla classe Trailing Stop e passarle a Ignore tramite OnTick - non ha funzionato. Ho imparato a memorizzare in OnInit l'oggetto trailing e a trasferirlo in OnTick. Ma funziona solo mentre la posizione è aperta. Ma dopo che è stato chiuso, l'elaborazione non inizia il trailing e Ignore rimane ignorato. Quindi c'è solo un ultimo tocco: dopo aver chiuso la posizione, definire questo momento in OnTick e restituire il valore Ignore "0". Ma come ottenere effettivamente informazioni su (presenza/assenza di) una posizione in OnTick non capisco.
 
VHS:
Sì, Artem, grazie mille. A quanto pare il cambio automatico (o le mani storte). E la classe personalizzata e la chiusura non è trayDing, è trayLing.
Nella classe CExpert, il metodo Processing va prima in direzione e controlla un segnale dalla classe signal. E poi (solo se c'è una SelectPosition) controlla Trailing. Di conseguenza, se c'è una posizione aperta, a volte si chiuderà in assenza di segnali dalla classe Trailing, ottenendo un segnale dalla classe signals.
La variante precedente - prendere informazioni sulla presenza di una posizione aperta dalla classe Trailing Stop e passarle a Ignore tramite OnTick - non ha funzionato. Ho imparato a memorizzare in OnInit l'oggetto trailing e a trasferirlo in OnTick. Ma funziona solo mentre la posizione è aperta. Ma dopo che è stato chiuso, l'elaborazione non inizia il trailing e Ignore rimane ignorato. Quindi c'è solo un ultimo tocco: dopo aver chiuso la posizione, definire questo momento in OnTick e restituire il valore Ignore "0". Ma come ottenere effettivamente informazioni su (presenza/assenza di) una posizione in OnTick non capisco.

Penso che tu possa renderlo molto più semplice - nel tuo EA imposta la soglia CLOSE a 100, e dai un peso di 0,5 al segnale - così un segnale con un peso di 0,5 non andrà MAI oltre la soglia di 100