Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 224

 
Im Expert Advisor sind die ersten Zeilen in
OnTick()

Nach diesen Zeilen wird der weitere Code einmal pro Kerze ausgeführt. Zum Zeitpunkt der Gründung.

Sie rufen diesen Indikator aus dem EA, wie ich es verstehe?

 
Aleksei Stepanenko:
Im Expert Advisor werden die ersten Zeilen in

Nach diesen Zeilen wird der weitere Code einmal pro Kerze ausgeführt. Zum Zeitpunkt der Gründung.

Sie rufen diesen Indikator aus dem EA auf, wie ich es verstehe?

Nun, eigentlich füge ich diesen Indikator in einen anderen Indikator ein, der das Signal an ein anderes Programm sendet. Das heißt, es gibt keinen Expert Advisor. Das heißt, er sollte irgendwo im Indikator selbst eingefügt werden, aber wie?
 
Welches Programm eröffnet die Geschäfte? Sie ist ein Berater. Nicht wahr?
 
Aleksei Stepanenko:
Und welches Programm eröffnet das Geschäft? Das ist der Expert Advisor. Nicht wahr?

Na ja, vielleicht... Aber dann scheinen die Dinge viel komplizierter zu werden... Es gibt keine Möglichkeit, das in diesen Code einzubauen, oder? Und auch im zweiten Indikatorcode ist kein Code enthalten.

OnTick()
Wie zur Hölle soll das überhaupt funktionieren...:)))))
 
Sie können auch einen anderen Weg ausprobieren, indem Sie diesen Indikator über iCustom aufrufen und am Ende dieser Funktion eine 1 statt einer 0 eingeben.
 
Übrigens zeichnet der Indikator immer noch viele Pfeile, aber wenn ich das Diagramm neu lade, bleiben nur einige von ihnen übrig. :( Als ob der Indikator speichert sich auf die Geschichte, wie schauen, wie ich Handel gut, aber in Echtzeit ist es ganz anders. :(
 
ElenkaVladi:
Übrigens zeichnet der Indikator auch noch viele Pfeile,

Ja? Hmm, ich werde mir das später einmal ansehen.

 
Aleksei Stepanenko:
Sie können auch einen anderen Weg ausprobieren, indem Sie diesen Indikator über iCustom aufrufen und am Ende dieser Funktion eine 1 statt einer 0 eingeben.

Sie meinen so?

if (IndicatorName != "") {
      up = iCustom(NULL, 0, IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom(NULL, 0, IndicatorName, IndiBufferPut, SignalType);
if (IndicatorName != "") {
      up = iCustom(NULL, 1, IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom(NULL, 1, IndicatorName, IndiBufferPut, SignalType);

Etwa so?

 
Aleksei Stepanenko:

Ja? Hmm, ich werde mir das später einmal ansehen.

Vielleicht liegt es an dieser Botschaft. Sollten wir nicht tun, was dort steht?

https://www.mql5.com/ru/forum/160587/page223#comment_19618305

Jedenfalls vielen Dank, dass Sie hier mit uns getrickst haben... :)))

Zum besseren Verständnis der Situation füge ich die Dateien bei.

Вопросы от начинающих MQL4 MT4 MetaTrader 4
Вопросы от начинающих MQL4 MT4 MetaTrader 4
  • 2020.11.29
  • www.mql5.com
Если у Вас вопросы по MQL4, MT4, MetaTrader 4, пожалуйста пишите в этой теме. Особенно когда вопросы касаются торговых функций...
 
ElenkaVladi:

Hier ist der Arbeitscode:

//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 2
#property  indicator_color1  Blue
#property  indicator_color2  Red
//---- indicator parameters
extern int  period = 4; //12
extern int  shift  = 0; //сдвиг по бару
//---- indicator buffers
double BufferUp[],BufferDn[];
double Ma[],MaOn[];

datetime LastTime=0;
int i, st=5;

int OnInit()
   {
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_ARROW,2);
   SetIndexArrow(0,233);
   SetIndexStyle(1,DRAW_ARROW,2);
   SetIndexArrow(1,234);

   SetIndexBuffer(0,BufferUp);//стрелка синяя верх
   SetIndexBuffer(1,BufferDn);//стрелка красная вниз
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("T3MA-ALARM ("+period+")");
   
   ArraySetAsSeries(Ma,true);
   ArraySetAsSeries(MaOn,true);
//---- initialization done
   if(Digits==3 || Digits==5) st*=10;
   return(INIT_SUCCEEDED);
   }
   
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[])
   {
   if(rates_total<=MathMax(period,shift)) return(0);
   int limit=rates_total-prev_calculated;   
   if(prev_calculated>0) limit++;

   if(LastTime!=time[1])
      {
      LastTime=time[1];
      ArrayCopy(Ma,Ma,rates_total-ArraySize(Ma),0,WHOLE_ARRAY);
      ArrayCopy(MaOn,MaOn,rates_total-ArraySize(MaOn),0,WHOLE_ARRAY);
      }

   for(i=limit; i>=1; i--) Ma[i]=iMA(NULL,0,period,0,MODE_EMA,PRICE_CLOSE,i);
   for(i=limit; i>=1; i--) MaOn[i]=iMAOnArray(Ma,rates_total,period,0,MODE_EMA,i);
      
   for(i=limit; i>=1; i--)
      {
      if(MaOn[i+shift]-MaOn[i+1+shift]<0 && MaOn[i+1+shift]-MaOn[i+2+shift]>0){BufferDn[i+1]=high[i+1]+st*Point;}
      if(MaOn[i+shift]-MaOn[i+1+shift]>0 && MaOn[i+1+shift]-MaOn[i+2+shift]<0){BufferUp[i+1]=low[i+1]-st*Point;}
      }
   return(rates_total);
   }
Beachten Sie, dass der Pfeil rückwärts gezeichnet ist BufferDn[i+1]=... Das ist bedauerlich.