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

 
klycko DEAL_ENTRY_OUT verwenden.
Aber wie man ihn verwendet, verstehe ich nicht.

Bitte helfen Sie mir.

Mit freundlichen Grüßen, Alexander


Sie sind auf dem richtigen Weg. Aber nicht aufmerksam genug


 
klycko DEAL_ENTRY_OUT verwenden.
Aber wie man ihn verwendet, verstehe ich nicht.
void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // структура торговой транзакции
   const MqlTradeRequest&        request, // структура запроса
   const MqlTradeResult&         result   // структура ответа
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_OUT)
        {

           //---

        }

Mit freundlichen Grüßen, Vladimir.

 
Alexey Viktorov #:

Sie sind auf dem richtigen Weg. Aber nicht aufmerksam genug

Hallo Alexej, es ist toll, dass du Anfänger beim Erlernen einer Programmiersprache unterstützt und Leuten wie uns nicht überdrüssig wirst. Herzlichen Dank dafür!

Was ist das Hauptproblem von Anfängern. Ich werde nur für mich selbst sprechen. Ja, ich verstehe in der Tat nicht immer, wie ich die vielfältigen Möglichkeiten, die die Programmiersprache MQL5 bietet, anwenden soll. Ohne Grundausbildung oder Praxis in der Programmierung in Hochsprachen ist es sehr schwer, in dieses Thema einzusteigen. Nur Forenmitglieder wie Sie helfen mir dabei. Mir ist klar, dass viele es leid sind (und manchmal auch keine Zeit oder Geduld haben), einen Neuling, der plötzlich im Forum aufgetaucht ist, ständig anzusprechen.

Ich möchte mich noch einmal bei allen bedanken, die auf unsere dilettantischen Fragen antworten, und wünsche Ihnen allen Gesundheit, langes Leben, viel Glück und Wohlstand!!!!

Mit freundlichen Grüßen, Vladimir.

 

Guten Tag an alle.
Bitte sagen Sie mir, wie ich den Accelerator Oscillator Indikator hinzufügen kann, um ein Signal für VERKAUF bei roter Farbe und ein Signal für KAUF bei grüner Farbe beim Schließen des letzten Balkens zu geben.

Danke

 
makssub Accelerator Oscillator Indikator schrauben kann, um ein Signal für VERKAUF auf der roten Farbe und ein Signal für KAUF auf der grünen Farbe zu geben, beim Schließen des letzten Balkens.

Danke

Verbinden Sie den Indikator mit dem Expert Advisor und erhalten Sie seine Daten über CopyBuffer(). Der Farbpuffer hat den Index 1, wobei 0 für Grün und 1 für Rot steht.
Документация по MQL5: Технические индикаторы / iAC
Документация по MQL5: Технические индикаторы / iAC
  • www.mql5.com
iAC - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Verbinden Sie den Indikator mit dem Expert Advisor und rufen Sie seine Daten über CopyBuffer() ab. Der Farbpuffer hat den Index 1, wobei der Wert 0 für Grün und 1 für Rot steht.

Wenn es Ihnen nichts ausmacht. Können Sie mir ein Beispiel geben?

MQL5 ist schwer für mich nach MQL4.

 
makssub #:

Wenn es nicht zu viel Mühe macht. Können Sie mir ein Beispiel geben?

MQL5 ist schwer für mich nach MQL4.

Die Beispiele sind in den Links in meinem Beitrag oben
 

Hallo.

Es gibt einen ADX-Indikator in der Code-Basis. Er enthält dieses Stück Code

//--- set draw begin
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtADXPeriod<<1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,ExtADXPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,ExtADXPeriod);

Wenn

ExtADXPeriod=14

stellt sich heraus, dass ExtADXPeriod<<1 gleich dem Wert 9 ist.

Warum brauchen wir dann einen solchen Eintrag? Kann er nicht ohne Bitverschiebungen geschrieben werden?

ExtADXPeriod<<1

vollständiger Code des Indikators unten


//+------------------------------------------------------------------+
//|                                                          ADX.mq5 |
//|                             Copyright 2000-2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2000-2023, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property description "Average Directional Movement Index"
#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  LightSeaGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_type2   DRAW_LINE
#property indicator_color2  YellowGreen
#property indicator_style2  STYLE_DOT
#property indicator_width2  1
#property indicator_type3   DRAW_LINE
#property indicator_color3  Wheat
#property indicator_style3  STYLE_DOT
#property indicator_width3  1
#property indicator_label1  "ADX"
#property indicator_label2  "+DI"
#property indicator_label3  "-DI"
//--- input parameters
input int InpPeriodADX=14; // Period ADX
//--- indicator buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];

int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      PrintFormat("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else
      ExtADXPeriod=InpPeriodADX;
//--- indicator buffers
   SetIndexBuffer(0,ExtADXBuffer);
   SetIndexBuffer(1,ExtPDIBuffer);
   SetIndexBuffer(2,ExtNDIBuffer);
   SetIndexBuffer(3,ExtPDBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(4,ExtNDBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,ExtTmpBuffer,INDICATOR_CALCULATIONS);
//--- indicator digits
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set draw begin
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtADXPeriod<<1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,ExtADXPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,ExtADXPeriod);
//--- indicator short name
   string short_name="ADX("+string(ExtADXPeriod)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//--- checking for bars count
   if(rates_total<ExtADXPeriod)
      return(0);
//--- detect start position
   int start;
   if(prev_calculated>1)
      start=prev_calculated-1;
   else
     {
      start=1;
      ExtPDIBuffer[0]=0.0;
      ExtNDIBuffer[0]=0.0;
      ExtADXBuffer[0]=0.0;
     }
//--- main cycle
   for(int i=start; i<rates_total && !IsStopped(); i++)
     {
      //--- get some data
      double high_price=high[i];
      double prev_high =high[i-1];
      double low_price =low[i];
      double prev_low  =low[i-1];
      double prev_close=close[i-1];
      //--- fill main positive and main negative buffers
      double tmp_pos=high_price-prev_high;
      double tmp_neg=prev_low-low_price;
      if(tmp_pos<0.0)
         tmp_pos=0.0;
      if(tmp_neg<0.0)
         tmp_neg=0.0;
      if(tmp_pos>tmp_neg)
         tmp_neg=0.0;
      else
        {
         if(tmp_pos<tmp_neg)
            tmp_pos=0.0;
         else
           {
            tmp_pos=0.0;
            tmp_neg=0.0;
           }
        }
      //--- define TR
      double tr=MathMax(MathMax(MathAbs(high_price-low_price),MathAbs(high_price-prev_close)),MathAbs(low_price-prev_close));
      if(tr!=0.0)
        {
         ExtPDBuffer[i]=100.0*tmp_pos/tr;
         ExtNDBuffer[i]=100.0*tmp_neg/tr;
        }
      else
        {
         ExtPDBuffer[i]=0.0;
         ExtNDBuffer[i]=0.0;
        }
      //--- fill smoothed positive and negative buffers
      ExtPDIBuffer[i]=ExponentialMA(i,ExtADXPeriod,ExtPDIBuffer[i-1],ExtPDBuffer);
      ExtNDIBuffer[i]=ExponentialMA(i,ExtADXPeriod,ExtNDIBuffer[i-1],ExtNDBuffer);
      //--- fill ADXTmp buffer
      double tmp=ExtPDIBuffer[i]+ExtNDIBuffer[i];
      if(tmp!=0.0)
         tmp=100.0*MathAbs((ExtPDIBuffer[i]-ExtNDIBuffer[i])/tmp);
      else
         tmp=0.0;
      ExtTmpBuffer[i]=tmp;
      //--- fill smoothed ADX buffer
      ExtADXBuffer[i]=ExponentialMA(i,ExtADXPeriod,ExtADXBuffer[i-1],ExtTmpBuffer);
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.11.30
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Novichokkk #:

Wenn

ExtADXPeriod=14

dannist ExtADXPeriod<<1 gleich dem Wert 9

ist gleich 28 (14<<1 ist wie 14*2, solange es genug Ziffern gibt)

Achten Sie nicht darauf, der Compiler berechnet die const-Ausdrücke sowieso beim Kompilieren und sie werden nicht in den Code übernommen. Nur ihr Ergebnis

es könnte eine verfrühte Optimierung sein oder der Autor wollte zeigen, dass er cool ist.

 
Maxim Kuznetsov #:

ist gleich 28 (14<<1 ist wie 14*2, solange es genügend Ziffern gibt)

Achten Sie nicht darauf, der Compiler zählt die bekannten const-Ausdrücke beim Kompilieren und sie werden nicht in den Code übernommen. Nur ihr Ergebnis

es könnte eine verfrühte Optimierung sein oder der Autor wollte zeigen, dass er cool ist.

1-Warum 28?

14 ist binär. Sie ist 1110.

Schiebt man ein Bit nach links, ist es 0111, konvertiert man zurück in dezimal, ist es 9. 1*1+1+1*2+1*4=7 (falsch, nicht 9).


2-Ich hätte gerne noch ein konkretes Beispiel in diesem Fall, was ist richtiger in einer solchen Konstruktion anstelle vonExtADXPeriod<<1 einzufügen ?