Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 905

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& wie schreibe ich das? )

Sie müssen das Datum aus time[i] extrahieren und es mit time[i+1] vergleichen. Wenn sie nicht gleich sind, dann extrahiere die Zeit aus time[i] und vergleiche sie mit der angegebenen Zeit. Wenn sie gleich sind, fügen Sie eine Linie ein.

Wie all dies extrahiert wird, habe ich in dem Skript gezeigt. Alles, was bleibt, ist darüber nachzudenken.

 
Artyom Trishkin:

Sie müssen das Datum aus time[i] extrahieren und es mit time[i+1] vergleichen. Wenn nicht gleich, extrahiere die Zeit aus time[i] und vergleiche sie mit der angegebenen Zeit. Wenn sie gleich sind, ziehen Sie eine Linie.

Wie das alles extrahiert wird, habe ich im Skript gezeigt. Alles, was noch zu tun ist, ist darüber nachzudenken.

Freitagabend, schlechtes Denken) Nichts baut sich auf. Und warum?

   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:

dann extrahieren Sie die Zeit aus time[i] und vergleichen Sie sie mit der eingestellten Zeit.

Wahrscheinlich time[i+1], ich muss die Zeile zum Vortag nach dem Tagesschluss setzen.

 

Hallo.

Dumme Frage, aber trotzdem, bitte helfen Sie mir)

Ich habe einen Handel zu einem bestimmten Preis, ich immer lang) Und ich vergleiche den Preis des Handels mit dem aktuellen Angebot, wenn wir um 0,5% I close.Cursed bei bid(((

   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:

Ich habe einen Handel zu einem bestimmten Preis eingegeben, ich bin immer sehnsüchtig)Und ich vergleiche den Preis des Handels mit dem aktuellen Gebot, wenn wir um 0,5% gestiegen sind, schließe ich.Es schwört auf Gebot(((

Wahrscheinlich, weil dies MQL5 ist. Hier gibt es kein "Gebot", sondernSymbolInfoDouble(_Symbol, SYMBOL_BID)


 
ISL:

Hallo.

Dumme Frage, aber trotzdem, bitte helfen Sie mir)

Ich habe den Handel zu einem bestimmten Preis, ich immer lang) Und ich vergleiche den Preis des Handels mit dem aktuellen Angebot, wenn wir um 0,5% stieg ich close.it schwört auf bid(((

Sie haben Recht, zu fluchen. In MQL5 gibt es kein solches Feld mit Geldkursen.

Ersetzen Sie es durch

m_symbol.Bid()

und vergessen Sie vor dem Zyklus nicht, die Preise zu aktualisieren:

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

Und er hat Recht, wenn er flucht. In MQL5 gibt es kein solches Feld mit Geldkursen.

Ersetzen Sie es durch

und vergessen Sie vor der Schleife nicht, die Preise zu aktualisieren:

Ich habe es auf zwei verschiedene Arten gemacht:

1) Expert Advisor funktioniert, aber leider gibt er mir nicht die Idee. Es ist ganz einfach: Ich kaufe, wenn die vorherige Kerze unterhalb und die nächste oberhalb geschlossen hat. Und ich schließe nur, wenn der Kurs um 0,5 % gestiegen ist.

Es macht seltsame Geschäfte(((

   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) Meine Methode ist wie folgt:

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);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

Ich glaube, ich habe es vermasselt(((.

Es wird ein Fehler erzeugt:


 
ISL:

Ich habe es auf zwei verschiedene Arten gemacht:

1) Der Expert Advisor funktioniert, aber leider setzt er die Idee nicht um. Es ist ganz einfach: Ich kaufe, wenn die vorherige Kerze niedriger und die nächste höher geschlossen hat. Und ich schließe nur, wenn der Kurs um 0,5 % gestiegen ist.

Es macht seltsame Geschäfte(((

2) Meine Methode ist wie folgt:

Ich glaube, ich habe es vermasselt(((.

Er gibt eine Fehlermeldung aus:


Öffnen Sie einen meiner Codes und Sie werden dort sowohl m_symbol als auch RefreshRates sehen.

 
Vladimir Karputov:

Öffnen Sie einen meiner Codes und Sie werden dort sowohl m_symbol als auch RefreshRates sehen.

Ich danke Ihnen. Ich habe es gelesen und getan.

Jetzt kann ich mir nicht erklären, warum der Algorithmus nicht funktioniert.

      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, то закрываем ее
      }


Das geschieht folgendermaßen: Der Kauf erfolgt unter der Bedingung

1) Wenn die Bedingung erfüllt ist;

2) Ich prüfe, ob es bereits eine offene Position gibt, wenn ja, gehe ich zu Punkt 3), wenn nicht, eröffne ich eine 2*)

3) Wenn die Position gekauft ist und die Bedingung erfüllt ist, dass der Preis um 10% vom Einstiegspreis gestiegen ist, schließe ich sie.

Im Test passiert folgendes, Position öffnet und schließt, nicht auf Bedingungen (( Wieder, bitte helfen Sie!

 
ISL:

Ich danke Ihnen. Ich habe die Lektüre gemacht.

Jetzt kann ich mir nicht erklären, warum der Algorithmus nicht funktioniert.


Das geschieht folgendermaßen: Der Kauf erfolgt unter der Bedingung

1) Wenn die Bedingung erfüllt ist;

2) Ich prüfe, ob es bereits eine offene Position gibt, wenn ja, gehe ich zu Punkt 3), wenn nicht, eröffne ich eine 2*)

3) Wenn die Position gekauft ist und die Bedingung erfüllt ist, dass der Preis um 10% vom Einstiegspreis gestiegen ist, schließe ich sie.

Beim Testen passiert folgendes, Position öffnet und schließt, nicht auf Bedingungen (( Wieder, bitte helfen Sie!

Ich schlage den folgenden Algorithmus vor:

   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()); //если дошли сюда, значит позиции нет, открываем ее
     }

Achten Sie auf m_Position.PreisÖffnen()

Grund der Beschwerde: