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

 
Artyom Trishkin:

Ändern der Größe des Arrays nnc_arr_in um 1 mehr als seine Größe in Zelle 0 des Arrays structures:

Ich danke Ihnen.

 

Frage mql5

Es gibt zwei offene Positionen und ein Signal(Flag==true)

Nur eine Position sollte durch dieses Signal geschlossen werden, nämlich die mit dem größeren Gewinn.

Wie kann man nur diejenige mit dem höheren Gewinn abschließen ?

Wie kann man dieses Ereignis am besten behandeln?

Ich versuche, es auf diese Weise zu tun:

if (invertStart == true) // получил событие, о том что есть две позиции и одну можно закрыть.
   {     
   int npos_L1=0;   NPos_L1(npos_L1);
   if(npos_L1==1)
   {
   int positions=PositionsTotal();
   for(int i=0;i<=positions;i++)
   {
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0 && PositionGetInteger(POSITION_TYPE)== POSITION_TYPE_SELL && POSITION_PROFIT>=50) //  50  допустим...
   {
   m_trade.PositionClose(ticket); 
   i--;
   invertStart = false;
   return;  
   }
   }
   }
   }  

Die letzte offene Position wird daraufhin geschlossen.

Bitte geben Sie mir Tipps, wie man es richtig macht, ich hätte gerne ein Beispiel. Ich lese Fachbücher und Fibeln, aber ich verstehe nicht immer die Feinheiten.

 
Vladpedro:

Frage mql5

Es gibt zwei offene Positionen und ein Signal(Flag==true)

Nur eine Position sollte durch dieses Signal geschlossen werden, nämlich die mit dem größeren Gewinn.

Wie kann man nur diejenige mit dem höheren Gewinn abschließen ?

Wie kann man dieses Ereignis am besten behandeln?

Ich versuche, es auf diese Weise zu tun:

Die letzte offene Position wird daraufhin geschlossen.

Bitte geben Sie mir Tipps, wie ich es richtig mache, ich brauche ein Beispiel. Ich lese Fachbücher, aber ich verstehe die Details nicht immer.

Code:

   ulong ticket=ULONG_MAX;
   double profit=DBL_MIN;
   if(invertStart == true)  // получил событие, о том что есть две позиции и одну можно закрыть.
     {
      int positions=PositionsTotal();
      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         ulong tmp_ticket=PositionGetTicket(i);
         if(ticket!=0)
           {
            double tmp_profit=PositionGetDouble(POSITION_PROFIT);
            if(tmp_profit>profit)
              {
               ticket=tmp_ticket;
               profit=tmp_profit;
              }
           }
        }
      //---
      if(ticket!=ULONG_MAX)
         m_trade.PositionClose(ticket);
     }
 
Vladimir Karputov:

Code:

Vielen Dank, scheint zu funktionieren. beschwert sich nur über Ticket, da es bereits eine solche lokale Variable gibt.

Die Deklaration von 'ticket' versteckt die lokale Variable Lim_Stop_03_Sell_pos_06.mq5 299 10

Einige dieser Karten müssen möglicherweise im Inneren versteckt werden.

 
Vladpedro:

Vielen Dank, es scheint zu funktionieren, nur beschwert es sich über das Ticket, weil es bereits eine solche lokale Variable gibt.

Die Deklaration von 'ticket' versteckt die lokale Variable Lim_Stop_03_Sell_pos_06.mq5 299 10

Einige dieser Karten müssen möglicherweise im Inneren versteckt werden.

Benennen Sie die Variable um

ulong ticket=ULONG_MAX;

в

ulong close_ticket=ULONG_MAX;

und vergessen Sie natürlich nicht, ihn in Ihrem Code umzubenennen.

 
Vladimir Karputov:

Benennen Sie die Variable um

в

und vergessen Sie natürlich nicht, sie auch im Code umzubenennen.

Ja, danke, das habe ich schon erledigt... umbenannt.

 

Guten Tag!

Können Sie mir bitte sagen, wo ich einen EA finden kann, der eine E-Mail oder einen Push-Brief sendet, wenn der Preis über der oberen Linie oder unter der unteren Linie liegt (horizontale oder schräge Linie und sie kann auf dem Diagramm verschoben werden)

Vielleicht hat jemand eine, bitte teilen Sie sie mit.

Nur auf MT5

Ich danke Ihnen!

 

wenn ich den Indikator in EA verbinde

int OnInit()
{
   ind_handle = iCustom(_Symbol, indperiod, "MyInd", indParam);
   return(INIT_SUCCEEDED);
}

und dann erhalte ich Indikatorpuffer mit CopyBuffer(ind_handle, 0, 1, 3, buffer1)


Muss ich jeden Tick des Indikatorpuffers lesen?

Ich brauche eine Antwort und vorzugsweise die Quelle - Dokumente, Artikel:

1. der Indikator rechnet sich immer parallel

2. der Indikator wird nur zum Zeitpunkt des Aufrufs von CopyBuffer() berechnet

 
Igor Makanu:

wenn ich den Indikator in EA verbinde

und dann erhalte ich Indikatorpuffer mit CopyBuffer(ind_handle, 0, 1, 3, buffer1)


Muss ich jeden Tick des Indikatorpuffers lesen?

Ich brauche eine Antwort und vorzugsweise die Quelle - Dokumente, Artikel:

1. der Indikator rechnet sich immer parallel

2. der Indikator wird nur zum Zeitpunkt des Aufrufs von CopyBuffer() berechnet

Igor, wenn der Indikator richtig geschrieben ist, können nur die Werte des aktuellen Balkens geändert werden. Wenn Sie also aktuelle Werte benötigen, sollten Sie den CopyBuffer unmittelbar vor der Verwendung dieser neuen Werte verwenden. Und wenn wir historische Werte brauchen, ändern sie sich nicht, und es gibt keinen Grund, sie erneut zu lesen.

Es gibt irgendwo Informationen über die Berechnung des Indikators bei jedem Tick. Soweit ich mich erinnere, wird der Indikator standardmäßig nur neu berechnet, wenn auf ihn zugegriffen wird, aber es ist möglich, ihn bei jedem Tick neu berechnen zu lassen. Wie man das macht, sollten Sie in der Dokumentation nachsehen.

 
Alexey Viktorov:
Igor, wenn der Indikator richtig geschrieben ist, können nur die Werte des aktuellen Balkens geändert werden. Wenn Sie also aktuelle Werte benötigen, sollten Sie den CopyBuffer unmittelbar vor der Verwendung dieser neuen Werte verwenden. Und wenn wir historische Werte brauchen, ändern sie sich nicht, und es gibt keinen Grund, sie erneut zu lesen.

Irgendwo gibt es Informationen über die Berechnung des Indikators bei jedem Tick. Soweit ich mich erinnere, wird der Indikator standardmäßig nur neu berechnet, wenn er aufgerufen wird, aber es ist möglich, ihn bei jedem Tick neu berechnen zu lassen. Wie man das macht, steht in der Dokumentation.

OK, ich werde es trotzdem testen müssen

das Problem ist in der Indikator-Redrawing, ich will nicht, um den Indikator noch neu zu schreiben

Grund der Beschwerde: