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

 

Bitte um Hilfe. Ich kann nicht verstehen, die for() Schleife, die ganze Zeit nach der Aktualisierung, weil der Offset(iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) Der Indikator wird neu gezeichnet!


//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)
                    );
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

Vielen Dank im Voraus.

 
Alexey Viktorov:

Meiner Meinung nach ist dieser Ansatz überhaupt nicht logisch. Warum sollte man den Wochentag festlegen? Welchen Unterschied macht es, welcher Tag es ist, wenn die Bedingung lauten sollte: "Heute nicht mehr als xxx Aufträge eröffnen"?

Es erscheint mir logischer, die heute eröffneten Aufträge zu zählen und die entsprechende Bedingung anzugeben.

es gibt kein Datum der Auftragseröffnung.


Wenn Sie es wissen, schreiben Sie bitte, wie man es macht)
Ich verstehe nicht, wie man sicherstellen kann, dass an einem bestimmten Tag nicht mehr als die n-te Anzahl von Aufträgen während des gesamten Tages geöffnet wird.

 
cripple:

Bitte um Hilfe. Ich kann nicht verstehen, die for() Schleife, die ganze Zeit nach der Aktualisierung, weil der Offset(iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,i)) Der Indikator wird neu gezeichnet!


Ich danke Ihnen im Voraus.

Die MAs haben unterschiedliche TFs. Sie müssen den höheren Zeitrahmen irgendwie in die M1-TF einpassen, d.h. die MAs zweimal mit unterschiedlicher Anzahl von Ticks zählen. In diesem Fall wird ein und derselbe Wert der älteren Periode zu verschiedenen Werten der jüngeren Periode addiert.

Wenn Sie i durchgehen, erhalten Sie z. B. 10 Kerzen der Periode D1 und 10 M1. Logischerweise ist etwas falsch....

Und noch etwas: Wenn der Blinker auf M1 eingestellt ist, funktioniert er höchstwahrscheinlich ohne Nachbrisungen.

 
Renat Akhtyamov:

Die MAs haben unterschiedliche TFs. Sie müssen den höheren Zeitrahmen sozusagen in die M1-TF einpassen, d.h. die MAs zweimal mit unterschiedlicher Anzahl von Ticks zählen.

Wenn Sie durch i gehen, nehmen Sie jetzt zum Beispiel 10 Kerzen der Periode D1 und 10 M1. Logischerweise ist etwas falsch....

Ja, du hast recht, aber mein Verstand reicht noch nicht aus, um zu verstehen, wie man M1 richtig zählt.
 
cripple:
Ja, du hast recht, aber mein Verstand reicht immer noch nicht aus, um herauszufinden, wie ich M1 dazu bringe, richtig zu zählen.

Außerdem muss ich M1 mit einem höheren Zeitrahmen synchronisieren, denn 1 Bar von M5 entspricht nicht unbedingt 5 Kerzen von M1, es können auch 4 oder 1 sein.

 
cripple:
Ja, du hast Recht, aber mein Verstand reicht noch nicht aus, um zu verstehen, wie man M1 richtig zählt.

Versuchen Sie

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );

Zeit des i-ten Taktes und setzt die resultierende Taktnummer anstelle von i ein.

 
Könnten Sie mir bitte sagen, ob Sie mit der Tastatur durch die offenen Paare im mt4-Terminal blättern können?
 
LRA:
Lieber novikov433!!! Ich bringe Ihnen das Programmieren bei oder schreibe Ihnen einen kostenlosen Expert Advisor oder beides!!! Im Gegenzug bringen Sie mir bei, wie verlustbringende Aufträge in verlustfreie Aufträge umgewandelt werden. Sie können ein einfaches Beispiel verwenden. Ich gebe meiner Frau einen Auftrag (Auftrag): Kaufe einen Eimer Kartoffeln früh morgens auf dem Markt, und um 10 Uhr (Fundamentalanalyse) steigt der Preis - verkaufe. Aber manchmal kommt eine LKW-Ladung Kartoffeln um 10:30 Uhr an (Nachrichten). Und der Preis (in den Nachrichten) fällt sofort und hält bis zum Ende des Tages oder sogar die ganze Woche über an. Ich setze einen Stop-Loss - wenn der Kurs um 10 Rubel fällt, verkaufe ich so schnell wie möglich (zum Marktpreis). Wie man die Reihenfolge ändert, um Verluste zu vermeiden. Wenn diese Variante interessant ist, schicken Sie uns Ihre E-Mail.
Das Problem ist, dass der Markt leicht auf die gewünschte Seite gegangen ist und dann wieder zurückging, so dass Sie das Geschäft zum Break-Even schließen und für einen Reverse öffnen müssen. ich wurde süchtig danach, sobald ich anfing. wieder einmal wurde ich davon überzeugt, dass es Blödsinn ist, mit Händen zu handeln. wie kann ich verstehen, warum ich so viele Komponenten in meinen Code schreiben muss?
 
Alexey Viktorov:

Versuchen Sie

den Zeitpunkt des i-ten Taktes und setzt die daraus resultierende Taktnummer anstelle von i ein.


Haben Sie schon einmal an so etwas gedacht?
//+------------------------------------------------------------------+
//|                                                         help.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Averages Convergence/Divergence"
#property strict
#include <MovingAverages.mqh>
//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  clrSilver
#property   indicator_color2  clrRed
#property   indicator_width1  2

//--- indicator parameters
input int SignalSMA=8;            // Signal SMA Period
//--- indicator buffers
double    ExtBuffer[];
double    ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- counted in the 1-st buffer
   for(i=0;i<limit;i++)
     {
      int bars=iBarShift(Symbol(),PERIOD_M1,iTime(Symbol(),PERIOD_CURRENT,i),false);
      ExtBuffer[i]=(
                    iMA(NULL,PERIOD_CURRENT,1,0,MODE_SMA,PRICE_HIGH,i)
                    +iMA(NULL,PERIOD_M1,1,1,MODE_SMA,PRICE_OPEN,bars)
                    );
      Print(bars);
     }
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,SignalSMA,ExtBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
ax00071:
Vielen Dank für Ihre Aufmerksamkeit )) Ich bin ein Trottel ... ... beim Abschluss hatte ich die Bedingung, das Geschäft am Freitag um 22:00 Uhr abzuschließen, ohne zusätzliche Bedingungen zur Überprüfung der Geschäftsart. Das Geschäft selbst wurde ein paar Stunden früher abgeschlossen. Nun, als 22:00 Uhr kam, begann der Expert Advisor Aufträge zu senden, um einen Auftrag zu schließen, der bereits geschlossen war ... .
Sie sollten sich kaum als Pflanze bezeichnen. Wenn Sie es geschafft haben, einen solchen Fehler zu finden, zu verstehen und zu korrigieren, nähern Sie sich dem Niveau eines Programmierers!
Grund der Beschwerde: