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

 
kopeyka2:

vorläufig

anderer (nicht einheimischer) Zeitrahmen


Und im Allgemeinen ignorieren Sie die Hilfe. Ich bin aus dem Dialog ausgestiegen. Ich habe Ihnen alle Daten gegeben, damit der Code richtig funktioniert, aber Sie wollen das nicht hören und machen alles auf Ihre Weise. Es ist schade um die Zeit.
 
Artyom Trishkin:
Jedenfalls ignorieren Sie die Hilfe. Ich bin aus dem Dialog ausgestiegen. Ich habe Ihnen alle Daten gegeben, damit der Code richtig funktioniert, aber Sie wollen sie nicht hören und machen die Dinge auf Ihre eigene Weise. Es ist schade um die Zeit.

Vielen Dank für Ihre Aufmerksamkeit und Ihre Zeit.... Ich schätze, ich habe es noch nicht herausgefunden... Was die Räder und den Motor betrifft, stimme ich zu.

Ich werde wahrscheinlich auf den Handheld verzichten und den iClose-Durchschnitt für den Durchschnittszeitraum berechnen.

 
kopeyka2:

Vielen Dank für Ihre Aufmerksamkeit und Ihre Zeit.... Ich schätze, ich habe es noch nicht herausgefunden... Was die Räder und den Motor betrifft, stimme ich zu.

Ich werde wahrscheinlich auf den Handheld verzichten und den iClose-Durchschnitt für den Durchschnittszeitraum berechnen.

//+------------------------------------------------------------------+
//|                                                       TestMA.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                                 https://mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com"
#property version   "1.00"
#property description "Выводит данные скользящей средней с заданного таймфрейма на любом текущем"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LWMA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input uint                 InpPeriod         =  14;            // MA period
input int                  InpShift          =  0;             // MA shift
input ENUM_MA_METHOD       InpMethod         =  MODE_SMA;      // MA method
input ENUM_APPLIED_PRICE   InpApplierPrice   =  PRICE_CLOSE;   // MA applied price
input ENUM_TIMEFRAMES      InpTimeframe      =  PERIOD_H1;     // LRMA timeframe
//--- indicator buffers
double         BufferMA[];
//--- global variables
//ENUM_TIMEFRAMES   timeframe1;
int            period_ma;
int            shift_ma;
int            handle_ma;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- timer
   EventSetTimer(90);
//--- set global variables
   period_ma=int(InpPeriod<1 ? 1 : InpPeriod);
   shift_ma=InpShift;
   //timeframe1=(InpTimeframe>Period() ? InpTimeframe : Period());
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferMA,INDICATOR_DATA);
//--- setting indicator parameters
   IndicatorSetString(INDICATOR_SHORTNAME,"Any TF MA on current");
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- setting plot buffer parameters
   string label=TimeframeToString(InpTimeframe)+" "+MethodToString(InpMethod)+"("+(string)period_ma+")";
   PlotIndexSetString(0,PLOT_LABEL,label);
//--- setting buffer arrays as timeseries
   ArraySetAsSeries(BufferMA,true);
//--- create handles
   ResetLastError();
   handle_ma=iMA(NULL,InpTimeframe,period_ma,shift_ma,InpMethod,InpApplierPrice);
   if(handle_ma==INVALID_HANDLE)
     {
      Print("The ",TimeframeToString(InpTimeframe)," iMA(",(string)period_ma,") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//--- get timeframe
   Time(NULL,InpTimeframe,1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- Проверка количества доступных баров
   if(rates_total<fmax(period_ma,4)) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-1;
      ArrayInitialize(BufferMA,EMPTY_VALUE);
     }
//--- Подготовка данных
   if(Time(NULL,InpTimeframe,1)==0)
      return 0;
   int bars=(InpTimeframe==PERIOD_CURRENT ? rates_total : Bars(NULL,InpTimeframe));
   int count=(limit>1 ? fmin(bars,rates_total) : 1),copied=0;
   copied=CopyBuffer(handle_ma,0,0,count,BufferMA);
   Comment(TimeframeToString(InpTimeframe)," ",MethodToString(InpMethod),": copied=",copied,", count=",count,", bars=",bars,", rates_total=",rates_total);
   if(copied!=count) return 0;
      
//--- Расчёт индикатора
   //for(int i=limit; i>=0 && !IsStopped(); i--)
   //  {
   //   
   //  }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Custom indicator timer function                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   Time(NULL,InpTimeframe,1);
  }
//+------------------------------------------------------------------+
//| Возвращает Time                                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   ArraySetAsSeries(array,true);
   return(CopyTime(symbol_name,timeframe,shift,1,array)==1 ? array[0] : 0);
  }
//+------------------------------------------------------------------+
//| Возвращает наименование таймфрейма                               |
//+------------------------------------------------------------------+
string TimeframeToString(const ENUM_TIMEFRAMES timeframe)
  {
   return StringSubstr(EnumToString(timeframe),7);
  }
//+------------------------------------------------------------------+
//| Возвращает наименование метода МА                                |
//+------------------------------------------------------------------+
string MethodToString(ENUM_MA_METHOD method)
  {
   return StringSubstr(EnumToString(method),5);
  }
//+------------------------------------------------------------------+

Alles Unnötige wurde entfernt.

Vergessen Sie nicht, dass es am Wochenende keine Ticks gibt und die Linie nur in denselben Zeitrahmen ausgegeben wird - dem Arbeits- und dem Einstellungszeitrahmen.

Wenn Sie es auf einem anderen als dem in den Einstellungen angegebenen Zeitrahmen laufen lassen, dann müssen Sie ohne Ticks am Wochenende das Diagramm mit der rechten Maustaste zwangsweise aktualisieren: Aktualisieren, damit die Linie gezeichnet wird.

 
Artyom Trishkin:

Alles Unnötige wurde entfernt.

Vergessen Sie nicht, dass es am Wochenende keine Häkchen gibt und die Linie nur in den passenden Zeitrahmen angezeigt wird - dem Arbeits- und dem Einstellungszeitrahmen.

Wenn Sie es auf einem anderen als dem in den Einstellungen angegebenen Zeitrahmen laufen lassen, dann müssen Sie ohne Ticks am Wochenende das Diagramm mit der rechten Maustaste zwangsweise aktualisieren: Aktualisieren, damit die Linie gezeichnet wird.

Vielen Dank!!1 Ich habe den ganzen Tag herumgepfuscht.... meine Augen sind zugenäht. Nochmals vielen Dank
 

Guten Tag, liebe Kolleginnen und Kollegen.

 
Ich hab's. Danke.
 
Guten Tag zusammen.
Ich bin mit dem Problem der Zeitverschiebung konfrontiert und bitte um Hilfe bei der Lösung dieses Problems.
Ich versuche zu verstehen, warum Aufträge zu spät laufen, ich bin Debugging-Informationen in meinem EA protokolliert, es ist absolut korrekt, können Sie es im Screenshot zu sehen. Ich stelle fest, dass die Zeit der Nachricht 4,5 Stunden über der Anfangszeit der Balken liegt (TF=M30), und diese Verzögerung führt dazu, dass die Aufträge zu spät kommen. D.h., nach den Debugging-Informationen sehe ich, dass die Bedingung für den Markteintritt erfüllt ist, z.B. die Zeit auf dem Balken ist 10:00, aber der Auftrag wird auf dem Balken mit der Zeit 14:30 platziert. Das ist das erste Mal, dass ich eine solche Situation erlebe. Was ist zu tun?
Dateien:
MT5dataerror.jpg  724 kb
 

Trailing-Stop-Code auf Youtube gefunden, wie kann er verwendet werden?

#include <Trade\Trade.mqh> 
CTrade trade;

void OnTick()
  {
    double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
    
         if(PositionsTotal()<2)
    
    trade.Buy(0.10,NULL,Ask,(Ask-1000 * _Point),(Ask+500 * _Point),NULL);
    
    CheckTrailingStop(Ask);
   
  }
void   CheckTrailingStop(double Ask)
  {
     double SL = NormalizeDouble(Ask - 150 * _Point,_Digits);
     
     for (int i=PositionsTotal()-1; i>=0; i--)
     {
     string symbol=PositionGetSymbol(i);
     if (_Symbol==symbol)
     {
     ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
     
     double CurrentStopLoss=PositionGetDouble(POSITION_SL);
     if (CurrentStopLoss<SL)
     {
       trade.PositionModify(PositionTicket,(CurrentStopLoss + 10*_Point),0);
     }
   }
  }   
}
 
Vladimir Baskakov:

Trailing-Stop-Code auf Youtube gefunden, wie kann er verwendet werden?

Dieses Schleppnetz ist nur für den Kauf gedacht und ist schlecht implementiert, es kann nicht verwendet werden.

 
Nikolay Khrushchev:

dieses Schleppnetz ist nur für den Kauf gedacht und ist schlecht implementiert, es kann nicht verwendet werden.

Okay, danke.