Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1351

 
MakarFX:

mql4 ist auch hier möglich

Ich glaube nicht, dass das der Fall ist. Der Expert Advisor erstellt ein grafisches Objekt in Form einer Trendlinie:

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

Nach dem Neustart des Terminals sind jedoch nur noch die Parameter des ersten Punktes verfügbar. Die Parameter des vorherigen Punktes erscheinen erst, nachdem der neue Punkt gebildet wurde. Ich glaube, ich beginne zu verstehen - ich muss nicht nur den letzten vom Indikator berechneten Punkt finden, sondern auch den vorherigen. Wie kann ich den letzten (ersten) Punkt überspringen und den nächsten Punkt berechnen? Den ersten Punkt finde ich folgendermaßen:

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

Das scheint mir nicht der Fall zu sein. Der EA erstellt ein grafisches Objekt in Form einer Trendlinie:

Nach dem Neustart des Terminals sind jedoch nur noch die Parameter des ersten Punktes verfügbar. Die Parameter des vorherigen Punktes werden erst nach der Bildung eines neuen Punktes angezeigt. Ich glaube, ich beginne zu verstehen - ich muss nicht nur den letzten vom Indikator berechneten Punkt finden, sondern auch den vorherigen. Wie kann ich den letzten (ersten) Punkt überspringen und den nächsten Punkt berechnen? Den ersten Punkt finde ich folgendermaßen:

Setzen Sie einen Zähler.

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

Im Allgemeinen erstellen Sie ein Array und füllen es, dann nehmen Sie den gewünschten Punkt aus dem Array

 
Vitaly Muzichenko:

Einen Zähler setzen

Und im Allgemeinen erstellen Sie ein Array und füllen es, dann nehmen Sie den gewünschten Punkt aus dem Array.

Ich danke Ihnen. Mir scheint, dass der von Ihnen vorgeschlagene Zähler genau das ist, was wir brauchen, und vor allem einfach ist.

Während meine Website aktualisiert wurde, habe ich die von Ihnen vorgeschlagene Variante ausprobiert. Es funktioniert alles. Ich danke Ihnen vielmals. So einfach, und ich fing an, mich in die Materie einzuarbeiten. Außerdem wurden die oben genannten Preis- und Zeitfunktionen vereinfacht.

 
MakarFX:

Ich habe hervorgehoben, was falsch war

die gelbe Markierung ist unnötig und kann gelöscht werden.

Die grün hervorgehobene Funktion muss außerhalb von OnStart() liegen,

Wenn Sie einen neuen Balken definieren wollen, verwenden Sie die braune Markierung.

Danke!)

 

Guten Tag an alleJ Bitte helfen Sie mir, einen funktionierenden Code für den Trailing-Stop bei Parabolic zu finden. Ich möchte fragen, wie diese Funktion zu meinem Expert Advisor hinzugefügt werden sollte, so dass sie nachziehen würde, wenn der Kurs um eine bestimmte Anzahl von Punkten steigt? Ich werde mich im Voraus bedanken, und bitte erfahrene und sachkundige Leute, nicht vorbeizugehen - den Gral muss ich irgendwie zu Ende bringen ;-)

 
DanilaMactep:

Guten Tag an alleJ Bitte helfen Sie mir, einen funktionierenden Code für den Trailing-Stop bei Parabolic zu finden. Ich möchte fragen, wie diese Funktion zu meinem Expert Advisor hinzugefügt werden sollte, so dass sie nachziehen würde, wenn der Kurs um eine bestimmte Anzahl von Punkten steigt? Vielen Dank im Voraus, und bitte nicht an erfahrenen und sachkundigen Leuten vorbeigehen - ich sollte irgendwie den Gral hinzufügen ;-)

wie diese

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

Können Sie mir sagen, wie ich den Monatstag aktualisieren kann, damit er den neuen Tag des Jahres widerspiegelt?


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

Ich dachte also, die Startzeit würde mit dem geänderten Tag des Jahres übereinstimmen. Aber da ist noch das alte Datum...

Hmm... wahrscheinlich ist es einfacher, ein paar Sekunden wegzunehmen...

 
leonerd:

Ich kann jetzt nicht denken, ich gebe Ihnen ein Beispiel, vielleicht bekommen Sie eine Idee

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

eine Idee https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

wie diese

Makar, vielen Dank für den Code - ich habe den Code umgeschrieben, indem ich externe Variablen anstelle von festen Werten an icastom übergeben habe. Bitte klären Sie, ob intTral = 50 der Abstand ist, in dem das Schleppnetz gehalten wird, oder ob es der Abstand in Pips ist, nach dem das Schleppnetz aktiviert wird .

 
DanilaMactep:

Makar, vielen Dank für den Code - ich habe den Code umgeschrieben, indem ich externe Variablen anstelle von festen Werten an icastom übergeben habe. Bitte klären Sie, ist intTral = 50; ist es der Abstand des Gewinns in Pips, nach dem das Schleppnetz eingeschaltet wird ?

es ist die Entfernung des Gewinns in Pips, nach der das Schleppnetz eingeschaltet wird

Grund der Beschwerde: