Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 905

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& come posso scrivere questo? )

È necessario estrarre la data da time[i] e confrontarla con time[i+1]. Se non sono uguali, allora estrai il tempo da time[i] e confrontalo con il tempo dato. Se sono uguali, mettete una linea.

Vi ho mostrato come estrarre tutto questo nello script. Non resta che pensarci.

 
Artyom Trishkin:

È necessario estrarre la data da time[i] e confrontarla con time[i+1]. Se non è uguale, estrae il tempo da time[i] e lo confronta con il tempo dato. Se sono uguali, tracciate una linea.

Come si estrae il tutto - l'ho mostrato nello script. Non resta che pensarci.

Venerdì sera, pensando male) Non si costruisce niente. Perché?

   datetime date1=time[i]; 
   datetime date2=time[i+1];
 
   MqlDateTime str1,str2; 
   TimeToStruct(date1,str1); 
   TimeToStruct(date2,str2); 
  if(str1.day!=str2.day&&str1.mon!=str2.mon&&str1.year!=str2.year&&str2.hour==17&&str2.min==30){
  
   if(!TrendCreate(0,"closek"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(i+1,NULL,PERIOD_M30),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
        }
 
Artyom Trishkin:

poi estrarre il tempo da time[i] e confrontarlo con il tempo impostato.

Probabilmente time[i+1], ho bisogno di mettere la linea al giorno precedente dopo la chiusura del giorno.

 

Salve.

Domanda stupida ma comunque, per favore aiutatemi)

Sono entrato in un trade ad un certo prezzo, io sempre lungo) E confronto il prezzo del trade con l'offerta attuale, se siamo aumentati dello 0,5% chiudo.Maledetto all'offerta(((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (fabs(DEAL_PRICE-Bid[0])/DEAL_PRICE)>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }
 
ISL:

Sono entrato in un trade ad un certo prezzo, sono sempre longing)E confronto il prezzo del trade con l'offerta attuale, se siamo saliti dello 0,5% chiudo.Giura al bid(((

Probabilmente perché questo è MQL5. Non c'è nessuna "offerta" qui maSymbolInfoDouble(_Symbol, SYMBOL_BID)


 
ISL:

Salve.

Domanda stupida ma comunque, per favore aiutatemi)

Sono entrato in un trade ad un certo prezzo, sempre long) E confronto il prezzo del trade con l'offerta attuale, se siamo saliti dello 0,5% chiudo.Giura al bid(((

Hai ragione a giurare. Non c'è una tale matrice con i prezzi delle offerte in MQL5.

Sostituiscilo con

m_symbol.Bid()

e prima del ciclo non dimenticare di aggiornare i prezzi:

   if(!RefreshRates())
      return;
 
Vladimir Karputov:

E ha ragione di giurare. Non c'è una tale matrice con i prezzi delle offerte in MQL5.

Sostituiscilo con

e prima del ciclo non dimenticare di aggiornare i prezzi:

L'ho fatto in due modi diversi:

1) Expert Advisor funziona, ma purtroppo non mi dà l'idea. È semplice, compro quando la candela precedente ha chiuso sotto e quella successiva ha chiuso sopra. E chiudo solo se il prezzo è aumentato dello 0,5%.

Fa strani accordi(((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (SymbolInfoDouble(_Symbol,SYMBOL_BID)-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

2) Il mio metodo è il seguente:

if(!RefreshRates())
      return; 
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (m_symbol.Bid())-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

Penso di aver fatto un casino((((.

Genera un errore:


 
ISL:

L'ha fatto in due modi diversi:

1) L'Expert Advisor funziona, ma purtroppo non implementa l'idea. È semplice, compro quando la candela precedente chiude più in basso e quella successiva chiude più in alto. E chiudo solo se il prezzo sale dello 0,5%.

Fa strani accordi(((

2) Il mio metodo è il seguente:

Penso di aver fatto un casino((((.

Dà un errore:


Aprite qualsiasi mio codice e vedrete sia m_symbol che RefreshRates.

 
Vladimir Karputov:

Aprite qualsiasi mio codice e vedrete sia m_symbol che RefreshRates.

Grazie. L'ho letto e l'ho fatto.

Ora non riesco a capire perché l'algoritmo non funziona.

      if(!RefreshRates())
         return;
1)   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
2)      if(m_Position.Select(Symbol()))                             //если уже существует позиция по этому символу
        {
         
          return;                            
        }
2*)    m_Trade.Buy(0.1,Symbol());                                 //если дошли сюда, значит позиции нет, открываем ее
     }
3)  if 
   ((m_Position.PositionType()==POSITION_TYPE_BUY) && (((m_symbol.Bid()-DEAL_PRICE)/DEAL_PRICE)>= 0.1))
       {
         m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
      }


Quello che succede è il seguente: l'acquisto è fatto sotto la condizione

1) Se la condizione è soddisfatta;

2) Controllo se c'è già una posizione aperta, se c'è, vado al punto 3), se no, apro una 2*)

3) Se la posizione è buy, e la condizione è soddisfatta che il prezzo è aumentato del 10% dal prezzo di entrata, allora la chiudo.

Nel test, succede quanto segue, la posizione si apre e si chiude, non sulle condizioni (( Di nuovo, per favore aiutatemi!

 
ISL:

Grazie. Ho fatto la lettura.

Ora non riesco a capire perché l'algoritmo non funziona.


Quello che succede è il seguente: l'acquisto è fatto sotto la condizione

1) Se la condizione è soddisfatta;

2) Controllo se c'è già una posizione aperta, se c'è, vado al punto 3), se no, apro una 2*)

3) Se la posizione è buy, e la condizione è soddisfatta che il prezzo è aumentato del 10% dal prezzo di entrata, allora la chiudo.

Durante i test succede quanto segue, la posizione si apre e si chiude, non sulle condizioni (( Di nuovo, per favore aiutatemi!

Propongo il seguente algoritmo:

   if(!RefreshRates())
      return;
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0]) //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(Symbol())) //если уже существует позиция по этому символу
        {
         if(m_Position.PositionType()==POSITION_TYPE_BUY && (m_symbol.Bid()-m_Position.PriceOpen())/m_Position.PriceOpen()>=0.1)
           {
            m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
            return;
           }
        }
      else
         m_Trade.Buy(0.1,Symbol()); //если дошли сюда, значит позиции нет, открываем ее
     }

Fate attenzione a m_Position.PrezzoAprire()

Motivazione: