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

 

MakarFX , welche Funktion hat diese Bindung: welche Funktion führt sie aus?


input int BarTrade = 5; // Ich verstehe, dass dies die Anzahl der verfolgten Perioden von 5 ist.

int TimeBarTrade=BarTrade*Period()*60; // wie soll ich das verstehen, warum wird das mit 60 multipliziert?

 
Alexey Belyakov:

MakarFX , welche Funktion hat diese Bindung: welche Funktion führt sie aus?


input int BarTrade = 5; // Ich verstehe, dass dies die Anzahl der verfolgten Perioden von 5 ist.

int TimeBarTrade=BarTrade*Period()*60; // Wie ist das zu verstehen? Warum wird es mit 60 multipliziert?

BarTrade*Zeitraum()*60

Anzahl der Balken * aktueller Zeitrahmen * 60 Sekunden

d.h. Balkenmenge umgerechnet in Sekunden

 
MakarFX:

BarTrade*Zeitraum()*60

Anzahl der Balken * aktueller Zeitrahmen * 60 Sekunden

d.h. die Anzahl der Takte, umgerechnet in Sekunden

Sie können es so machen.

int TimeBarTrade = PeriodSeconds()*BarTrade;
 
MakarFX:

Wenn Sie Fehler ausschließen, die sich auf

MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT

dann werden die Eulen den Server nicht angreifen.

Makar, vielen Dank für den Hinweis darauf, welche Kontrollen durchgeführt werden müssen, damit der Server nicht in Bedrängnis gerät und der EAJ nicht gesperrt wird.

So werden die Kontrollen durchgeführt

mod stop level für stop

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }

mod stop level for profit

      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         


Prüfung der Gewerbeberechtigung

//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВ
   if(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
   {// начало есл торговля разрешена
  /*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИ
          
          else //ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА 
          
          { // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ 
          
          Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
          }  // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ

Prüfung auf maximale und minimale Menge

Zuerst habe ich die Werte für das maximale und minimale Los in den Variablen wie folgt eingegeben

  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ

Und dann schaue ich irgendwo unten nach, während ich den Gral schreibe

  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

Ist dies richtig oder liege ich falsch?

Ich habe die Änderung der Losgröße nicht überprüft, weil das Los als Prozentsatz der Einlage berechnet wird und dieser Wert mit einem Punkt multipliziert und normalisiert wird - diese Überprüfung kann weggelassen werden - richtig, oder sollte ich sie trotzdem durchführen? Müssen wir noch prüfen, wie wir diesen Scheck ausstellen können?

Der Hauptzweck all dieser Überprüfungen besteht darin, immer den richtigen Wert für Stopp, Gewinn und Losgröße zu haben, so dass wir im Allgemeinen mit der Eröffnung von Aufträgen beginnen können. Wenn alle diese Parameter in Ordnung sind, wird der Expert Advisor den Server nicht belästigen; verstehe ich das richtig?

 
DanilaMactep:

Vielen Dank, Makar, dass du mir gesagt hast, welche Kontrollen ich durchführen muss, um den Server zu umgehen und die EAJ zu sperren.


//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ

Hier kann ein Fehler von 130 aufgrund von Schlupf auftreten.

Ich würde dies tun

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         
 

Hallo zusammen, hat jemand ein Problem mit hängenden Punkten in der Tabelle, die durch iHighest/iLowest gefunden wurde?

Vorgeschichte: Ich habe minimale Programmiererfahrung, ich schreibe einen Indikator in mql4, der die Punkte auf dem Diagramm anzeigen soll, die durch die Bedingungen von wenn gefunden werden und sie mit Linien verbinden. Logischerweise sucht es die Punkte richtig, zeichnet sie aber mit einem Versatz, dann für 2 Takte, dann für 3 Takte. Ich habe die Datei mit dem Code ebenfalls beigefügt.


int start()
  {
   int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().
   int n,limit;
   int val_index;
   
  if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.
   if(limit>barsToProcess)
      limit=barsToProcess;

   for(n=0; n<=limit; n++)
     {
      if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
        }
      else
         if((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
           }
     }
   return (0);
  }
Dateien:
AZforum.mq4  8 kb
 
azolotta:

Hallo zusammen, hat jemand ein Problem mit hängenden Punkten in der Tabelle, die durch iHighest/iLowest gefunden wurde?

Vorgeschichte: Ich habe minimale Programmiererfahrung, ich schreibe einen Indikator in mql4, der die Punkte auf dem Diagramm anzeigen soll, die durch die Bedingungen von wenn gefunden werden und sie mit Linien verbinden. Logischerweise sucht es die Punkte richtig, zeichnet sie aber mit einem Versatz, dann für 2 Takte, dann für 3 Takte. Ich habe die Datei mit dem Code ebenfalls beigefügt.


Die Punkte werden korrekt und ohne Versatz gezeichnet.

Wenn die Bedingung erfüllt ist und iHighest/iLowest größer oder kleiner sind als der aktuelle High/Low

es zieht


 
MakarFX:

Punkte werden korrekt gezeichnet, ohne Versatz

wenn die Bedingung erfüllt ist und iHighest/iLowest größer oder kleiner als der aktuelle High/Low ist

zieht dann


So, ich glaube, ich beginne, meinen Fehler zu erkennen) Also, um visuell diese Punkte an der richtigen Stelle anzuzeigen, muss ich einige separate Zähler anstelle von n für myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] eingeben ? aber wie macht man das
 
azolotta:
Also, ich glaube, ich beginne zu erkennen, meinen Fehler) Es stellt sich heraus, dass visuell diese Punkte an der richtigen Stelle angezeigt werden, muss ich einige separate Zähler anstelle von n für myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] eingeben? aber wie es zu tun

Nein, Sie verstehen das richtig.

die Bedingung verwendet zwei oder drei Takte aus der Historie,

deshalb wird nach 2-3 Takten gezeichnet, wenn die Bedingung erfüllt ist

 
MakarFX:

Nein, Sie verstehen das richtig.

die Bedingung verwendet zwei oder drei Takte aus der Historie,

deshalb wird nach 2-3 Takten gezeichnet, wenn die Bedingung erfüllt ist

OK, wie muss ich dann den Code überarbeiten, wenn ich z.B. das höchste Hoch aus den letzten 3 Balken (die die Bedingungen in if erfüllen) auswählen und einen Punkt darauf setzen muss (genau auf diesem Hoch!), und dann auch den Tiefpunkt finden muss.